Is there any way to check whether two pixels in a binary image are connected, if connected, it will return TRUE else FALSE.....???
6 ビュー (過去 30 日間)
古いコメントを表示
Based on connectivity or whether two pixels in another image ( Image 1 ) are connected, I have to draw line between those pixels in another image (Image 2).? Remember Image 2 carries interest points (branch,end,start, and another important points) of image 1.Any suggestion..?
0 件のコメント
採用された回答
Image Analyst
2018 年 7 月 19 日
If you simply want to see if they're connected, use bwlabel() to do connected component labelling on them, and then check for the same label value (meaning they're part of the same connected region):
[labeledImage, numberOfRegions] = bwlabel(binaryImage);
if labeledImage(row1, col1) == labeledImage(row2, col2)
% They're connected.
end
Calling bwdistgeodesic() or regionprops() will give you the pixels connecting them.
bwdistgeodesic() will give you the shortest path. See Steve's blog: http://blogs.mathworks.com/steve/2011/11/01/exploring-shortest-paths-part-1/.
Whereas regionprops() (or find() after using ismember() to extract the region you want) will give you ALL the pixels in the region.
2 件のコメント
その他の回答 (2 件)
Walter Roberson
2017 年 11 月 23 日
You can use the (BW, R, C) form, where R and C are row and column of one of the two endpoints to be queried. Index the result of the function at the other endpoint. If the result there is infinity then there is no connection.
5 件のコメント
Walter Roberson
2017 年 11 月 23 日
L = imclearborder(im2bw(imread('lllllll.jpg')));
H = imclearborder(im2bw(imread('hhhhh.jpg')));
Lpos = find(L);
HLab = bwlabel(H);
LLab = HLab(Lpos);
[LRow, LCol] = ind2sub(size(L), Lpos);
LLab is the same for all pixels that were originally part of the same component.
groups = accumarray(LLab, (1:length(LLab)).', [], @(x) {x});
now groups is a cell array of groupings. The values in any one groups{K} are indices into Lpos, the linear indices of the representative pixels in L. Perhaps you might prefer
groupsLidx = accumarray(LLab, Lpos, [], @(x) {x});
in which for any given groupsLidx{K} all of the members are linear indices of individual pixels.
Or perhaps,
LLimg = zeros(size(HLab));
LLimg(Lpos) = HLab(Lpos);
and now LLimg(R1, C1) and LLimg(R2, C2) are part of the same original component in H if they have the same value.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!