最近发现网上关于 estimateRigidTransform 的详细说明很少,因此这里做一个详细的解释。希望对大家有用。
一、函数定义如下:
Mat estimateRigidTransform(InputArraysrc,InputArraydst,boolfullAffine)前两个参数,可以是 :src=srcImage (变换之前的图片Mat) dst=transImage(变换之后的图片Mat)
也可以: src=array(变换之前的关键点Array) dst=array(变换之后的关键点Array)
第三个参数: 1(全仿射变换,包括:rotation, translation, scaling,shearing,reflection)
0(带有约束的仿射变换)
默认参数1:全仿射变换。
fullAffine 与 partialAaffine 主要区别是:变换矩阵中后者可以是刚体变换。(不是必须,体会可以的含义)
也就可以后者没有尺度缩放。
二、直观感受:
paritcalAffine 的变换矩阵必须是如下类型:
旋转矩阵对角线元素的 绝对值 肯定相等。
假设我们的矩阵|a11|=|a22| 同时|a21|=|a22|.真是基本条件。
fullAffine 的rotate矩阵可以是:
旋转矩阵可以没有任何数值上的约束。aii之间无数值上的约束。
三、fullAffine原理及变换公式
如果我们有一个点变换之前是[x,y,1],变换后是[x',y',1] 则fullAffine表示如下: