1-halcon仿射变化主要使用两个函数
1、affine_trans_image:图像仿射变化
2、affine_trans_region:区域仿射变化
2-仿射变换矩阵
在halcon中求取仿射变换矩阵的方法包含两种:
一、对单位矩阵进行旋转、偏移和缩放
hom_mat2d_identity (HomMat2DIdentity) 生成单位矩阵
hom_mat2d_rotate (HomMat2DIdentity, -0.3, 256, 256, HomMat2DRotate) 对单位矩阵旋转
hom_mat2d_scale (HomMat2DRotate, 1.5, 1.5, 256, 256, HomMat2DScale) 对单位矩阵缩放
affine_trans_region (Region, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')
旋转、缩放和平移顺序无关、也可以多次使用
二、已知角度和旋转中心(不能进行缩放)
orientation_region (zqb, Phi)
area_center (RegionFillUp1, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
通过vector_angle_to_rigid生成
3-旋转角度正负定义
逆时针为﹢,顺时针为-。
3-几何定位与放射示例
* Image Acquisition 02: Code generated by Image Acquisition 02
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] FHD Camera', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
grab_image_async (Image, AcqHandle, -1)
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 177, 255)
opening_rectangle1 (Regions, RegionOpening, 10, 10)
fill_up (RegionOpening, RegionFillUp1)
shape_trans (RegionFillUp1, RegionTrans,'ellipse')
shape_trans (RegionTrans,zqb,'rectangle2')
orientation_region (zqb, Phi)
area_center (RegionFillUp1, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
affine_trans_image (GrayImage, ImageAffineTrans, HomMat2D, 'constant', 'false')
affine_trans_region (zqb, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced)
* orientation_region (RegionTrans, Phi)
* area_center (RegionTrans, Area, Row, Column)
* vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
* affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
* affine_trans_image (GrayImage, ImageAffineTrans, HomMat2D, 'constant', 'false')
* threshold (ImageAffineTrans, Regions1, 196, 254)
* opening_rectangle1 (Regions1, RegionOpening1, 10, 10)
* fill_up (RegionOpening1, RegionFillUp2)
* shape_trans (RegionFillUp2, RegionTrans2,'rectangle1')
* reduce_domain (ImageAffineTrans, RegionTrans2, ImageReduced)
* fill_up (Regions, RegionFillUp)
* orientation_region (RegionFillUp, Phi)
* area_center (RegionFillUp, Area, Row, Column)
* vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
* affine_trans_region (RegionFillUp, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
* affine_trans_image (GrayImage, ImageAffineTrans, HomMat2D, 'constant', 'false')
endwhile
close_framegrabber (AcqHandle)
4-结果
1、初始照片
2、二值化
3、图形变化(求角度)
4、结果
5-总结
在halcon中,图像、区域和xld变量是有本质区别的,图像带有像素,可以进行图像和区域等所有操作;区域仅仅是图像上符合相关条件的坐标点集合,可以进行几何操作,但是不能进行图像操作。如何需要提取图像上的相关信息,最终还是要进行图像操作,区域操作可以获取相关的几何信息,比如旋转角度、目标图像的位置等。