我目前正在将代码从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用最接近的零像素计算像素,所以我已经反转了输入矩阵。
答案 0 :(得分:4)
maskSize - 距离变换蒙版的大小。它可以是3,5或CV_DIST_MASK_PRECISE(后一个选项仅由第一个函数支持)。
看起来OpenCV版本的距离变换正在使用maskSize进行一些规范化。将其设置为0(即使文档没有提到它)它也解决了这个问题。