本人最近做视觉定位项目,使用的halcon四点标定,这里分享一下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748*初始化矩阵
pxX := gen_tuple_const(4, 0)
pxY := gen_tuple_const(4, 0)
mmX := gen_tuple_const(4, 0)
mmY := gen_tuple_const(4, 0)
*像素坐标
pxX:=[2609, 2529, 677, 568]
pxY:=[368, 2262, 2102, 385]
*机械坐标
mmX:=[74.53, 76.53, 131.07, 134.556]
mmY:=[68.498, 124.3, 119.69, 69.116]
*[不推荐]根据两个以上点对计算相似仿射变换矩阵,支持旋转、平移和缩放
vector_to_similarity (pxX, pxY, mmX, mmY, HomMat2D_Not)
*[推荐]根据三个以上点对计算仿射变换矩阵,支持旋转、平移、缩放、斜切
*Approximate an affine transformation from point correspondences.
vector_to_hom_mat2d (pxX, pxY, mmX, mmY, HomMat2D)
*已知仿射变换矩阵,倒推计算仿射变换参数
*根据仿射变换矩阵(齐次二维变换矩阵)计算仿射变换参数
*Compute the affine transformation parameters from a homogeneous 2D transformation matrix.
*HomMat2D (输入参数):仿射变换矩阵
*Sx (输出参数):x方向的缩放因子(如果从图像空间变换到物理空间,就是x方向的像素单量)
*Sy (输出参数):y方向的缩放因子(如果从图像空间变换到物理空间,就是y方向的像素单量)
*Phi (输出参数):旋转角度
*Theta (输出参数):斜切角度
*Tx (输出参数):沿x方向平移的距离
*Ty (输出参数):沿y方向平移的距离
hom_mat2d_to_affine_par (HomMat2D, Sx, Sy, Phi, Theta, Tx, Ty)
*弧度转换角度
tuple_deg (Phi, DegPhi)
tuple_deg (Theta, DegTheta)
*保存矩阵
write_tuple (HomMat2D, 'd:\\1.tup')
*读取矩阵
read_tuple ('d:\\1.tup', HomMat2D)
*利用像素坐标计算出机械坐标
Row := [0, 3664, 3664, 0, 3664/2]
Column := [0, 2748, 0, 2748, 2748/2]
affine_trans_point_2d (HomMat2D, Row, Column, Qx, Qy)
stop()
其中的算子hom_mat2d_to_affine_par就是通过仿射变换矩阵,倒推计算得出若干参数。
|