如何构建Halcon中的仿射变换矩阵?

摘要:构建仿射变换矩阵 vector_angle_to_rigid 作用:获取刚性变换的变换矩阵 算子签名:vector_angle_to_rigid( Row1, Column1, Angle1, Row2, Column2, Angle2 :
构建仿射变换矩阵 vector_angle_to_rigid 作用:获取刚性变换的变换矩阵 算子签名:vector_angle_to_rigid( Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D) 输入参数: Row1, Column1(输入控制):旋转中心坐标(图像坐标系) Angle1 (输入控制) : 初始角度(弧度制) Row2, Column2(输入控制):目标位置 的参考点(通常与旋转中心相同) Angle2 (输入控制) : 目标旋转角度(弧度制) 输出参数: HomMat2D(输出对象):生成的刚性变换矩阵(3×3) // 将图像绕中心(256,256)旋转30度(无平移) HTuple centerRow = 256, centerCol = 256; HTuple angle1 = 0, angle2 = rad(30); // rad()将角度转弧度 HhomMat2D homMat; vector_angle_to_rigid(centerRow, centerCol, angle1, centerRow, centerCol, angle2, &homMat); 刚性变换矩阵由旋转和平移构成,矩阵形式为: \[HomMat2D = \begin{bmatrix} \cos(\theta) & -\sin(\theta) & T_x \\ \sin(\theta) & \cos(\theta) & T_y \\ 0 & 0 & 1 \end{bmatrix} \] vector_to_similarity 作用:获取包含旋转、平移和各向同性缩放的相似变换矩阵 算子签名:vector_to_similarity(Px, Py, Qx, Qy, HomMat2D) 输入参数: Px, Py(输入参数):源点坐标(元组) Qx, Qy (输入参数) : 目标点坐标(元组) 输出参数: HomMat2D(输出对象):生成的相似变换矩阵(3×3) 最少点对: 相似变换:2对点(4自由度) // 将图像绕中心(256,256)旋转30度,再缩放2倍 HTuple centerRow = 256, centerCol = 256; HTuple angle1 = 0, angle2 = rad(30); // rad()将角度转弧度 HTuple scale = 2; // 缩放因子 HTuple Px = centerRow, Py = centerCol; // 原点坐标 HTuple Qx = centerRow + 256*scale, Qy = centerCol + 256*scale; // 目标点坐标 HhomMat2D homMat; vector_to_similarity(Px, Py, Qx, Qy, &homMat); 相似变换矩阵形式: \[HomMat2D = \begin{bmatrix} s & 0 & 1 \\ 0 & s & 1 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & T_x \\ 0 & 1 & T_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \cos(\theta) & -\sin(\theta) & 0 \\ \sin(\theta) & \cos(\theta) & 0 \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} s\cos(\theta) & -s\sin(\theta) & T_x \\ s\sin(\theta) & s\cos(\theta) & T_y \\ 0 & 0 & 1 \end{bmatrix} \] // 源点:P1(100,100), P2(200,100) HTuple Px, Py, Qx, Qy; Px.Append(100); Px.Append(200); // Px = [100, 200] Py.Append(100); Py.Append(100); // Py = [100, 100]
阅读全文