matlab中的特殊点距离变换

special point distance transform in matlab

我用matlab计算二值图像的距离变换,发现bwdist()可以计算图像所有点的距离,但我只想知道一个特殊点的距离。 例如,我有一个像这样的二进制图像

image =

     1     0     0
     0     0     1
     0     0     0

bwdist() 计算所有点的距离变换

>> bwdist(a)

ans =

         0    1.0000    1.0000
    1.0000    1.0000         0
    2.0000    1.4142    1.0000

但我只想计算点图像的距离(3,2),所以函数给了我1.4142

什么函数都可以做?

您可以使用 Statistics and Machine Learning Toolbox 中的 find to find row and column indices for all 1's, then use pdist2 来计算所有 1's 与搜索点 (3,2) 的距离,最后选择这些距离中的最小值以获得最终结果输出。这是作为示例显示的实现 运行 -

>> image
image =
     1     0     0
     0     0     1
     0     0     0
>> point
point =
     3     2
>> [R,C] = find(image);
>> min(pdist2([R C],point))
ans =
       1.4142

如果你没有权限访问pdist2,你可以使用bsxfun来替换它 -

min(sqrt(sum(bsxfun(@minus,[R C],point).^2,2)))