halcon学习笔记3-几何定位+仿射变换

本文介绍了如何利用仿射变换对图像进行几何校正,具体步骤包括:首先对充电器头图像进行灰度化和阈值处理,获取其区域;接着计算区域的弧度并进行旋转校正;最后通过平移、旋转和缩放完成图像的完整变换。使用了如hom_mat2d_translate、hom_mat2d_rotate、hom_mat2d_scale等函数,实现了图像的精确调整。
摘要由CSDN通过智能技术生成

关于仿射变换,这里不做详细介绍,这里推荐一篇文章:如何通俗地理解仿射变换

几何定位和仿射变换的一部分算子
affine_trans_(iamge,region,xld):仿射变换-作用到iamge,region、xld等都可以
vector_angle_to_rigid():得到一个刚性仿射变换矩阵
orientation_region():得到指定区域的弧度(与x轴正方向的弧度)
hom_mat2d_identity ():得到一个单位矩阵
hom_mat2d_translate ():得到一个平移变换矩阵
hom_mat2d_rotate ():得到一个旋转变换矩阵
hom_mat2d_scale ():得到一个缩放变换矩阵

这里的参数会在后面的代码实例中详细讲解

首先,我采用的图像是自己手机拍的一个手机充电器头头:
在这里插入图片描述
我们的此处的目的是:
1.将充电头先放平(与水平线一致)
这里先灰度化再通过阈值操作,拿到充电头所占的区域

* 灰度化
rgb1_to_gray (Image, GrayImage)

* 阈值操作,拿到充电头区域
threshold (GrayImage, Regions, 133, 254)

效果如下:
在这里插入图片描述
然后在拿到充电头的弧度、中心坐标、面积

* 得到充电头区域与x轴正方形的弧度
orientation_region (Regions, Phi)

* 得到充电头的面积和中心点坐标
area_center (Regions, Area, Row, Column)

这里的orientation_region 算子作用是给定区域(Regions),返回该区域与x轴正方向的弧度(Phi)

在对其进行一个刚性仿射变换

* 得到一个刚性仿射的变换矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)

* 根据旋转的变换矩阵进行仿射变换
affine_trans_region (Regions, RegionAffineTrans, HomMat2D, 'nearest_neighbor')

这里的vector_angle_to_rigid 算子,第一个和第二个参数是要给定一个原始坐标,第三个参数要给他一个原来的弧度,第四个和第五个就是原来的点坐标变换后的点坐标,第六个也就是变换后的弧度,最后是接收变换的矩阵句柄

affine_trans_region 算子的第一个参数是指输入要变换的区域,第二个参数是变换后的区域句柄,第三个参数是一个变换矩阵,此次变换就是根据这个变换矩阵来变换的,最后一个参数指的是插值的方式,这里是默认是最近邻插值
效果如下:
在这里插入图片描述

这里我们完成了第一步。

2.将充电头进行旋转、平移和缩放

* 得到一个单位矩阵
hom_mat2d_identity (HomMat2DIdentity)

* 得到一个平移的变换矩阵
hom_mat2d_translate (HomMat2DIdentity, 500, 500, HomMat2DTranslate)

* 得到一个平移加旋转的变换矩阵
hom_mat2d_rotate (HomMat2DTranslate, rad(-90), Column, Row, HomMat2DRotate)

* 得到一个平移、旋转、缩放的变换矩阵
hom_mat2d_scale (HomMat2DRotate, 0.5, 0.5, Column, Row, HomMat2DScale)

* 根据变换矩阵进行仿射变换
affine_trans_region (RegionAffineTrans, RegionAffineTrans1, HomMat2DScale, 'nearest_neighbor')

这里的hom_mat2d_identity 算子的作用是得到一个单位矩阵

hom_mat2d_translate 算子作用是得到一个平移的变换矩阵,第一个参数需要输入一个矩阵,第二和第三个参数是指沿x、y轴正方向平移的值,最后一个参数是输出的矩阵句柄

hom_mat2d_rotate 算子作用是得到一个旋转的变换矩阵,第一个参数是输入矩阵,第二个参数是指逆时针旋转的弧度,这里使用ard(-90)的意思是旋转-90度大小的弧度,使用旋转后的头头的插入的方向应该是垂直于x轴的,第三和第四个参数是一个中心点的坐标,此次选择就是沿着这个点进行旋转,最后得到输出矩阵句柄,因为输入是进行了旋转的矩阵,所以这里输出的矩阵是旋转+平移的矩阵

hom_mat2d_scale 算子的作用是得到一个缩放矩阵,第一个参数是输入的矩阵,第二个和第三个参数的宽和搞的缩放比例,这里缩小成了0.5,后面一样的,是旋转中心的坐标和输出矩阵句柄

最后用affine_trans_region 完成仿射变换
效果图:
在这里插入图片描述

这就完成了!

萌新学习中,给大佬们请多多指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值