hom_mat2d_to_affine_par算子全网只有下面这个解释:
hom_mat2d_to_affine_par( : : HomMat2D : Sx, Sy, Phi, Theta, Tx, Ty) 功能:根据仿射变换矩阵(齐次二维变换矩阵)计算仿射变换参数 HomMat2D (输入参数):仿射变换矩阵 Sx (输出参数):x方向的缩放因子(如果从图像空间变换到物理空间,就是x方向的像素单量) Sy (输出参数):y方向的缩放因子(如果从图像空间变换到物理空间,就是y方向的像素单量) Phi (输出参数):旋转角度 Theta (输出参数):斜切角度 Tx (输出参数):沿x方向平移的距离 Ty (输出参数):沿y方向平移的距
看完上面的指令说明是不是一脸懵逼,之前勇哥还以为它是同时进行移位、旋转、斜切运算的算子,后来看了下传入的参数,是一个矩阵,就知道理解不对了。
一般产生旋转、余切或者位移结果的算子,都应该有输入矩阵,还有输入参数,最后是结果矩阵。
如下面的产生旋转矩阵的算子hom_mat2d_rotate,就有输入矩阵,输入参为旋转的中心和旋转的角度,最后的生成的旋转矩阵。
hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate) //功能:把旋转角度添加到仿射变换矩阵 HomMat2D :(输入参数)仿射变换矩阵 Phi :旋转角度(单位弧度) Px :变换的固定点行坐标。固定点是指以该点为支撑进行仿射变换 (这里是指围绕这点进行旋转) Py : 变换的固定点列坐标 HomMat2DRotate:输出的旋转变换的二维矩阵
但hom_mat2d_to_affine_par算子只有一个传入矩阵,其它的都是输出参数。
hom_mat2d_to_affine_par算子其实是用来检查输入矩阵的仿射变换参数的。
说得更狭隘一点,可以用它来检查标定完的矩阵是否精度足够好。
空洞的描述总让人不明白,结合具体的应用是不是就能很好的了解了?
例如下面的代码进行九点标定
*标定数据 vector_to_hom_mat2d ([1863.074,1853.723,1858.503,1060.254,2654.917,2659.306,2650.395,1055.019,1064.807] , [1934.265,3530.841,2732.168,2724.893,2736.01,1938.346,3534.78,3523.122,1926.546], [76398,66398,71398,71398,71398,76398,66398,66398,76398] ,[-40614,-40614,-40614,-35614,-45614,-45614,-45614,-35614,-35614], HomMat2D) *查看qx,qy的值 是否和标定的数据差异太大 affine_trans_point_2d (HomMat2D, 1863, 1934, Qx, Qy) hom_mat2d_to_affine_par (HomMat2D, Sx, Sy, Phi, Theta, Tx, Ty)
hom_mat2d_to_affine_par算子的结果见下图所示:
在康耐视软件中九宫格标定后的结果如下图,可以看到是一样的。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

