diameter.m ( File view )

  • By yueqiaohuayuan 2014-11-17
  • View(s):3508
  • Download(s):7
  • Point(s): 3
			function s = diameter(L)
%DIAMETER Measure diameter and related properties of image regions.
%   S = DIAMETER(L) computes the diameter, the major axis endpoints,
%   the minor axis endpoints, and the basic rectangle of each labeled
%   region in the label matrix L. Positive integer elements of L
%   correspond to different regions. For example, the set of elements
%   of L equal to 1 corresponds to region 1; the set of elements of L
%   equal to 2 corresponds to region 2; and so on.  S is a structure
%   array of length max(L(:)). The fields of the structure array
%   include:
%
%     Diameter              
%     MajorAxis
%     MinorAxis
%     BasicRectangle
%
%   The Diameter field, a scalar, is the maximum distance between any
%   two pixels in the corresponding region. 
%
%   The MajorAxis field is a 2-by-2 matrix.  The rows contain the row
%   and column coordinates for the endpoints of the major axis of the
%   corresponding region. 
%
%   The MinorAxis field is a 2-by-2 matrix.  The rows contain the row
%   and column coordinates for the endpoints of the minor axis of the
%   corresponding region. 
%
%   The BasicRectangle field is a 4-by-2 matrix.  Each row contains
%   the row and column coordinates of a corner of the
%   region-enclosing rectangle defined by the major and minor axes.
%
%   For more information about these measurements, see Section 11.2.1
%   of Digital Image Processing, by Gonzalez and Woods, 2nd edition,
%   Prentice Hall.

%   Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins
%   Digital Image Processing Using MATLAB, Prentice-Hall, 2004
%   $Revision: 1.6 $  $Date: 2003/11/21 14:31:09 $

s = regionprops(L, {
'Image', 'BoundingBox'
});

for k = 1:length(s)
    [s(k).Diameter, s(k).MajorAxis, perim_r, perim_c] = ...
        compute_diameter(s(k)); 
    [s(k).BasicRectangle, s(k).MinorAxis] = ...
        compute_basic_rectangle(s(k), perim_r, perim_c);
end

%-------------------------------------------------------------------%
function [d, majoraxis, r, c] = compute_diameter(s)
%   [D, MAJORAXIS, R, C] = COMPUTE_DIAMETER(S) computes the diameter
%   and major axis for the region represented by the structure S. S
%   must contain the fields Image and BoundingBox.  COMPUTE_DIAMETER
%   also returns the row and column coordinates (R and C) of the
%   perimeter pixels of s.Image.

% Compute row and column coordinates of perimeter pixels.
[r, c] = find(bwperim(s.Image));
r = r(:);
c = c(:);
[rp, cp] = prune_pixel_list(r, c);

num_pixels = length(rp);
switch num_pixels
case 0
   d = -Inf;
   majoraxis = ones(2, 2);
   
case 1
   d = 0;
   majoraxis = [rp cp; rp cp];
   
case 2
   d = (rp(2) - rp(1))^2 + (cp(2) - cp(1))^2;
   majoraxis = [rp cp];
   
otherwise
   % Generate all combinations of 1:num_pixels taken two at at time.
   % Method suggested by Peter Acklam.
   [idx(:, 2) idx(:, 1)] = find(tril(ones(num_pixels), -1));
   rr = rp(idx);
   cc = cp(idx);
   
   dist_squared = (rr(:, 1) - rr(:, 2)).^2 + ...
       (cc(:, 1) - cc(:, 2)).^2;
   [max_dist_squared, idx] = max(dist_squared);
   majoraxis = [rr(idx,:)' cc(idx,:)'];
   
   d = sqrt(max_dist_squared);
    
   upper_image_row = s.BoundingBox(2) + 0.5;
   left_image_col = s.BoundingBox(1) + 0.5;
   
   majoraxis(:, 1) = majoraxis(:, 1) + upper_image_row - 1;
   majoraxis(:, 2) = majoraxis(:, 2) + left_image_col - 1;
end

%-------------------------------------------------------------------%
function [basicrect, minoraxis] = compute_basic_rectangle(s, ...
                                                  perim_r, perim_c)
%   [BASICRECT,MINORAXIS] = COMPUTE_BASIC_RECTANGLE(S, PERIM_R,
%   PERIM_C) computes the basic rectangle and the minor axis
%   end-points for the region represented by the structure S.  S must
%   contain the fields Image, BoundingBox, MajorAxis, and
%   Diameter. PERIM_R and PERIM_C are the row and column coordinates
%   of perimeter of s.Image. BASICRECT is a 4-by-2 matrix, each row
%   of which contains the row and column coordinates of one corner of
%   the basic rectangle.  

% Compute the orientation of the major axis.
theta = atan2(s.MajorAxis(2, 1) - s.MajorAxis(1, 1), ...
              s.MajorAxis(2, 2) - s.MajorAxis(1, 2));

% Form rotation matrix.
T = [cos(theta) sin(theta); -sin(theta) cos(theta)];


...
...
(Please download the complete source code to view)
			
...
Expand> <Close

Want complete source code? Download it here

Point(s): 3

Download
0 lines left, continue to read
Sponsored links

File list

Tips: You can preview the content of files by clicking file names^_^
Name Size Date
01.97 kB
0_Read_Me_First.txt5.00 kB2012-02-29|09:51
Contents.m5.98 kB2012-02-29|09:51
Readme.m5.30 kB2012-02-29|09:51
adpmedian.m1.54 kB2012-02-29|09:51
average.m651.00 B2012-02-29|09:51
bayesgauss.m2.96 kB2012-02-29|09:51
bound2eight.m2.99 kB2012-02-29|09:51
bound2four.m2.42 kB2012-02-29|09:51
bound2im.m2.17 kB2012-02-29|09:51
boundaries.m5.64 kB2012-02-29|09:51
bsubsamp.m3.87 kB2012-02-29|09:51
changeclass.m592.00 B2012-02-29|09:51
colorgrad.m2.30 kB2012-02-29|09:51
colorseg.m2.37 kB2012-02-29|09:51
compare.m1.15 kB2012-02-29|09:51
connectpoly.m1.02 kB2012-02-29|09:51
conwaylaws.m799.00 B2012-02-29|09:51
covmatrix.m977.00 B2012-02-29|09:51
dftcorr.m687.00 B2012-02-29|09:51
dftfilt.m882.00 B2012-02-29|09:51
dftuv.m736.00 B2012-02-29|09:51
diameter.m6.47 kB2012-02-29|09:51
endpoints.m874.00 B2012-02-29|09:51
entropy.m1.00 kB2012-02-29|09:51
fchcode.m8.55 kB2012-02-29|09:51
frdescp.m1.42 kB2012-02-29|09:51
fwtcompare.m992.00 B2012-02-29|09:51
gmean.m447.00 B2012-02-29|09:51
gscale.m2.04 kB2012-02-29|09:51
histroi.m920.00 B2012-02-29|09:51
hough.m2.64 kB2012-02-29|09:51
houghlines.m2.82 kB2012-02-29|09:51
houghpeaks.m2.65 kB2012-02-29|09:51
houghpixels.m1.02 kB2012-02-29|09:51
hpfilter.m1.23 kB2012-02-29|09:51
hsi2rgb.m1.94 kB2012-02-29|09:51
huff2mat.m2.46 kB2012-02-29|09:51
huffman.m2.82 kB2012-02-29|09:51
ice.fig45.71 kB2012-02-29|09:51
ice.m26.30 kB2012-02-29|09:51
ice_stand_alone.m46.55 kB2012-02-29|09:51
ifrdescp.m1.38 kB2012-02-29|09:51
ifwtcompare.m1.12 kB2012-02-29|09:51
im2jpeg.m2.90 kB2012-02-29|09:51
im2jpeg2k.m3.97 kB2012-02-29|09:51
imnoise2.m4.20 kB2012-02-29|09:51
imnoise3.m2.12 kB2012-02-29|09:51
improd.m791.00 B2012-02-29|09:51
imratio.m1.30 kB2012-02-29|09:51
imstack2vectors.m1.83 kB2012-02-29|09:51
intline.m1.20 kB2012-02-29|09:51
intrans.m3.25 kB2012-02-29|09:51
invmoments.m3.24 kB2012-02-29|09:51
jpeg2im.m2.41 kB2012-02-29|09:51
jpeg2k2im.m1.90 kB2012-02-29|09:51
lpc2mat.m1.42 kB2012-02-29|09:51
lpfilter.m1.44 kB2012-02-29|09:51
mahalanobis.m1.97 kB2012-02-29|09:51
manualhist.m1.75 kB2012-02-29|09:51
mat2huff.m2.75 kB2012-02-29|09:51
mat2lpc.m1.28 kB2012-02-29|09:51
minperpoly.m7.15 kB2012-02-29|09:51
paddedsize.m1.29 kB2012-02-29|09:51
pixeldup.m950.00 B2012-02-29|09:51
polyangles.m6.14 kB2012-02-29|09:51
princomp.m2.88 kB2012-02-29|09:51
quantize.m1.33 kB2012-02-29|09:51
randvertex.m1.15 kB2012-02-29|09:51
regiongrow.m1.66 kB2012-02-29|09:51
rgb2hsi.m1.46 kB2012-02-29|09:51
rgbcube.m1.98 kB2012-02-29|09:51
signature.m4.45 kB2012-02-29|09:51
specxture.m2.57 kB2012-02-29|09:51
spfilt.m3.78 kB2012-02-29|09:51
splitmerge.m4.13 kB2012-02-29|09:51
statmoments.m1.72 kB2012-02-29|09:51
statxture.m1.55 kB2012-02-29|09:51
strsimilarity.m1.78 kB2012-02-29|09:51
subim.m713.00 B2012-02-29|09:51
twodsin.m1.04 kB2012-02-29|09:51
twomodegauss.m1.16 kB2012-02-29|09:51
unravel.dll7.00 kB2012-02-29|09:51
unravel.m967.00 B2012-02-29|09:51
unravel.mexaxp24.00 kB2012-02-29|09:51
unravel.mexglx18.97 kB2012-02-29|09:51
unravel.mexhpux12.00 kB2012-02-29|09:51
unravel.mexmac8.68 kB2012-02-29|09:51
unravel.mexrs62.71 kB2012-02-29|09:51
unravel.mexsg24.44 kB2012-02-29|09:51
unravel.mexsol8.54 kB2012-02-29|09:51
vistformfwd.m1.66 kB2012-02-29|09:51
wave2gray.m4.67 kB2012-02-29|09:51
waveback.m4.52 kB2012-02-29|09:51
wavecopy.m940.00 B2012-02-29|09:51
wavecut.m1.06 kB2012-02-29|09:51
wavefast.m4.14 kB2012-02-29|09:51
wavefilter.m4.77 kB2012-02-29|09:51
wavepaste.m1.04 kB2012-02-29|09:51
wavework.m3.45 kB2012-02-29|09:51
wavezero.m696.00 B2012-02-29|09:51
x2majoraxis.m3.59 kB2012-02-29|09:51
...
Sponsored links

diameter.m (160.12 kB)

Need 3 point
Your Point(s)

Your Point isn't enough.

Get point immediately by PayPal

More(Debit card / Credit card / PayPal Credit / Online Banking)

Submit your source codes. Get more point

LOGIN

Don't have an account? Register now
Need any help?
Mail to: support@codeforge.com

切换到中文版?

CodeForge Chinese Version
CodeForge English Version

Where are you going?

^_^"Oops ...

Sorry!This guy is mysterious, its blog hasn't been opened, try another, please!
OK

Warm tip!

CodeForge to FavoriteFavorite by Ctrl+D