本帖最后由 Princess 于 2023-7-16 11:52 编辑
例程相对路径(自行替换):
examples\hdevelop\Identification\Data-Code\2d_data_codes_rectify_symbol.hdev
识别效果:
核心代码:
- XCoordCorners := [130, 225, 290, 63]
- YCoordCorners := [101, 96, 289, 269]
- gen_cross_contour_xld (Crosses, XCoordCorners, YCoordCorners, 6, 0.785398)
- hom_vector_to_proj_hom_mat2d (XCoordCorners, YCoordCorners, [1, 1, 1, 1], [70, 270, 270, 70], [100, 100, 300, 300], [1, 1, 1, 1], 'normalized_dlt', HomMat2D)
- projective_trans_image (Image_slanted, Image_rectified, HomMat2D, 'bilinear', 'false', 'false')
复制代码
代码解释:
hom_vector_to_proj_hom_mat2d
使用上面给定的点组计算齐次变换矩阵,至少四组点(最佳)满足的关系方程,如果给的点组不满足四组,则不存在唯一解。
如果正好提供了四对,则矩阵HomMat2D以完全期望的方式对它们进行变换,如果给定的点对多于四对,则hom_vector_to_proj_hom_mat2d寻求最小化变换误差。
为了实现这种最小化,有两种不同的算法可用,可以使用参数方法选择要使用的算法。
Method='normalized_dlt ':对于传统的几何问题,通常会产生更好的结果。
Method='dlt ':如果坐标Qw或Pw之一等于0,则必须选择该方法。
与vector_to_proj_hom_mat2d相反,hom_vector_to_proj_hom_mat2d对点使用齐次坐标,因此无穷远处的点(Pw = 0或Qw = 0)可用于确定变换。如果使用有限点,通常Pw和Qw设置为1,在这种情况下,也可以使用vector_to_proj_hom_mat2d,见下图:
vector_to_proj_hom_mat2d的优点在于,可以使用一种额外的优化方法,并且可以考虑点的协方差。
如果点之间的对应关系尚未确定,则应使用proj_match_points_ransac来确定对应关系以及变换。
如果要转换的点是在标准图像坐标中指定的,则必须在Px中传递它们的行坐标,在Py中传递它们的列坐标。
这对于获得图像的右手坐标系是必要的。
特别是,这确保了旋转在正确的方向上进行。注意,矩阵的(x,y)顺序很自然地对应于图像中坐标的通常(row,column)顺序。
参数表:
- Px (输入控制类型,实数、整数及数组) :输入X坐标值
- Py (输入控制类型,实数、整数及数组) :输入Y坐标值
- Pw (输入控制类型,实数、整数及数组) :输入W坐标值
- Qx (输入控制类型,实数、整数及数组) :输入Qx坐标值
- Qy (输入控制类型,实数、整数及数组) :输入Qy坐标值
- Qw (输入控制类型,实数、整数及数组) :输入Qw坐标值
- Method (输入控制类型,字符串) :估计算法, 'dlt'、 'normalized_dlt'(默认)
- HomMat2D (输出控制类型,hom_mat2d实数) :齐次射影变换矩阵
复制代码
|