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)))
我用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)))