【问题标题】:Distance Transform Behaviors Differently Between Matlab and OpenCVMatlab 和 OpenCV 之间的距离变换行为不同
【发布时间】: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


【解决方案1】:

maskSize – 距离变换掩码的大小。它可以是 3、5 或 CV_DIST_MASK_PRECISE(后一个选项仅由第一个函数支持)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多