项目要求:
图为HALCON附图“25interleaved_exposure_04”,里面为旋转的二维码标签,请将其旋转到水平位置。
项目知识:
在HALCON中进行图像平移和旋转通常有以下步骤:
(1)通过hom_mat2d_identity算子创建一个初始化矩阵(即[1.0, 0.0, 0.0, 0.0, 1.0, 0.0]);
(2)在初始化矩阵的基础上,使用hom_mat2d_translate(平移)、hom_mat2d_rotate(旋转)等生成仿射变换矩阵,这几个算子可以叠加或者重复使用。
(3)根据生成的变换矩阵执行仿射变换,执行仿射变换的算子通常有:affine_trans_image、affine_trans_region、affine_trans_contour_xld,即对于图像、区域、XLD都可以执行仿射变换。
除此之外,HALCON中还常用vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)来创建旋转、平移的变换矩阵。其中的Row1, Column1为图形中心点的原始坐标,Angle1为图形的原始角度;Row2, Column2为变换后的图形中心点的坐标,Angle2为变换后的图像角度。
示例代码:
read_image (Image, '25interleaved_exposure_04.png')
threshold (Image, Regions, 49, 255)
connection (Regions, ConnectedRegions)
*用特征选择去除小噪声点
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 77900.9, 235228)
shape_trans (SelectedRegions, RegionTrans, 'rectangle2')
*计算出二维码标签的中心点坐标,即为旋转中心坐标
area_center (RegionTrans, Area, Row, Column)
reduce_domain (Image, RegionTrans, ImageReduced)
*计算出二维码的倾斜角度
orientation_region (RegionTrans, Phi)
*创建初始化矩阵
hom_mat2d_identity (HomMat2DIdentity)
*创建旋转变换矩阵
hom_mat2d_rotate (HomMat2DIdentity, -Phi, Row, Column, HomMat2DRotate)
*执行仿射变换
affine_trans_image (ImageReduced, ImageAffinTrans, HomMat2DRotate, 'constant', 'false')