我有一个二进制图像,其中包含我通过bwconncomp识别的几个感兴趣的区域。我试图找到连接这些区域的最短时间。我正在考虑在循环中使用与以下类似的代码对越来越大的内核进行膨胀,当连接的组件数量下降时暂停循环,然后也许通过质心的较大变化来确定那些已连接的组件,并使用迭代次数二来给出大概的距离?我觉得应该有更好的方法吗?

distancebetweenROIS=[];
M11=tempBimage;

for c=1:50
    TT=bwconncomp(M11);
    seDil=strel('disk',c);
    M11=imdilate(tempBimage,seDil);
    YY=bwconncomp(M11);
    if length(TT.PixelIdxList)>length(YY.PixelIdxList)
        distancebetweenROIS(end+1)=c*2;
    end

end

matlab - 查找到感兴趣区域之间的最短长度-LMLPHP

matlab - 查找到感兴趣区域之间的最短长度-LMLPHP

matlab - 查找到感兴趣区域之间的最短长度-LMLPHP

最佳答案

使用bwdistbwlabel,您可以找到任何要素到所有其他要素的最短距离。然后,您要做的就是循环浏览这些功能。

%// labeledImage is 1 on feature #1, 2 on feature #2, etc

labeledImage = bwlabel(yourBinaryImage);

nLabels = max(labeledImage(:));

%// find the distance between each label and all other labels

distMat = zeros(nLabels, nLabels);

for iLabel = 1:nLabels

%// distance transform - every pixel is the distance to the nearest
%//   non-zero pixel, i.e. the location of label iLabel

dist = bwdist(labeledImage==iLabel);

%// use accumarray b/c we can
%// get rid of the zeros in labeledImage, though, as there is no index 0

distMat(:,iLabel) = accumarray(dist(labeledImage>0),labeledImage(labeledImage>0),[],@min);

end

请注意,该距离等于“如果我从特征X开始并从一个像素到另一个像素到特征Y,则至少需要多少跳”。如果您需要质心之间的距离,则regionprops(yourBinaryImage,'Centroids')后跟pdist2是更好的方法。

07-24 09:47