使用estimateGeometricTransform需要注意的是,这个算出的矩阵形式有些奇怪,t31和t32两个元素大小诡异,因此该矩阵不能直接乘以点做变换,否则是错误的。具体原因正在查找。下面这样才是正确的:
pt1和pt2 都是2*N的矩阵,分别是两幅图中匹配好的对应点。
estimateGeometricTransform(pt1',pt2','affine');
pt1_AfterTrans = transformPointsForward(tform,pt1');
算出的tform中的变换矩阵T很奇怪:
1.08797334270869 -0.0105242965330334 0
-0.00455772769610861 1.00005745487803 0
39.8113001970219 -55.3040383048848 1
下面这样就是错误的:
pt1_homo = [pt1;ones([1,length(pt1)])];
pt1_AfterTrans = [tform.T] * pt1_homo;
pt1p = [pt1_AfterTrans(1,:)./pt1_AfterTrans(3,:);pt1_AfterTrans(2,:)./pt1_AfterTrans(3,:)];
猜测:应该将tform中的T矩阵归一化后使用就是正确的