Matlab与OpenCV之间的距离变换行为不同

时间:2017-08-21 21:12:27

标签: matlab opencv image-processing

我目前正在将代码从Matlab转换为OpenCV,但发现Matlab和OpenCV之间的距离转换函数行为有所不同。 以简单矩阵为例 bw =

 0     0     0     0     0
 0     1     0     0     0
 0     0     0     0     0
 0     0     0     1     0
 0     0     0     0     0

Matlab version distance transform指定一个数字,即该像素与BW最近的非零像素之间的距离,这是有意义的,我得到了

1.4142    1.0000    1.4142    2.2361    3.1623
1.0000         0    1.0000    2.0000    2.2361
1.4142    1.0000    1.4142    1.0000    1.4142
2.2361    2.0000    1.0000         0    1.0000
3.1623    2.2361    1.4142    1.0000    1.4142

在OpenCV中,我选择DIST_L2(简单的欧氏距离)。它给了我

1.3692    0.9550    1.3692    2.3242    3.2792
0.9550         0    0.9550    1.9100    2.3242
1.3692    0.9550    1.3692    2.3242    1.3692
2.3242    1.9100    0.9550         0    0.9550
3.2792    2.3242    1.3692    0.9550    1.3692

我不明白为什么,这对我没有意义。我意识到OpenCV用最接近的零像素计算像素,所以我已经反转了输入矩阵。

1 个答案:

答案 0 :(得分:4)

maskSize - 距离变换蒙版的大小。它可以是3,5或CV_DIST_MASK_PRECISE(后一个选项仅由第一个函数支持)。

看起来OpenCV版本的距离变换正在使用maskSize进行一些规范化。将其设置为0(即使文档没有提到它)它也解决了这个问题。

相关问题