【问题标题】:Understanding Distance Transform in OpenCV了解 OpenCV 中的距离变换
【发布时间】:2014-04-29 02:53:02
【问题描述】:

什么是距离变换?它背后的理论是什么?如果我有两个相似的图像但在不同的位置,距离变换如何帮助它们重叠?距离变换函数产生的结果就像在中间分开 - 是它是为了找到一个图像的中心,使另一个图像重叠一半?我已经查看了 opencv 的文档,但仍然不清楚。

【问题讨论】:

    标签: opencv computer-vision


    【解决方案1】:

    距离变换是一种适用于单个二值图像的操作,它从根本上寻求测量从每个空点(零像素)到最近边界点(非零像素)的值。

    提供了一个示例here 和here。

    测量可以基于各种定义,离散或精确计算:例如欧几里得、曼哈顿或棋盘。实际上,OpenCV 实现中的参数允许其中一些参数,并通过掩码大小控制它们的准确性。

    该函数可以返回输出测量图像(浮点)以及标记的连接组件图像(Voronoi 图)。在操作here 中有一个例子。

    我看到from another question 你最近问过你希望注册 两个 图像一起。我不认为距离变换真的是你在这里寻找的东西。如果您希望对齐一组点,我建议您查看 Procrustes、Iterative Closest Point 或 Ransac 等技术。

    【讨论】:

    • 我查看了 timlukins 提供的另一个问题链接,并回忆了 Steph 发布的问题。如果您的对象是 3D 或旋转出平面,您最好提及这一点。 ICP 和 Procrustes 将在您没有的 3D 点云上运行。 Ransac 是一种通用方法,可以使用任何拟合运行并选择最佳内点集。
    • ICP 和 Procrustes 与任何维度都相关。以下是一些不错的 2D 示例:en.wikipedia.org/wiki/Point_set_registrationwww2.maths.ox.ac.uk/chebfun/examples/geom/html/Procrustes.shtml
    • 没错。但他或她的点在 3d 中旋转,因为她在您链接的问题中有正面和侧面。
    • remark @timlukins:在 opencv 中,对于二进制图像中的每个非零值像素,计算/近似到下一个零值像素的距离。所以零值表示cv::distanceTransform 中的非空像素,这可能有点令人困惑
    【解决方案2】:

    请看下图(您可能需要提高显示器亮度以更好地查看)。图片显示了与用像素强度描绘的红色轮廓的距离,因此在距离最大的图像中间,强度最高。这是距离变换的体现。这是一个直接的应用程序 - 绿色形状是所谓的活动轮廓或蛇,它根据与轮廓的距离梯度(并且还遵循一些其他约束)围绕红色轮廓卷曲。因此,距离变换的一种应用是形状处理。

    另一个应用是文本识别——文本的强大提示之一是稳定的笔画宽度。在分段文本上运行的距离变换可以证实这一点。对应的方法称为stroke width transform (SWT)

    至于对齐两个旋转的形状,我不确定如何使用 DT。您可以找到形状的中心来旋转形状,但您也可以围绕任何点旋转它。区别仅在于翻译,如果您运行matchTemplate 以将它们匹配到正确的方向,则无关紧要。

    如果您上传图片,可能会更清楚该怎么做。一般来说,您可以将它们作为一个整体进行匹配,也可以通过特征(对各种变形或透视变形更健壮)进行匹配,如果它们只有几个特征,甚至可以使用轮廓/剪影。最后,您可以通过运行 PCA 或fitting an ellipse(作为旋转矩形)来确定对象的方向(如果它具有主导方向)。

    cv::RotatedRect rect = cv::fitEllipse(points2D);
    float angle_to_rotate = rect.angle;
    

    【讨论】:

    • 感谢@Vlad。不,我不需要对齐它们。它们已经对齐了。距离变换用于 2 个图像的叠加。所以,如果我理解正确的话,脸的中间部分更亮是因为它离边界的距离最大?
    • 是的,这可用于对齐轮廓。您只需要使用 matchTemplate 对齐轮廓的 DT。但我确信还有其他方法可以进行对齐。展示你的图片是理解你的任务的关键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2013-12-23
    • 1970-01-01
    相关资源
    最近更新 更多