当前位置: 首页 > news >正文

仿射变换、根据特征点进行仿射变换

目录

 对区域进行仿射变换

1.读取图片并进行开运算(目的是为了去除一些小毛刺) 

2.获取区域中心

3.放射变换

 旋转变换

缩放变换 

 根据两个或两个以上特征点进行仿射变换

1.绘制椭圆轮廓

2.获取轮廓

3. 根据多个点生成一个仿射矩阵


halcon中进行仿射变换的时候插值算法有affine_trans_image(默认的插值算法 'constant')affine_trans_region(默认的插值算法 'nearest_neighbor')

  1. 'constant' 当图像经过旋转、平移、缩放等变换之后 会产生一些原图当中没有对应的像素的区域 对这些区域进行定值进行填充
  2. 'nearest_neighbor' 最近邻插值法 最简单的一种插值算法 其核心原理:对于变换后图像每个新的像素点,都是取原始图像中距离最近像素的值为新值,不进行任何其他运算
  3. 'bilinear' 双线插值法,图像处理当中中等质量的插值算法,主要考虑最近的4个相邻域(2*2)求加权平均值作为新值
  4. 'weighted' 加权插值或者三线插值法   图像处理当中最高等质量的插值算法,计算成本最高 主要考虑最近的16个相邻域(4*4)求加权平均值作为新值

 对区域进行仿射变换

1.读取图片并进行开运算(目的是为了去除一些小毛刺) 
read_image (Image, 'affine')
dev_get_window (WindowHandle)
threshold (Image, Region, 0, 200)*开运算 先对区域进行腐蚀运算 ,在进行膨胀运算(目的是为了去除一些小毛刺,)
*参数3 1.5消除毛刺的圆的半径
opening_circle (Region, Region, 1.5)
* 最终结果如下图1:connection (Region, ConnectedRegions)
* 最终结果如下图2:*参数3 max_area筛选的是最大面积
*参数4  max_area 后面70 没有实际作用
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
* 最终结果如下图3:
原图
图1
图2
图3
2.获取区域中心
*获取区域的中心
area_center (SelectedRegions, Area, Row, Column)
*获取选择角度
orientation_region (SelectedRegions, Phi)*以边框的方式进行绘制
dev_set_draw ('margin')
dev_display (Image)*展示十字标记
*参数2 参数3 展示十字标记的位置
*参数4 十字标记的长度
*参数5 十字标记的旋转角度, 0 不旋转,
disp_cross (WindowHandle, Row, Column, 10, 40)
3.放射变换
*创建初始矩阵 齐次矩阵
hom_mat2d_identity (HomMat2DIdentity)
*生成平移的仿射矩阵
hom_mat2d_translate (HomMat2DIdentity, 30, 150, HomMat2DTranslate)
*对区域进行仿射变换
affine_trans_region ( Region , RegionAffineTrans, HomMat2DTranslate, 'nearest_neighbor')
* 最终结果如下图4:
图4

 旋转变换

dev_display (Image)
disp_cross (WindowHandle, Row, Column, 10, 40)
* 旋转变换
hom_mat2d_rotate (HomMat2DIdentity,rad(60), Row, Column, HomMat2DRotate)
affine_trans_region (Region, RegionAffineTrans1, HomMat2DRotate, 'nearest_neighbor')
* 最终结果如下图:
旋转变换

缩放变换 

dev_display (Image)
disp_cross (WindowHandle, Row, Column, 10, 40)
* 缩放变换
hom_mat2d_scale (HomMat2DIdentity, 2, 2, Row, Column, HomMat2DScale)
affine_trans_region (Region, RegionAffineTrans2, HomMat2DScale, 'nearest_neighbor')
* 最终结果如下图:
缩放变换

 根据两个或两个以上特征点进行仿射变换

1.绘制椭圆轮廓

gen_ellipse_contour_xld (ContEllipse, 70, 100, 0, 70, 90, 0, rad(360), 'positive', 1.5)

*参数1 输出图片
*参数2 参数3 圆心坐标
*参数4 椭圆的主轴旋转度 0 主轴为水平轴,rad(90)主轴为竖直轴
*参数5 。参数6 主轴的半径大小    另外一个轴方向半径大小
*参数'positive' 顺时针方向产生点 ,negative 逆时针产生点
*最后一个1.5参数 每隔1.5产生一个点

* 输出结果如下图:

2.获取轮廓

get_contour_xld (ContEllipse, Row, Col)

*Row 行坐标的元组
*Col 列坐标的元组

* 输出结果如下图:

3. 根据多个点生成一个仿射矩阵

vector_to_rigid (Col, Row, Col, Row, HomMat2D)

* Px 源点的列的坐标元组
* Py 源点的行的坐标元组
* Qx  目标点的列的坐标元组
* Qy 目标点的行的坐标元组、
*HomMat2D 生成的矩阵

hom_mat2d_identity (HomMat2DIdentity)
*对HomMat2D矩阵再进行其他变换
hom_mat2d_rotate (HomMat2D,rad(90), 70, 100, HomMat2DRotate)
*把仿射矩阵应用到轮廓上
affine_trans_contour_xld (ContEllipse, ContoursAffineTrans, HomMat2DRotate)

*输出结果如下图:

http://www.xdnf.cn/news/910981.html

相关文章:

  • HarmonyOS运动开发:如何用mpchart绘制运动配速图表
  • 计算与分析2-深度学习
  • F5 – TCP 连接管理:会话、池级和节点级操作
  • 嵌入式Linux下如何启动和使用Docker
  • 【数据结构】图
  • FPGA 动态重构配置流程
  • CVAT标注服务
  • 中国移动6周年!
  • C++.OpenGL (10/64)基础光照(Basic Lighting)
  • 2025年6月6日15:48:23
  • [蓝桥杯]防御力
  • Source insight 4自用技巧整理
  • webstorm 配置 Prettier
  • 每次clone都会有:Enter passphrase for key ‘/Users/xxx/.ssh/id_rsa‘:
  • JavaScript操作数组、字符串、对象的一些方法
  • vcs仿真产生fsdb波形的两种方式
  • YOLO训练保持原有识别能力
  • maven私服
  • JAVA元编程
  • QPS、TPS、RT、IOQS、并发数等性能名词介绍
  • AI系统提示词:V0
  • C++.OpenGL (9/64)摄像机(Camera)
  • UChart图标 y轴取整
  • [蓝桥杯]扫地机器人
  • 如何在Lyra中创建一个新的Game Feature Plugin和Experience游戏体验
  • 区分viewmodel和model职责的方法
  • 六级作文--句型
  • Mysql中select查询语句的执行过程
  • 浩辰AI楼梯让建筑设计智能化!
  • mysql修改字段类型