필터 지우기
필터 지우기

How to find the X axis length and Yaxis length of the object

조회 수: 6 (최근 30일)
saravanakumar D
saravanakumar D 2013년 12월 27일
댓글: Image Analyst 2013년 12월 30일
I have to find the shape of the object so i have to find the length of the x and y axis length of the shape. So please help me

채택된 답변

Sean de Wolski
Sean de Wolski 2013년 12월 27일
doc regionprops
  댓글 수: 4
saravanakumar D
saravanakumar D 2013년 12월 27일
But i think there is major difference between X&Y axis length and Major&Minor axis length
Sean de Wolski
Sean de Wolski 2013년 12월 27일
Then use 'Orientation' property to convert between the direction of the ellipse and x/y.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Image Analyst
Image Analyst 2013년 12월 27일
You could use bounding box, or MajorAxisLength and MinorAxisLength, which is the axes of an ellipse fitted to the blob. There is no farthest end-to-end measurement available. And there is no definitive crossways width. If you had an elongated, irregularly-shaped blob and the major axis was where you think it would be, then what is the minor axis? The narrowest one? The cross distance at the midpoint (which may be at the widest point, the narrowest point, or something else)?
  댓글 수: 11
Sean de Wolski
Sean de Wolski 2013년 12월 30일
Either way, you could just replace the nan's with zeros.
D(isnan(D)) = 0;
Image Analyst
Image Analyst 2013년 12월 30일
Sorry Sean, I found the problem. I had a file called rice.png that was a binary mask file in a folder (that I had created for a project I was working on) and that was earlier on the path. It used that instead. That's the danger of not specifying the full path. It's not your fault - how could you know that I'd just happen to have a different image called that? - but I'm showing the more robust code below:
% Define folder where rice.png lives.
folder = fullfile(matlabroot, '\toolbox\images\imdemos');
baseFileName = 'rice.png';
% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);
I = imread(fullFileName);
imshow(I);
rice = imclearborder(stdfilt(I)<15);
skel = bwmorph(rice,'skel',inf);
endpoints = bwmorph(skel,'endpoints');
L = bwlabel(rice);
L(~endpoints) = 0;
for ii = 2:max(L(:))
idx = find(L == ii);
endpoints(idx(2:end)) = 0; %keep only one end point per object
end
D = bwdistgeodesic(rice,endpoints,'quasi-euclidean');
imshow(D,[]);
colormap(jet);

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by