Halcon 仿射变换(旋转、平移、缩放、斜切、刚性、xld轮廓)
创作时间:
作者:
@小白创作中心
Halcon 仿射变换(旋转、平移、缩放、斜切、刚性、xld轮廓)
引用
CSDN
1.
https://m.blog.csdn.net/qq_51810680/article/details/136913104
Halcon是一种广泛应用于机器视觉和图像处理领域的软件,它提供了丰富的图像处理函数和工具。仿射变换是图像处理中常用的一种几何变换,可以实现图像的旋转、平移、缩放等操作。本文将详细介绍如何在Halcon中使用仿射变换对图像进行各种操作。
1. 旋转矩阵
read_image (Image, 'fabrik')
get_image_size (Image, Width, Height)
* 生成单位矩阵(一个不进行任何变换的仿射矩阵)
hom_mat2d_identity (HomMat2DIdentity)
* 如何获得图像中心点坐标
Row:=Height/2
Col:=Width/2
a:=rad(90)
* 已知弧度求角度
angle:=deg(a)
* 创建一个旋转仿射矩阵
* 参数一:输入的单位仿射矩阵
* 参数二:旋转角度(单位:弧度)
* 参数三、四:旋转中心的行和列坐标
* 参数五:输出的放射矩阵
hom_mat2d_rotate (HomMat2DIdentity, 0.78, Col, Row, HomMat2DRotate)
* 对图像进行仿射变换
* 参数一:输入图像(原始图像)
* 参数二:输出图像
* 参数三:放射矩阵
* 参数四:插值方法,'constant'表示超出边界的像素值将被设置为常数值。
* 参数五:是否进行归一化。设置为'false'表示不对输出图像进行归一化处理。
affine_trans_image (Image, ImageAffineTrans, HomMat2DRotate, 'constant', 'false')
旋转后的图像
2. 平移矩阵
read_image (Image, 'fabrik')
dev_display (Image)
hom_mat2d_identity (HomMat2DIdentity)
* 创建一个平移变换矩阵
* 参数二、三:指定了沿水平和垂直方向的平移的单位
hom_mat2d_translate (HomMat2DIdentity, 200, 200, HomMat2DTranslate)
affine_trans_image (Image, ImageAffineTrans, HomMat2DTranslate, 'constant', 'false')
3. 缩放矩阵
read_image (Image, 'fabrik')
dev_display (Image)
hom_mat2d_identity (HomMat2DIdentity)
* 创建一个缩放的仿射矩阵
* 参数二、三:水平和垂直方向缩放的倍数
* 参数四、五:缩放中心的列和行的坐标,在这里是图像左上角作为原点
* 参数六:输出仿射矩阵
hom_mat2d_scale (HomMat2DIdentity, 0.5, 0.5, 0, 0, HomMat2DScale)
affine_trans_image (Image, ImageAffineTrans, HomMat2DScale, 'constant', 'false')
4. 斜切矩阵
read_image (Image, 'fabrik')
dev_display (Image)
hom_mat2d_identity (HomMat2DIdentity)
* 创建一个倾斜的仿射矩阵
* 参数二:倾斜角度(单位:弧度)
* 参数三:倾斜方向
* 参数四、五:倾斜中心的列和行的坐标,在这里是图像的左上角作为原点
hom_mat2d_slant (HomMat2DIdentity, 0.78, 'x', 0, 0, HomMat2DSlant)
affine_trans_image (Image, ImageAffineTrans, HomMat2DSlant, 'constant', 'false')
5. 刚性矩阵
read_image (Image, 'fabrik')
threshold (Image, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 8000, 8400)
fill_up_shape (SelectedRegions, RegionFillUp, 'area', 1, 100)
area_center (RegionFillUp, Area, Row, Column)
* 获取选择区域的角度
orientation_region (RegionFillUp, Phi)
* 生成刚性矩阵,刚性矩阵只支持平移和旋转
* 参数一、二、三:平移的XY距离和旋转的角度
* 参数四、五:输出图像的中心位置的行和列坐标
* 参数六:旋转之后的额外角度,通常用于对齐图像。在这里是0度。
* 参数七:输出的刚性变换矩阵,表示平移和旋转。
vector_angle_to_rigid (Row, Column, Phi, 100, 200, rad(0), HomMat2D)
* 对输入区域应用仿射变换。
* 参数一:输入区域
* 参数二:输出仿射变换后的区域
* 参数三:对输入区域进行的仿射变换
* 参数四:插值方法,这里使用最邻近插值
affine_trans_region (RegionFillUp, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
输出结果
6. 对XLD轮廓进行仿射变换
原图
* xld轮廓进行仿射变换
read_image (Image, 'printer_chip/printer_chip_01')
threshold (Image, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 25000, 99999)
* 在图标元组中选择某一个图标
select_obj (SelectedRegions, ObjectSelected, 2)
* 获取对应区域的xld(交互式形状模型)轮廓
* 参数三:'border' 表示生成的XLD轮廓将沿着区域的边界生成。
gen_contour_region_xld (ObjectSelected, Contours, 'border')
* 求xld的面积和中心坐标点
area_center_xld (Contours, Area, Row, Column, PointOrder)
* 求xld轮廓的角度
orientation_xld (Contours, Phi)
* 根据输入的信息计算向量的旋转结果,并生成相应的二维齐次变换矩阵
* 参数一、二、三:输入的旋转中心的坐标和当前向量的角度
* 参数四、五:输出的旋转后的向量的终点XY坐标
* 参数六:旋转角度
* 参数七:输出的二维齐次变换矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(90), HomMat2D)
* 对xld轮廓进行仿射变化
affine_trans_contour_xld (Contours, ContoursAffineTrans, HomMat2D)
输出结果:
热门推荐
苏州古建:江南水乡的艺术瑰宝
古劳水乡冬日摄影攻略:捕捉最美瞬间!
乌镇古镇:江南水乡的治愈之旅
江南水乡的春日盛宴:王江泾镇网船会
乌镇vs西塘:谁才是你心中的江南水乡?
清凉峰:浙西屋脊上的自然与人文交响
冬日徒步清凉峰:领略浙西之巅的绝美风光
秋冬游清凉峰,如何做到环保出行?
秋冬打卡篁岭江湾,美到爆表!
婺源四季美景打卡攻略:从油菜花海到晒秋民俗
屋顶漏水维修指南:从检查到预防的完整解决方案
屋顶漏水后如何高效清洁?这份实用指南请收好!
秋冬房顶漏水,谁该担责?
白米饭是“垃圾食品之王”?营养专家来辟谣!
斯里兰卡神操作:椰子油+米饭=减肥神器?
哈佛研究揭示:白米饭的健康真相
龙游溪口观景台&石窟:必打卡景点!
清凉寺与清凉山:一场历史文化与自然人文的双重选择
秋日打卡:浙江清凉峰的绝美枫景
清凉峰徒步攻略:秋季最佳路线推荐!
浙江清凉峰加入世界生物圈保护区网络:华南梅花鹿迎来新家园
蛇年倒比龙年长,咋回事?这30天长在哪里?
年味最广州 | 浓浓艺术味 喜庆文化年
探秘沈阳水洞:薛礼征东的传奇世界
音乐在《三傻大闹宝莱坞》中的情感作用
上海到深圳有多远路程:千里之遥,路在何方?
您是否已经过度饮酒了?
龙游石窟探秘:自驾游必打卡!
世界第九大奇迹:浙江龙游石窟探秘
龙游石窟探秘:千年谜团等你解!