【发布时间】:2017-08-21 21:12:27
【问题描述】:
我目前正在将代码从 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 计算最接近零像素的像素,所以我已经反转了输入矩阵。
【问题讨论】:
-
我会说 MATLAB 是正确的....我看不出 L2 距离对于对角像素如何不是 sqrt(2)。也许它不将像素作为离散点并假设它们的大小更大?
-
如果有帮助,请考虑接受您的问题的答案
标签: matlab opencv image-processing