Halcon学习之仿射变换

一、刚体变换

vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)

二、矩阵方式

1.单位矩阵

hom_mat2d_identity( : : : HomMat2DIdentity)

2.平移矩阵

hom_mat2d_translate( : : HomMat2D, Tx, Ty : HomMat2DTranslate)

3.旋转矩阵

hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate)

4.缩放

hom_mat2d_scale (HomMat2DIdentity, 2, 2, Column1, Row1, HomMat2DScale)

三、变换使用算子

affine_trans_region(Region : RegionAffineTrans : HomMat2D, Interpolate : )

affine_trans_image(Image : ImageAffineTrans : HomMat2D, Interpolation, AdaptImageSize : )

四、投影变换

*原图需要转化区域点位
R1:=[130,60,225,290]
C1:=[102,271,95,289]
*转换后区域点位
R2:=[62.6481,62.6481,289.685,289.685]
C2:=[90.6901,290.999,90.6901,290.999]
*生成变换矩阵
hom_vector_to_proj_hom_mat2d (R1, C1, [1,1,1,1], R2, C2, [1,1,1,1], 'normalized_dlt', HomMat2D)
*投影变换
projective_trans_image (Image, TransImage, HomMat2D, 'bilinear', 'false', 'false')

变换前图像:

投影变换后图像:

 五、错切

*text_line_orientation (Image, Image, 45, rad(-45), rad(45), OrientationAngle)用于文本整体倾斜

text_line_slant (Image, Image, 45, -0.523599, 0.523599, SlantAngle)用于字符倾斜

hom_mat2d_identity (HomMat2DIdentity)

hom_mat2d_slant (HomMat2DIdentity, -SlantAngle, 'x', 0, 0, HomMat2DSlant)

### Halcon仿射变换的使用方法 #### 创建仿射变换模型 在 Halcon 中,创建仿射变换模型的第一步是初始化一个单位矩阵。这可以通过 `hom_mat2d_identity` 函数实现,该函数返回一个标准的 3×3 单位矩阵用于后续操作[^3]。 ```cpp // 初始化仿射变换矩阵为单位矩阵 hom_mat2d_identity (HomMat2DIdentity) ``` #### 计算特定类型的仿射变换矩阵 为了执行平移、旋转或缩放等操作,需要计算相应的仿射变换矩阵。例如,要绕图像中心旋转一定角度并同时进行缩放: ```cpp // 定义旋转角(度数)和缩放因子 Angle := deg_to_rad(30) // 将角度转换成弧度制 ScaleX := 1.5 // X方向上的缩放比例 ScaleY := 1.5 // Y方向上的缩放比例 // 获取输入图像尺寸以确定中心点位置 get_image_size(Image, Width, Height) // 设置新的原点到图像中心 Row := floor((Height-1)/2) Column := floor((Width-1)/2) // 构建完整的仿射变换矩阵:先移动至新坐标系 -> 执行旋转变换 -> 应用缩放 -> 返回原始坐标系 hom_mat2d_translate(HomMat2DIdentity, Row, Column, HomMat2DTmp) hom_mat2d_rotate(HomMat2DTmp, Angle, 'positive', HomMat2DRotate) hom_mat2d_scale(HomMat2DRotate, ScaleX, ScaleY, Row, Column, HomMat2DScale) hom_mat2d_translate(HomMat2DScale, -Row, -Column, HomMat2DTransformed) ``` #### 对象轮廓线的仿射变换应用 当处理对象轮廓时,可以利用 `affine_trans_contour_xld` 函数来施加之前构建好的仿射变换矩阵给指定的对象轮廓数据集。 ```cpp // 假设已经有一个名为 Contours 的 XLD 类型变量表示目标物体边缘信息 affine_trans_contour_xld(Contours, TransformedContours, HomMat2DTransformed) dev_display(TransformedContours) // 显示变换后的结果 ``` 通过上述过程,在 Halcon 环境下实现了基于自定义参数设置下的仿射几何变化效果展示[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值