Halcon实现图像的仿射变换(平移、旋转、缩放、镜像、斜切)


初学图像处理,如有写的不正确的地方请多纠正

仿射变换

仿射变换有:仿射变换主要包括平移变换旋转变换缩放变换(也叫尺度变换)、倾斜变换(也叫错切变换、剪切变换、偏移变换)、翻转变换。有六个自由度。

要进行仿射变换,必须先获取变换矩阵。要获取变换矩阵,必须先获取特征点坐标、角度等信息,几何匹配和bolb是获取特征点的高效方法,除此之外还有其它方法,只要能稳定的求出特征点即可。

仿射变换的主要流程:

1:获取特征点坐标、角度。
2:计算仿射变换矩阵。
3:对图像、区域、轮廓进行仿射变换

数学推导原理

https://blog.csdn.net/weixin_41045657/article/details/113522054?spm=1001.2014.3001.5501

仿射变换常用的算子 hom_mat(homogeneous Matrix 齐次矩阵)

hom_mat2d_identity

hom_mat2d_identity (HomMat2DIdentity)
解释:定义一个对角为 1 的 单位矩阵,它和任何矩阵相乘等于原矩阵本身。
在这里插入图片描述

hom_mat2d_translate(平移)

hom_mat2d_translate (HomMat2DIdentity, Tx, Ty, HomMat2DTranslate)
功能:把平移添加到防射变换矩阵
HomMat2D(输入参数):仿射变换矩阵
Tx(输入参数):沿x轴方向平移的距离
Ty(输入参数):沿y轴方向平移的距离
HomMat2DTranslate(输出参数):输出变换矩阵
在这里插入图片描述

read_image (Image, 'C:/Users/Daniel大妞/Desktop/5.png')
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_translate (HomMat2DIdentity, 300, 300, HomMat2DTranslate)
affine_trans_image (Image, ImageAffineTrans, HomMat2DTranslate, 'constant', 'false')

效果
在这里插入图片描述

hom_mat2d_rotate(旋转)

hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate)
功能:把旋转角度添加到仿射变换矩阵
HomMat2D(输入参数):仿射变换矩阵
Phi(输入参数):旋转角度(单位弧度)
Px(输入参数):变换的固定点行坐标。固定点是指以该点为支撑进行仿射变换 (这里是指围绕这点进行旋转)
Py:(输入参数):变换的固定点列坐标
HomMat2DRotate(输出参数):输出变换矩阵
在这里插入图片描述

read_image (Image, 'C:/Users/Daniel大妞/Desktop/5.png')
hom_mat2d_identity (HomMat2DIdentity)
* hom_mat2d_translate (HomMat2DIdentity, 300, 300, HomMat2DTranslate)
hom_mat2d_rotate (HomMat2DIdentity, 0.78, 300, 300, HomMat2DRotate)
affine_trans_image (Image, ImageAffineTrans, HomMat2DRotate, 'constant', 'false')

效果1(旋转坐标(0,0))
在这里插入图片描述
效果1(旋转坐标(300,300))
在这里插入图片描述

hom_mat2d_scale(缩放)

hom_mat2d_scale( : : HomMat2D, Sx, Sy, Px, Py : HomMat2DScale)
功能:把缩放添加到仿射变换矩阵
HomMat2D(输入参数):仿射变换矩阵
Sx(输入参数):x轴方向的缩放因子
Sy(输入参数):y轴方向的缩放因子
Px(输入参数):变换的固定点行坐标
Py(输入参数):变换的固定点列坐标
HomMat2DScale(输出参数):输出变换矩阵
在这里插入图片描述

read_image (Image, 'C:/Users/Daniel大妞/Desktop/5.png')
hom_mat2d_identity (HomMat2DIdentity)
* hom_mat2d_translate (HomMat2DIdentity, 300, 300, HomMat2DTranslate)
* hom_mat2d_rotate (HomMat2DIdentity, 0.78, 300, 300, HomMat2DRotate)
hom_mat2d_scale (HomMat2DIdentity, 0.5, 0.5, 0, 0, HomMat2DScale)
affine_trans_image (Image, ImageAffineTrans, HomMat2DScale, 'constant', 'false')

效果
在这里插入图片描述

hom_mat2d_slant(斜切)

hom_mat2d_slant(::HomMat2D,Theta,Axis,Px,Py:HomMat2DSlant)
功能:把斜切添加到防射变换矩阵
HomMat2D(输入参数):仿射变换矩阵
Theta(输入参数):斜切角度(单位:弧度)
Axis(输入参数):斜切的坐标轴。取值列表:x,y
Px(输入参数):变换的固定点x坐标
Py(输入参数):变换的固定点y坐标
HomMat2DSlant(输出参数):输出仿射变换矩阵
在这里插入图片描述

read_image (Image, 'C:/Users/Daniel大妞/Desktop/5.png')
hom_mat2d_identity (HomMat2DIdentity)
* hom_mat2d_translate (HomMat2DIdentity, 300, 300, HomMat2DTranslate)
* hom_mat2d_rotate (HomMat2DIdentity, 0.78, 300, 300, HomMat2DRotate)
* hom_mat2d_scale (HomMat2DIdentity, 0.5, 0.5, 0, 0, HomMat2DScale)
hom_mat2d_slant (HomMat2DIdentity, 0.52, 'y', 0, 0, HomMat2DSlant)
affine_trans_image (Image, ImageAffineTrans, HomMat2DSlant, 'constant', 'false')

在这里插入图片描述

vector_angle_to_rigid(刚性仿射变换矩阵,支持旋转和平移)

vector_angle_to_rigid(::Row1,Column1,Angle1,Row2,Column2,Angle2:HomMat2D)
功能:根据点和角度计算刚性仿射变换矩阵,支持旋转和平移
Row1(输入参数):原始点行坐标
Column1(输入参数):原始点列坐标
Angle1(输入参数):原始点角度
Row2(输入参数):变换的目的点行坐标
Column2(输入参数):变换的目的点列坐标
Angle2(输入参数):变换的目的点角度
HomMat2D(输出参数):输出仿射变换矩阵

猜你喜欢

转载自blog.csdn.net/weixin_41045657/article/details/113561652