什么是距离变换?它背后的理论是什么?如果我有 2 个相似的图像但在不同的位置,距离变换如何帮助重叠它们?距离变换函数产生的结果就像在中间分开一样 - 是找到一个图像的中心,以便另一个图像只重叠一半?我已经查看了 opencv 的文档,但仍然不清楚。
最佳答案
请看下面的图片(您可能需要增加显示器亮度才能看得更清楚)。图片显示了与用像素强度描绘的红色轮廓的距离,因此在距离最大的图像中间,强度最高。这是距离变换的一种表现。这是一个直接的应用程序 - 绿色形状是所谓的事件轮廓或蛇,它根据与轮廓的距离梯度移动(并且还遵循一些其他约束)围绕红色轮廓 curl 。因此,距离变换的一种应用是形状处理。
另一个应用是文本识别 - 文本的强大提示之一是笔画的稳定宽度。对分段文本运行的距离变换可以证实这一点。相应的方法称为 stroke width transform (SWT)
至于对齐两个旋转的形状,我不确定如何使用 DT。您可以找到一个形状的中心来旋转该形状,但您也可以围绕任意点旋转它。区别仅在于翻译,如果您运行 matchTemplate 则无关紧要。以正确的方向匹配它们。
也许如果你上传你的图片,它会更清楚该怎么做。通常,您可以将它们作为一个整体或按特征(对各种变形或透视变形更稳健)进行匹配,或者如果它们只有几个特征,甚至可以使用轮廓/轮廓。最后,您可以通过运行 PCA 或 fitting an ellipse 找出对象的方向(如果它具有主导方向) (作为旋转的矩形)。
cv::RotatedRect rect = cv::fitEllipse(points2D);
float angle_to_rotate = rect.angle;
关于opencv - 了解 OpenCV 中的距离变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22563838/