OpenCV视觉分析之目标跟踪(11)计算两个图像之间的最佳变换矩阵函数findTransformECC的使用-算法描述

时间:2024-11-07 07:18:01

根据 ECC 标准 78找到两幅图像之间的几何变换(warp)。

该函数根据 ECC 标准 ([78]) 估计最优变换(warpMatrix),也就是说
warpMatrix = arg ⁡ max ⁡ W ECC ( templateImage ( x , y ) , inputImage ( x ′ , y ′ ) ) \texttt{warpMatrix} = \arg\max_{W} \texttt{ECC}(\texttt{templateImage}(x,y),\texttt{inputImage}(x',y')) warpMatrix=argWmaxECC(templateImage(x,y),inputImage(x,y))
此处
[ x ′ y ′ ] = W ⋅ [ x y 1 ] \begin{bmatrix} x' \\ y' \end{bmatrix} = W \cdot \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} [xy]=W xy1

(方程在单应性变换中使用齐次坐标时成立)。它返回最终的增强相关系数,即模板图像和最终变形的输入图像之间的相关系数。当给定一个 3×3 矩阵且 motionType 为 0、1 或 2 时,第三行被忽略。

与 findHomography 和 estimateRigidTransform 不同,findTransformECC 函数实现了一种基于区域的对齐方法,该方法基于强度相似性。本质上,该函数更新初始变换,该变换大致对齐图像。如果缺少这些信息,则使用单位变换(单位矩阵)作为初始化。注意,如果图像经历了强烈的位移/旋转,需要一个初始变换来大致对齐图像(例如,一个简单的欧氏变换/相似变换,允许图像显示大致相同的内容)。在第二幅图像中使用逆向变形,以使图像接近第一幅图像,即在使用 warpAffine 或 warpPerspective 时使用 WARP_INVERSE_MAP 标志。还可以参见 OpenCV 示例 image_alignment.cpp,该示例演示了该函数的使用。注意,如果算法不收敛,该函数会抛出异常。