关于仿射变换,这里不做详细介绍,这里推荐一篇文章:如何通俗地理解仿射变换
几何定位和仿射变换的一部分算子
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 完成仿射变换
效果图:
这就完成了!
萌新学习中,给大佬们请多多指教!