2025/6/4知识点总结—HALCON像素坐标转物理坐标
根据三个或者三个以上的点生成仿射矩形
根据多个点生成仿射矩形有点类似于VisionPro里面的九点标定。先说算子:
*最少是三个特征点,把(Row,Col)->(R1,C1)计算一个仿射矩阵的作用
vector_to_hom_mat2d (Row,Col ,R1, C1, HomMat2D)*假设再有图像坐标 (500,200), 转成物理坐标,
affine_trans_point_2d (HomMat2D, 500, 200, Qx, Qy)
通过输入的点对应关系,计算 2D仿射变换矩阵(3×3齐次矩阵),默认使用最小二乘法拟合最优变换。
vector_to_hom_mat2d(
Px, // 原始点x坐标数组
Py, // 原始点y坐标数组
Qx, // 目标点x坐标数组
Qy, // 目标点y坐标数组
HomMat2D // 输出的变换矩阵
)
用于将一个或多个2D点通过给定的3×3齐次变换矩阵进行仿射变换。
affine_trans_point_2d(
HomMat2D, // 输入的变换矩阵
Px, // 原始点x坐标数组
Py, // 原始点y坐标数组
Qx, // 目标点x坐标数组
Qy, // 目标点y坐标数组
)
通俗来讲可以理解为:第一个算子是用来生成图像坐标转物理坐标的公式。第二个算子是用来使用公式的(传入图像坐标,转成物理坐标)
物理坐标转为图像坐标
反过来,想要将物理坐标转为图像坐标就需要一个逆矩阵
*物理坐标 Qx, Qy, 转成图像坐标
*先对HomMat2D 生成一个逆矩阵
hom_mat2d_invert (HomMat2D, HomMat2DInvert)affine_trans_point_2d (HomMat2DInvert, Qx, Qy, Qx1, Qy1)
如果原矩阵能把A坐标系的点转到B坐标系,逆矩阵就能把B坐标系的点转回A坐标系
hom_mat2d_invert(
HomMat2D, // 原始3×3仿射变换矩阵
HomMat2DInvert // 计算得到的逆矩阵
)
需要注意的是,数学上计算矩阵的逆,要求原矩阵必须是可逆的,即行列式不为零