Binary Image Edge Linking

조회 수: 5 (최근 30일)
Jes
Jes 2015년 5월 28일
댓글: Image Analyst 2015년 6월 3일
I have a binary image of 200 rows and 200 columns. I need to find the distance between two white (255) pixel along the row and column. If the distance is 3 , i need to fill the gap along row and column with ones. I tried something but it doesnt work well. Can anyone please help me ?
vess is the binary output.
[M N]=size(vess);
[x y]=find(vess);
points = [ x y];
[~,ii] = sort(points(:,1));
out = points(ii,:);
% for i=1:M
[M1 N1]=size(points);
% u=2;
for i=1:M1-1
C=[out(i,1),out(i,2);out(i+1,1),out(i+1,2)];
d = round(pdist(C,'euclidean'))
if d==3
p1=[out(i,1),out(i,2)];
p2=[out(i+1,1),out(i+1,2)];
if p1(1)==p2(1)
vess(p1(1),p1(2)+1:p2(2)+1)=1;
end
if p2(2)==p1(2)
vess(p1(1)+1,p1(1):p2(1)+1)=1;
end
end
end

채택된 답변

Image Analyst
Image Analyst 2015년 5월 28일
Yes, I can tell it wouldn't.
  1. First of all you need to find the endpoints of your lines/curves segments with bwmorph.
  2. Then you need to label the segments and get a list of all the points in the segment.
  3. Then you need to get a list of the distances from each endpoint to all other endpoints that are not in the same segment, and pick the endpoint with the smallest distance.
  4. If the distance is less than some specified allowable distance, you need to use imline() to burn a line into the binary image connecting those two endpoints.
  5. Repeat for every endpoint.
So that's the algorithm, though it could be made more sophisticated if you were to add criteria like saying the angle of the ends needs to be about the same angle, etc.. So, try to code it up and if you run into trouble, be SURE to attach your binary image of your skeletonized line/curve segments.
  댓글 수: 13
Jes
Jes 2015년 6월 2일
편집: Jes 2015년 6월 3일
Could you please help me how to obtain the binary edge linked image (variable) in the above code? Thanks in Advance.
Image Analyst
Image Analyst 2015년 6월 3일
That's the part I have not finished yet. But I'll tell you how to do it. You need to use imline() to burn a line into an image and then "OR" that into the main binary image. I'm attaching a demo for doing that, which you can incorporate into the demo I already gave you.

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by