how can i extract radius signature of a binary image?

i have a binary image and radius signature is distance between pixels on contour of object and its centroid. i use bwboundaries() but result is not good
i saw a example in matlab code of bwboundaries(),it used plot to show contour plot has best result but i dont need plot i need a matrix. i use blow code but my result is not same with matlab's example.
img4=zeros(size(img3));
[B,L] = bwboundaries(img3,'noholes');
for k = 1:length(B)
boundary = B{k};
for i=1:size(boundary,1)
img4(boundary(i,1), boundary(i,2))=1;
end
end

Answers (3)

Image Analyst
Image Analyst on 26 Aug 2013
Edited: Image Analyst on 26 Aug 2013
Use regionprops to find the centroid, then use the Pythagorean theorem to get the distances between the boundary x,y coordinates and the centroid.

9 Comments

I also need to do the same i.e. find the signature of binary image.
________________________________________________________________________
image = imread('C:\Users\Saeed Rattar\Desktop\aa_contour.jpg');
GRAY1 = rgb2gray(image);
threshold1 = graythresh(GRAY1);
BW1 = im2bw(GRAY1, threshold1);
stats = regionprops(BW1, 'Centroid')
c = stats.Centroid
--------------------------------------------------------------------------
I am getting this " 173.5000 1.0000 " as centroid. I think centroid should be single numerical value but why I am getting answer of 2 x 1 size.
How to use Pythagorean theorem to get the distances between the boundaries?
My binary image is like
Use bwboundaries on the binary image
boundary = bwboundaries(binaryImage);
x = boundary(:,1);
y = boundary(:,2);
distances = sqrt((x - c(1)).^2 + (y - c(2)).^2);
mage = imread('C:\Users\Explorer\Desktop\aa_contour.jpg');
GRAY1 = rgb2gray(image);
threshold1 = graythresh(GRAY1);
BW1 = im2bw(GRAY1, threshold1);
stats = regionprops(BW1, 'Centroid')
c = stats.Centroid
boundary = bwboundaries(BW1);
x = boundary(:,1);
y = boundary(:,2);
distances = sqrt((x - c(1)).^2 + (y - c(2)).^2)
____________________________________________________________________________
Error
-------------------------------------------------------------------------------
stats = 2x1 struct array with fields:
Centroid
c = 173.5 1
Index exceeds matrix dimensions. Error in signature (line 17) y = boundary(:,2);
___________________________________________________________________________
What should I do to correct this error?
Use the debugger? What does "whos boundary" say? Is it an N rows by 2 columns array?
>> whos
Name Size Bytes Class Attributes
BW 519x346 179574 logical
boundary 3x1 39824 cell
c 1x2 16 double
image 519x346x3 538722 uint8
stats 2x1 320 struct
x 3x1 39824 cell
>> whos boundary
Name Size Bytes Class Attributes
boundary 3x1 39824 cell
You have 3 blobs in your binary image, not just one. I don't know why. What are the other 2 blobs? You can get one by doing
thisBoundary = boundary{1}; % Or whatever blob you want.
x = thisBoundary(:,1);
y = thisBoundary(:,2);
distances = sqrt((x - c(1)).^2 + (y - c(2)).^2);
Can you go ahead and accept it to close this out?

Sign in to comment.

Thanks sir...its really helpful and the best answer to find radius signature...
Sabanam
Sabanam on 25 Feb 2014
Edited: Sabanam on 25 Feb 2014
Which formula used to find centroid in matlab?..Whenever i have read they are using mean of the point but is it right?

Asked:

on 26 Aug 2013

Edited:

on 25 Feb 2014

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!