halcon中的放射变换

放射变换原理

怎样计算放射变换

仿射变换affine是透视变换的子集 - 仿射矩阵
在这里插入图片描述
仿射变换矩阵为2*3的矩阵,第三列的元素起着平移的作用,前面两列的数字对角线上是缩放,其余为旋转或者斜切的作用 - 计算仿射矩阵只需要3对不共线的点

定义

指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。

平移变换

在这里插入图片描述

缩放变换

在这里插入图片描述

翻转

在这里插入图片描述

斜切变换

在这里插入图片描述

刚体运动

在这里插入图片描述

放射变换流程

要进行仿射变换,必须先获取变换矩阵。要获取变换矩阵,必须先获取特征点坐标、角度等信息,几何匹配和bolb分析是获取特征点的高效方法。
1、通过hom_mat2d_identity(:::HomMat2DIdentity)算子创建一个初始化矩阵 即[1 0 0 0 1 0 0 0 1]。
2、在初始化矩阵的基础上,使用各种变换形式(平移、缩放、旋转)生成仿射变换矩阵。

// 把旋转角度添加到仿射变换矩阵hom_mat2d_rotate(HomMat2D, // 输入仿射变换矩阵(等于给了一个原始矩阵位置)Phi, // 输入旋转角度(弧度制)Px,Py, // 变换的参考点(围绕该点进行旋转)HomMat2DRotate) // 输出旋转变换矩阵​// 把缩放添加到仿射变换矩阵hom_mat2d_scale(HomMat2D,Sx,Sy, // x,y轴缩放比例Px,Py, // 变换的参考点(围绕该点进行缩放)HomMat2DScale) // 输出缩放变换矩阵// 把平移添加到仿射变换矩阵hom_mat2d_translate(HomMat2D,Tx,Ty, // 沿x轴、y轴方向平移的距离HomMat2DTranslate) // 输出平移矩阵​// 把斜切添加到仿射变换矩阵hom_mat2d_slant(HomMat2D,Theta, // 输入斜切角度(弧度制)Axis, // 输入斜切的坐标轴。取值列表:x,yPx,Py,HomMat2DSlant) // 输出斜切变换矩阵
计算已知点运动后的仿射矩阵// 根据两个以上点对计算刚性仿射变换矩阵,支持旋转和平移​// 求平移或旋转矩阵vector_angle_to_rigid(Px,Py, // 区域变换之前中心点的坐标Phi, // 夹角(极轴水平向右的夹角始边 逆时针为正 顺时针为负)Qx,Qy, // 区域变换之后的坐标Phi1, // 变换之后的角度HomMat2D) // 输出仿射变换矩阵​vector_to_rigid(Px,Py, // 输入原始点组的x、y坐标Qx,Qy, // 输入变换后点组的x、y坐标HomMat2D) // 输出仿射变换矩阵​// 根据两个以上点对计算相似仿射变换矩阵,支持旋转、平移和缩放vector_to_similarity(::Px,Py,Qx,Qy:HomMat2D)// 根据三个以上点对计算仿射变换矩阵,支持旋转、平移、缩放、斜切vector_to_hom_mat2d(::Px,Py,Qx,Qy:HomMat2D)

3、根据生成的变换矩阵执行仿射变换,对图像、区域、轮廓进行仿射变换。

 // 对XLD轮廓进行二维仿射变换,支持缩放,旋转,平移,斜切affine_trans_contour_xld(Contours, // 输入XLD轮廓ContoursAffinTrans, // 输出变换的XLD轮廓HomMat2D) // 输入仿射变换矩阵​// 对图像轮廓进行二维仿射变换,支持缩放、旋转、平移,斜切affine_trans_image(Image, // 输入图像ImageAffinTrans, // 输出变换后的图像HomMat2D,Interpolation, // 插值算法。参数值列表: nearest_neighbor,bilinear,constant,weightedAdaptImageSize) // 结果图像尺寸是否自适应。默认值:false​// 对区域进行任意二维仿射变换affine_trans_region(Region, // 输入区域RegionAffineTrans, // 输出变换后的区域HomMat2D, // 得到的矩阵变量Interpolate) // 插值算法。默认值:nearest_neighbor。参数值列表:constant,nearest_neighbor​// 对XLD多边形进行任意二维仿射变换affine_trans_polygon_xld(Polygon, // 输入XLD多边形PolygonsAffinTrans, // 输出变换后的XLD多边形HomMat2D)​// 对点进行任意二维仿射变换,支持缩放、旋转、平移、斜切affine_trans_point_2d(HomMat2D,Px,Py, // 原始点x或行坐标Qx,Qy) // 变换点x或行坐标​// 对像素进行任意二维仿射变换affine_trans_pixel(HomMat2D,Row,Col, // 输入像素坐标RowTrans,ColTrans) // 输出的变换像素坐标

应用案例
程序所用图片如下
在这里插入图片描述
完整代码

*获得窗口句柄
dev_get_window (WindowHandle)
*读取图片
read_image (Image, './affine.jpg')
*阈值处理
threshold (Image, Region, 0, 200)
*圆形开运算
opening_circle (Region, Region, 1.5) // 去毛刺
*连通区域处理
connection (Region, ConnectedRegions)
*选择给定形状的区域
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
*得到变换的中心点
area_center (SelectedRegions, _, Row, Column) // 提取当前区域中心及面积
*定义区域填充模式 fill为填充,margin为边缘绘制
dev_set_draw ('margin')*hom_mat2d_translate中的两个参数的意思是:Tx和Ty分别代表Row方向和Column方向的平移量
dev_display (Image)
** 在选择区域中心绘制十字叉
*创建一个初始化矩阵(即[1.0, 0.0, 0.0, 0.0, 1.0, 0.0])
hom_mat2d_identity (HomMat2DIdentity) 
*生成放射变换矩阵:平移
hom_mat2d_translate (HomMat2DIdentity,30, 150, HomMat2DTranslate)
*进行放射变换
affine_trans_region (Region, RegionAffineTrans, HomMat2DTranslate, 'nearest_neighbor')*hom_mat2d_rotate中的三个参数的意思是:旋转角度(逆时针为正,弧度制),旋转中心的row和column值
dev_display (Image)
** 创建一个沿着区域中心选择的矩阵
** Halcon中逆时针选择为正,正时针为负
hom_mat2d_rotate (HomMat2DIdentity, rad(90), Row, Column, HomMat2DRotate)
affine_trans_region (Region, RegionAffineTrans1, HomMat2DRotate, 'nearest_neighbor')*hom_mat2d_scale中的四个参数的意思是:Sx和Sy分别代表Row方向和Column方向的缩放系数,缩放中心的row和column值
dev_display (Image)
disp_cross (WindowHandle, Row, Column, 10, 40)
hom_mat2d_scale (HomMat2DIdentity, 4.0, 4.0, Row, Column, HomMat2DScale)
affine_trans_region (Region, RegionAffineTrans3, HomMat2DScale, 'nearest_neighbor')

平移运行结果
在这里插入图片描述
旋转运行结果
在这里插入图片描述
缩放运行结果
在这里插入图片描述
有时候,并不需要创建初始化矩阵也可以执行仿射变换,可以使用vector_angle_to_rigid算子生成放射变换矩阵。

vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)
程序所用图片如下
在这里插入图片描述
扣出图片中的车牌对进行旋转纠正,运行代码如下

* 1、把图像加载到Halcon中
read_image (Image, '3.jpg')
* 2、把图像灰度化处理
rgb1_to_gray (Image, GrayImage)
decompose3 (Image, RImage, GImage, BImage)
trans_from_rgb (RImage, GImage, BImage, HImage, SImage, VImage, 'hsv')
* 3、二值化【作用是什么?】[粗略筛选目标区域]【0~255】
threshold (GrayImage, Region, 0, 80)
* 4、区域砍断【作用什么?】【把需求的区域独立为一个单独区域方便后提取】
connection (Region, ConnectedRegions)
* 5、区域特征筛选区域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 350000, 355000)
* 填充区域孔洞
fill_up (SelectedRegions, RegionFillUp)
** 把找到车牌区域转换为矩形2
shape_trans (RegionFillUp, RegionTrans, 'rectangle2')
** 增加精度图,做图像腐蚀处理
* erosion_circle (RegionTrans, RegionErosion, 17)
erosion_rectangle1 (RegionTrans, RegionErosion, 35, 35)
* 6、把该区域图像进行锁定
reduce_domain (GrayImage, RegionErosion, ImageReduced)
* 7、抠出锁定图像
crop_domain (ImageReduced, ImagePart)
********************** 图像扶正操作**************************
** 仿射变换
get_domain (ImagePart, ImagePartRegion)
** 提取区域中心
area_center (ImagePartRegion, _, Row, Column)
** 提取区域角度(phi)【弧度值】
orientation_region (ImagePartRegion, Phi)
** 根据中心坐标及区域弧度值创建仿射变换矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
** 仿射变换图像
affine_trans_image (ImagePart, ImageAffineTrans, HomMat2D, 'constant', 'false')

运行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144176.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SOMEIP_ETS_117: SD_Entry_references_options_of_same_kind

测试目的: 验证DUT能够处理一个包含两种相同类型选项的SubscribeEventgroup消息,DUT可以选择拒绝订阅尝试或忽略该请求。 描述 本测试用例旨在确保DUT遵循SOME/IP协议,当接收到一个包含重复相同类型选项的SubscribeEventgroup消息时&#…

英飞凌 PSoC6 RT-Thread 评估板简介

概述 2023年,英飞凌(Infineon)联合 RT-Thread 发布了一款 PSoC™ 62 with CAPSENSE™ evaluation kit 开发板 (以下简称 PSoC 6 RTT 开发板),该开发套件默认内置 RT-Thread 物联网操作系统。PSoC 6 RTT 开…

window.open()地址栏隐藏问题解决方案

问题 使用window.open打开一个页面时,想要隐藏地址栏,但是无效。 window.open (test.html,newwindow,height100,width400,top0,left0,toolbarno,menubarno,scrollbarsno, resizableno,locationno, statusno)由于浏览器区别和安全问题,浏览器…

idea工具,一个项目开启多个项目运行窗口并且显示端口,service窗口

在多数情况下,通常会打开一个项目,里面有多个项目需要运行,这里教大家怎么开启多个窗口来查看项目运行状态,最终效果如下。 点击view -> Tool Windows-> Services 点击services之后,会在下面出现这个页面。 点击…

8.1差分边缘检测

基本概念 差分边缘检测是一种图像处理技术,用于检测图像中的边缘。边缘是指图像中灰度值发生显著变化的区域。差分边缘检测通常通过计算图像的梯度来实现,梯度反映了灰度值的变化率。在OpenCV中,可以使用不同的算子来检测不同方向的边缘&…

R18 NES 之SSB-less SCell operation for inter-band CA

在TR 21.918 Summary of Rel-18 Work Items 中可以看到SSB-less SCell operation for inter-band CA 是Network energy savings for NR 的一部分,其中还包括cell DTX/DRX 等等其他内容。 网络节能是 5G/NR 成功的关键,可以减少对环境的影响(温室气体排放)并节省运营成本。R…

Linux-vim使用

文章目录 一、什么是vim二、vim模式2.1 正常模式下的快捷键2.2 vim的基本操作2.3 vim末行模式命令2.4 vim操作总结 三、配置vim3.1 配置文件的位置3.2 常用配置选项,用来测试3.3 使用插件3.4 使用git 一、什么是vim vi/vim的区别简单点来说,它们都是多模式编辑器&am…

poi生成的ppt,powerPoint打开提示内容错误解决方案

poi生成的ppt,powerPoint打开提示内容错误解决方案 最近做了ppt的生成,使用poi制作ppt,出现一个问题。微软的powerPoint打不开,提示错误信息 通过xml对比工具发现只需要删除幻灯片的某些标签即可解决。 用的是XML Notepand 分析思路: 1.把poi生成的pptx用wps打开,正…

每日学习一个数据结构-红黑树

文章目录 什么是红黑树?示意图红黑树的特点红黑树的节点结构插入和删除操作旋转操作重新着色 红黑树的应用 树的构造过程插入新节点自平衡调整策略 示例 查询过程 什么是红黑树? 红黑树(Red-Black Tree)是一种自平衡的二叉查找树…

小程序体验版无法正常请求接口,开启 调试可以正常请求

在本地开发工具可以正常访问小程序,上传代码后打开体验版,界面无法请求接口,手机小程序打开调试模式可以正常访问。这可以查看下小程序后台是否设置了服务器域名以及业务域名 然后查看小程序开发工具 - 详情 - 项目配置 重新上传代码&#xf…

基于vue框架的宠物寻回小程序8g7el(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:发布人,宠物分类,宠物信息,接取人,接取信息,完成信息 开题报告内容 基于Vue框架的宠物寻回小程序开题报告 一、研究背景与意义 随着城市化进程的加快和人们生活水平的提高,宠物已成为许多家庭不可或缺的一员。它们不仅为生…

yolov5测试代码

一般源码的测试代码涉及很多文件,因项目需要写一个独立测试的代码。传入的是字典 import time import cv2 import os import numpy as np import torch from modules.detec.models.common import DetectMultiBackend from modules.detec.utils.dataloaders import …

工业交换机如何保证数据的访问安全

在现代工业自动化环境中,工业交换机作为关键的网络设备,扮演着数据传输和信息交互的重要角色。为了确保数据的访问安全,工业交换机不仅具备高效的转发性能,还集成了多层次的安全防护机制,以抵御各种潜在的网络威胁。 首…

输电线螺栓销钉缺失检测数据集

输电线螺栓销钉缺失检测数据集共1209张。标注文件为YOLO适用的txt格式以及VOC格式。可以直接用于模型训练。 类别:缺失和不缺失 包含yolov7tiny训练验证结果以及权重文件和数据集。 数据集亮点: 丰富的图像资源: 本数据集包含1209张高质量…

PHP及Java等其他语言转Go时选择GoFly快速快速开发框架指南

概要 经过一年多的发展GoFly快速开发框架已被一千多家科技企业或开发者用于项目开发,他的简单易学得到其他语言转Go首选框架。且企业版的发展为GoFly社区提供资金,这使得GoFly快速框架得到良好的发展,GoFly技术团队加大投入反哺科技企业和开…

268页PPT大型集团智慧工厂信息化顶层架构设计(2024版)

智能制造装备是高端制造业的关键,通过整合智能传感、控制、AI等技术,具备了信息感知、分析规划等智能化功能,能显著提升加工质量、效率和降低成本。该装备是先进制造、信息、智能技术的深度融合。其原理主要包括物联网集成、大数据分析与人工…

Windows Server2016多用户登录破解

使用场景 很多时候,公司开发和测试运维会同时登录同一台windows服务器进行查询、更新、维护等操作,本文就来介绍一下Windows2016配置多人远程桌面登录实现,感兴趣的可以了解一下。 操作流程 (1)首先桌面需要安装远程…

详解x86汇编指令:test edx, edx

前言 有不少新手在学习汇编指令的时候可能会被网上一些人误导(很显然我就被误导了),认为test与cmp指令相同,都是在比较两个值是否相同的,那么来看这两个指令: test edx,edx jne 0040BCA3jne 指令为不等于0…

18.DHT11编程案例

温湿度传感器 产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通 空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗…

技术美术百人计划 | 《4.1 Bloom算法》笔记

1. Bloom算法介绍 1.1. Bloom效果 实际拍摄照片与游戏画面Bloom效果对比,Bloom模拟了真实世界图片的效果 Bloom流程图 1.2. 前置知识:HDR和LDR,高斯模糊 1.2.1. HDR和LDR LDR颜色范围太少,精度不够,往往会存在颜色精…