opencv - 了解 OpenCV 中的距离变换

标签 opencv computer-vision

什么是距离变换?它背后的理论是什么?如果我有 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;

enter image description here

关于opencv - 了解 OpenCV 中的距离变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22563838/

相关文章:

python - 从筛选检测器中提取关键点

matlab - 如何消除视频中剧烈的亮度变化?

OpenCV:为整个图像计算单个 HOG 向量并获取 block 位置

opencv - 什么网络摄像头可用于OpenCV/EmguCV

opencv - 使用单应性估计相机角度

iPhone 相机和 OpenCV

image - SIFT 是做什么的?

image-processing - OPenCV 提升差异

opencv - cv2.filter2d() opencv 中 ddepth 参数的解释?

computer-vision - AlexNet 中的神经元数量