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

Halcon_数据类型_ROI_仿射变换_投影变换

文章目录

  • 算子
  • 快捷键
  • 一、Halcon数据类型
    • Iconic (图标)
    • Control (控制)
    • Tuple (数组)
  • 二、ROI(区域)
    • 1.代码创建ROI
    • 2.手动创建ROI
  • 三、图形预处理
    • 1.图像的变换与矫正
      • 平移 -hom_mat2d_translate
      • 旋转
      • 缩放-HomMat2D:输入的仿射变换矩阵。
      • 切变
      • 相似变换
      • 仿射变换 affine_trans_image
      • 投影变换- projective_trans_image


算子

类似于C++的函数,但参数依次为:输入图形参数、输出图形参数、输入控制参数、输出控制参数

快捷键

  • 多行注释:选中想要注释的代码,然后直接按F4
  • 取消注释:按F3可以取消注释

一、Halcon数据类型

Iconic (图标)

  • Image(图像)
//读取图片的算子
read_image (图片变量名, 图片位置'mreut')
  • Region(区域)
threshold (Mreut, Region, 190, 255)  
//阈值化,输出阈值在190-255的Regions
  • Extended Line Description(XLD)

Control (控制)

  • String (字符)
  • Integer (整形)
  • Real (实型)
  • Handle (句柄)

Tuple (数组)

二、ROI(区域)

1.代码创建ROI

read_image(Image,'claudia.png')
gen_rectangle1(Region,0,10,100,100)-创建矩形ROI
reduce_domain(Image,Region,Image2)-将给定图像的定义域缩小到指定的区域。
dev_display(Image2)-显示图片

在这里插入图片描述
在这里插入图片描述

2.手动创建ROI

read_image(Image,'claudia.png')
get_image_size(Image,Width,Height)-获取图片长宽
dev_open_window(0,0,Width,Height,'black',WindowHandle)-创建图形窗口
draw_rectangle1(WindowHandle,Row1, Column1, Row2, Column2)-获取画的矩形坐标和大小
gen_rectangle1(Rectangle, Row1, Column1, Row2, Column2)-创建矩形region
reduce_domain(Image, Rectangle, ImageReduced)-缩减到创建region
dev_display(ImageReduced)

在这里插入图片描述
按下鼠标右键确认框选
在这里插入图片描述

三、图形预处理

函数:
hom_mat2d_identity( : : : HomMat2DIdentity)
作用:生成变换矩阵
HomMat2DIdentity:生成的变量名

1.图像的变换与矫正

平移 -hom_mat2d_translate

在这里插入图片描述

函数:
hom_mat2d_translate( : : HomMat2D, Tx, Ty : HomMat2DTranslate)
作用:平移矩阵
参数:
HomMat2D:变换矩阵
Tx:沿x轴方向平移的距离。
Ty:沿y轴方向平移的距离。
HomMat2DTranslate:输出变换的矩阵

旋转

在这里插入图片描述
公式:
在这里插入图片描述

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

缩放-HomMat2D:输入的仿射变换矩阵。

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

函数:
hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate)
作用:将缩放添加到仿射变换矩阵中
HomMat2D:输入的仿射变换矩阵。
Phi:旋转角度(单位为弧度)。
Px:变换的固定点行坐标。固定点是指以该点为支撑进行仿射变换(这里是指围绕这点进行旋转)。
Py:变换的固定点列坐标。
HomMat2DRotate:输出的变换矩阵

切变

在这里插入图片描述
公式:下面介绍切变的其他和看上面

在这里插入图片描述

函数:
hom_mat2d_slant( : : HomMat2D, Theta, Axis, Px, Py : HomMat2DSlant)
作用:添加切变到仿射变换矩阵中
参数:
HomMat2D:输入的仿射变换矩阵。
Theta:斜切角度(单位:弧度)。
Axis:斜切的坐标轴,取值可以是 'x''y'。
Px:变换的固定点x坐标。
Py:变换的固定点y坐标。
HomMat2DSlant:输出的斜切仿射变换矩阵

相似变换

相似变换:由一个平面/立体图形变换到另一个平面/立体图形,在改变的过程中保持形状不变(大小方向和位置可变),任何相似变换都可以分解为等比例缩放、平移、旋转的组合。
在这里插入图片描述

仿射变换 affine_trans_image

仿射变换:由一个平面/立体图形变换到另一个平面/立体图形,在改变的过程中保持直线和平行线不变(平行线映射为平行线),任何仿射变换都可以分解为缩放、平移、旋转、和切变的组合。

函数:
affine_trans_image(Image : ImageAffineTrans : HomMat2D, Interpolation, AdaptImageSize : )
作用:放射变换图片
参数:
Image:需要变换的图片
ImageAffineTrans:变换后的图片
HomMat2D :变换的矩阵
Interpolation:插值算法,一般用‘constant’
AdaptImageSize:是否自适应,true 或者 false

样例代码:

read_image(Image,'claudia.png')
get_image_size(Image, Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)

*创建矩阵
*平移
* hom_mat2d_identity(HomMat2DIdentity)
* hom_mat2d_translate(HomMat2DIdentity,Width/2,Height/2,HomMat2DTranslate)
* affine_trans_image(Image, ImageAffineTrans, HomMat2DTranslate, 'constant', 'true')
* dev_clear_window()
* dev_display(ImageAffineTrans)

*旋转
* hom_mat2d_identity(HomMat2DIdentity)
* hom_mat2d_rotate(HomMat2DIdentity,3.14/2,Width/2,Height/2,HomMat2DRotate)
* affine_trans_image(Image,ImageRotate,HomMat2DRotate,'constant','false')
* dev_clear_window()
* dev_display(ImageRotate)
*缩放
* hom_mat2d_identity(HomMat2DIdentity)
* hom_mat2d_scale(HomMat2DIdentity, 0.5, 0.5,  Height, Width,HomMat2DScale)
* affine_trans_image(Image, ImageAffineTrans, HomMat2DScale, 'constant', 'false')
* dev_clear_window()
* dev_display(ImageAffineTrans)
*切变
hom_mat2d_identity(HomMat2DIdentity)
hom_mat2d_slant(HomMat2DIdentity, -3.14/4, 'x',  Height,Width, HomMat2DSlant)
affine_trans_image(Image, ImageAffineTrans1, HomMat2DSlant, 'constant', 'false')
dev_clear_window()
dev_display(ImageAffineTrans1)

投影变换- projective_trans_image

仿射变换几乎能校正物体所有可能发生的与位姿相关的变化,但并不能应付所有情况。投影变换包括的情况很多,如对边不再平行,或者发生了透视畸变等,这时可以使用投影变换使其恢复原状。其步骤与仿射变换类似,首先计算投影变换矩阵,然后计算投影变换参数,最后将投影变换矩阵映射到对象上。

函数:
projective_trans_image(Image : TransImage : HomMat2D, Interpolation, AdaptImageSize, TransformDomain : )
作用:应用一个齐次投影变换矩阵(HomMat2D)到输入图像上,生成变换后的输出图像。
参数:
Image (input_object): 输入图像。
TransImage (output_object): 输出图像。
HomMat2D (input_control): 齐次投影变换矩阵。
Interpolation (input_control): 变换的插值方法,默认为 'bilinear',可选值包括 'bilinear', 'nearest_neighbor'AdaptImageSize (input_control): 是否自动调整输出图像的大小,默认为 'false'TransformDomain (input_control): 是否变换输入图像的域,默认为 'false'

样例:

read_image(Image,'4-3.png')
dev_open_window_fit_image(Image, 0, 0, -1, -1, WindowHandle)
dev_set_color('red')
dev_set_line_width(2)
X:=[163,280,362,75]
Y:=[125,120,361,340]
dev_display(Image)
gen_cross_contour_xld(Cross, X, Y, 6, 0.785398)//生成叉叉
dev_display(Cross)
*根据点计算齐次变换矩阵
hom_vector_to_proj_hom_mat2d(X,Y,[1,1,1,1],[75,360,360,75],[110,110,395,395],[1,1,1,1],'normalized_dlt', HomMat2D)
*投影变换
projective_trans_image(Image, TransImage, HomMat2D, 'bilinear', 'false', 'false')

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/429140.html

相关文章:

  • SpringBoot项目打war包要点
  • python——句柄
  • Power Automate 实现字符串分割、替换、换行显示
  • idea 如何安装 github copilot
  • 联通用户管理系统(一)
  • PyTorch使用教程(2)-torch包
  • 设计模式 在SCM系统的应用场景介绍
  • ISO45001职业健康安全管理体系认证流程
  • springboot整合lua脚本在Redis实现商品库存扣减
  • 关系型数据库(RDBMS)和非关系型数据库(NoSQL)
  • 使用 Trace 实现 onnx 的导出 - 学习记录
  • golang学习,小结
  • 数学公式和科学符号在页面的展示方法
  • 去除背景 学习笔记
  • PCB设计规范
  • 运维监控grafana+prometheus+node_exporter(or mysqld_exporter)
  • 手动将MJPEG图片,转成MP4文件格式
  • centOS7如何配置阿里云或者腾讯云yum源
  • 【Linux】搭建临时HTTP文件传输服务器
  • uniapp支持App横竖屏开发总结
  • iPhone 17 Air基本确认,3个大动作
  • 嵌入式学习——进程间通信方式(5)—— 信号量
  • 22. 五子棋小游戏
  • 阿里云PolarDB 如何进行数据恢复,文档总结
  • 【Qt】QMainWindow、QWidget和QDialog的区别?
  • Oracle 19C RU补丁升级,从19.7to19.25 -单机