了解OpenCV中的距离变换

Ste*_*eph 2 opencv computer-vision

什么是距离变换?背后的理论是什么?如果我有2张相似的图像但是在不同的位置,距离变换如何帮助它们重叠?距离变换函数产生的结果就像在中间分开一样-是要查找我已经看过opencv的文档了,但是还不清楚。

Vla*_*lad 5

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

另一个应用是文本识别-文本的强大提示之一是笔划的宽度稳定。在分段文本上运行的距离转换可以确认这一点。相应的方法称为笔划宽度变换(SWT)

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

也许如果您上传图像,将会更加清楚该怎么做。通常,您可以将它们作为一个整体进行匹配,也可以按特征(对于各种变形或透视变形更稳定)进行匹配,如果它们只有少数几个特征,则甚至可以使用轮廓/轮廓进行匹配。最终,您可以通过运行PCA或拟合椭圆(如旋转的矩形)来确定对象的方向(如果对象具有主导方向)。

cv::RotatedRect rect = cv::fitEllipse(points2D);
float angle_to_rotate = rect.angle;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明