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

仿射变换学习

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 ():得到一个缩放变换矩阵
 

* 得到充电头区域与x轴正方形的弧度

orientation_region (Regions, Phi)

* 得到充电头的面积和中心点坐标

area_center (Regions, Area, Row, Column)

* 得到一个刚性仿射的变换矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)

* 根据旋转的变换矩阵进行仿射变换
affine_trans_region (Regions, RegionAffineTrans, HomMat2D, 'nearest_neighbor')

* 得到一个单位矩阵
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')
 

*对匹配到的中心与模板的中心求取映射关系:仿射变换 
    vector_angle_to_rigid(Row_model,Column_model,rad(0),Row,Column,Angle,HomMat2D)
    *根据映射关系求出模板对应的图像范围
    affine_trans_region(ROI_region,RegionAffineTrans,HomMat2D,'nearest_neighbor')
 

模板匹配
*读取并显示图像;
*确定模板ROI及检测ROI;
*创建模型;
*匹配模板;
*ROI仿射变换,得到ROI位置


dev_update_off()
dev_close_window ( )

*#读取整个文件夹的图像
*1 列出指定路径下的文件
list_files ('./Files', 'files', Files)
tuple_regexp_select (Files, '\\.jpg$', Files)
read_image (Image, Files[0])

dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)

*2 根据模板形状创建相应区域
read_image (T, './moban/moban_1.jpg')

get_image_size (T, Width, Height)
dev_set_color ('red')

*圆形
gen_circle (shape, 2093, 1630, 1773)
*矩形
*gen_rectangle1 (shape, 164.5, 126.5, 323, 476.5)

*多边形轮廓
*dev_set_color ('green')
*dev_set_line_width (3)
*坐标数组
*rows1:=[20,100,100,20,20]
*cols1:=[20,20,250,250,20]
*radius:=[20,20,20,20,20]
*rows2:=[20,20,100,100,20]
*cols2:=[320,550,550,320,320]
*带圆角的多边形轮廓
*gen_contour_polygon_rounded_xld (Contour, rows1, cols1, radius, 1)
*不带圆角的多边形轮廓
*gen_contour_polygon_xld (Contour1, rows2, cols2)
*生成十字形状
*gen_cross_contour_xld( : Cross : Row, Col, Size, Angle :)


*3 将模板从所在区域分离
* read_image (image, 'D:/0halcon/demo/20220425/2.jpg')*可以选择一个文件
*opening_circle (Image, RegionOpening, 3.5)
reduce_domain (Image, shape, ImageReduced)

*4 创建模板
*圆用create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
create_shape_model (ImageReduced, 4, rad(0), rad(360), 'auto', 'auto', 'use_polarity', 30, 10, ModelID)
*算子原型:create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
*–Template :用于创建模板的图像,是原图的模板ROI区域;
*–NumLevels:金字塔层的最大层数;
*–AngleStart:模板的最小旋转角度,以弧度为单位;
*–AngleExtent:旋转角度范围,必须≥0,以弧度为单位;如果超出角度范围,则模型搜索不到
*–AngleStep:角度步长,以弧度为单位;
*–Optimization:生成模型的优化方法;
*–Metric:模板匹配的条件,在模板与图像亮暗发生反转时可使用;
*–Contrast:创建模型时,模型点的对比度;
*–MinContrast :在搜索的图像中,搜索对象的最小对比度,必须<Contrast;
*–ModelID:模型的句柄。

*5 设置原点
area_center (shape, Area, Row1, Column1)
set_shape_model_origin (ModelID, Row1, Column1)
*set_shape_model_origin (ModelID, -Row, -Column)

*6 获取初始模板轮廓
get_shape_model_contours (ModelContours, ModelID, 1)

dev_set_color ('red')
dev_set_draw ('margin')
dev_display (ModelContours)
 
*7 匹配模板 
for Index := 0 to |Files|-1 by 1
    read_image (Image, Files[Index])
    *7.1在另一幅图中查找对应区域  //进行模板匹配找模板
    *开运算
    *opening_rectangle1 (Image, RegionOpening, Width, Height)

    find_shape_model (Image, ModelID, 0, rad(360), 0.4, 1, 0.5, 'least_squares', 0, 0.7, Row3, Column3, Angle, Score)
    *算子原型:find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, *NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)*
    *– Image :输入图像;
    *–ModelID:模型的句柄;
    *–AngleStart:模板的最小旋转角度,以弧度为单位;
    *–AngleExtent:旋转角度范围,必须≥0,以弧度为单位;如果超出角度范围,则模型搜索不到
    *–MinScore:要搜索到的模型实例的最小得分,如果低于此分数,则搜索不到;
    *–NumMatches:要搜索到的模型实例的个数;
    *–MaxOverlap:要找到的模型实例的最大重叠;
    *–SubPixel:确定找到的目标是否使用亚像素精度提取;
    *–NumLevels:搜索过程中使用的金字塔级别的数量 ;
    *–Greediness :搜索启发式的“贪婪度”,(0:安全但缓慢;1:快,但可能匹配不到)
    *–Row:找到的模型实例的行坐标,坐标值是找到模板的原点在图像坐标系中的行坐标;
    *–Column:找到的模型实例的列坐标,坐标值是找到模板的原点在图像坐标系中的列坐标;
    *–Angle:找到的模型实例的角度;
    *–Score: 找到的模型实例的分数。
    
    *7.2坐标转行,得到模板的ROI和检测ROI,确定匹配位置的轮廓
    *7.2.1 先获取模板轮廓,获取轮廓在(0,0)位置;
    *7.2.2:求模板匹配实例---的旋转矩阵;    
    *7.2.3:利用仿射变换---得到匹配实例--轮廓;    
    *7.2.4:轮廓转成区域;
    if (Row3>=0) //如果找到模板数>0
        *显示找到的--模板轮廓
        dev_display_shape_matching_results (ModelID, 'red', Row3, Column3, Angle, 1, 1, 0)
        
        *循环遍历每个查到的实例
        for I := 0 to |Score| - 1 by 1
            
            vector_angle_to_rigid (Row3, Column3, Angle, Row3, Column3, Angle, HomMat2D1)
            *算子原型:vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)
            *–Row1:原始点的行坐标;
            *–Column1:原始点的列坐标;
            *–Angle1:原始点的角度;
            *–Row2:变换点的行坐标;
            *–Column2:变换点的列坐标;
            *–Angle2:变换点的角度;
            *–HomMat2D:输出的变换矩阵。
            
            *给旋转矩阵添加缩放信息
            hom_mat2d_scale (HomMat2D1, 2, 2, Column3, Row3, HomMat2DScale)
            
            *通过初始模板和旋转矩阵运算---得到模板实例轮廓
            affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DScale)
            
            *轮廓转区域
            gen_region_contour_xld (ContoursAffineTrans, Region, 'filled')
            
            *得到匹配图像的轮廓线
            affine_trans_contour_xld (ContoursAffineTrans, ContoursAffineTrans1, HomMat2DScale)
            affine_trans_region (Region, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')

        endfor
        *dev_set_color ('red')
        *dev_display (RegionAffineTrans)
   
        
     endif
     
endfor
  
**获取指定轮廓上点的像素坐标
*get_contour_xld (ContoursAffineTrans, Row1, Col)
 

 
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Car, 'D:/Camera/test/image/car3.jpg')
decompose3 (Car, R, G, B)
trans_from_rgb (R, G, B, H, S, V, 'hsv')
* emphasize (S, ImageEmphasize, 7, 7, 5)
invert_image (S, ImageInvert)
threshold (ImageInvert, Regions1, 0, 137)
fill_up (Regions1, RegionFillUp1)
connection (RegionFillUp1, ConnectedRegions2)
select_shape (ConnectedRegions2, SelectedRegions1, 'area', 'and', 14935.1, 74489.8)
shape_trans (SelectedRegions1, RegionTrans, 'convex')
area_center (RegionTrans, Area, Row, Column)
orientation_region (RegionTrans, Phi)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D)
*  affine_trans_image (ImageReduced, ImageAffineTrans, HomMat2D, 'constant', 'false')
 affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
 
 affine_trans_image (Car, CarAffineTrans, HomMat2D, 'constant', 'false')
 
 reduce_domain (CarAffineTrans, RegionAffineTrans, ImageReduced)
 
 rgb1_to_gray (ImageReduced, GrayImage)
 
 
threshold (GrayImage, Regions, 62, 249)
 
connection (Regions, LetterRegions)
 
opening_rectangle1 (LetterRegions, RegionOpening, 4, 4)
 
 
select_shape (RegionOpening, SelectedRegions, ['area','height'], 'and', [343.12,62], [2000,88.257])
 
sort_region (SelectedRegions, SortedRegions, 'character', 'true', 'column')
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
invert_image (CarAffineTrans, CarImageInvert)
do_ocr_multi_class_mlp (SortedRegions, CarImageInvert, OCRHandle, Class, Confidence)
disp_message (WindowHandle, Class, 'window', 12, 12, 'black', 'true')
 

相关文章:

仿射变换学习

affine_trans_(iamge,region,xld):仿射变换-作用到iamge,region、xld等都可以 vector_angle_to_rigid():得到一个刚性仿射变换矩阵 orientation_region():得到指定区域的弧度(与x轴正方向的弧度&#xff09…...

基于java的爬虫框架webmagic基本使用

简单记录一下java项目实现网页爬取数据的基本使用. 需要引入的依赖 <dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.3</version></dependency><dependency><grou…...

Python每日一练(20230221)

目录 1. 不同路径 II 2. 字符串转换整数 (atoi) 3. 字符串相乘 1. 不同路径 II 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为“Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中…...

【Linux】vim拒绝服务安全漏洞修复

根据国家信息安全漏洞共享平台于2023年2月19日发布的安全漏洞通知&#xff0c;Linux系统自带的vim编辑器存在两个高危安全漏洞&#xff08;CNVD-2023-09166、CNVD-2023-09647&#xff09;&#xff0c;攻击者可以利用该漏洞发起拒绝服务攻击&#xff0c;并可能运行&#xff08;恶…...

moveit 2源码编译

文章目录前言下载编译过程创建开发环境拉取源代码更新rosdep下载安装moveit 2依赖包编译源码输出结果总结前言 本文用来记录moveit 2从源码编译的全流程。 本机环境&#xff1a; 系统&#xff1a;debian 11 ros版本&#xff1a;ros2 humble 处理器&#xff1a;intel i7 内存&a…...

2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A模块(4)

目录 二、竞赛注意事项 &#xff08;本模块20分&#xff09; 一、项目和任务描述&#xff1a; 二、服务器环境说明 三、具体任务&#xff08;每个任务得分以电子答题卡为准&#xff09; A-1任务一 登录安全加固&#xff08;Windows&#xff09; 1.密码策略 a.更改或创建…...

微服务保护之sentinel熔断器

文章目录 目录 文章目录 前言 一、解决微服务雪崩的问题 二、使用步骤 三、熔断器的使用 3.1 限流规则 3.1.1流控模式 3.1.2流控效果 3.2 隔离和降级 3.2.1 隔离 3.2.2 降级 四、sentinel规则持久化 总结 前言 在基于 SpringCloud 构建的微服务体系中&#xff0c;服务间的调用…...

电动打气泵方案开发--鼎盛合PCBA方案

开车的每一个司机都必须要知道一个事情——定期检查轮胎气压是否正常&#xff0c;因为轮胎胎压不足会导致轮胎过早磨损&#xff0c;从而造成容易发生道路交通事故&#xff0c;并且对汽车的操控性和牵引力带来不良影响&#xff0c;甚至会出现爆胎或汽车失控等极其危险的事故。电…...

第十三届蓝桥杯省赛 C++ A 组 F 题、Java A 组 G题、C组 H 题、Python C 组 I 题——青蛙过河(AC)

目录1.青蛙过河1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围7.原题链接2.解题思路Ac_code1.C2.Java1.青蛙过河 1.题目描述 小青蛙住在一条河边, 它想到河对岸的学校去学习。小青蛙打算经过河里 的石头跳到对岸。 河里的石头排成了一条直线, 小青蛙每次跳跃…...

django项目实战四(django+bootstrap实现增删改查)进阶时间控件

接上一篇《django项目实战三&#xff08;djangobootstrap实现增删改查&#xff09;进阶分页》 知识点&#xff1a; 使用bootstrap-datepicker实现时间控件 一、优化layout.html模版 主要新增2个块 {% block css %}{% endblock %}{% block js %}{% endblock %} {% load static…...

Jetpack之ViewModel

The ViewModel class is a business logic or screen level state holder. 上面是官方给的定义&#xff0c;ViewModel 类是业务逻辑或屏幕级状态持有者。 一、业务逻辑持有者 在此之前&#xff0c;无论是MVC模式&#xff0c;还是MVP模式&#xff0c;在视图层&#xff0c;都会…...

追梦之旅【数据结构篇】——详解C语言动态实现顺序表

详解C语言动态实现顺序表~&#x1f60e;前言&#x1f64c;顺序表概念及结构&#x1f64c;功能函数的具体实现分析&#xff1a;&#x1f64c;尾插函数具体实现&#xff1a;尾删函数具体实现&#xff1a;头插函数具体实现&#xff1a;头删插函数具体实现&#xff1a;任意插函数具…...

xss基础

目录标题一、XSS的原理二、XSS漏洞分类1、反射型xss2、存储型XSS3、基于DOM的XSS三、XSS漏洞的危害及验证四、XSS漏洞的黑盒测试五、XSS漏洞的白盒测试一、XSS的原理 跨站脚本攻击XSS&#xff08;Cross Site Scripting&#xff09;&#xff0c;为了不和层叠样式表&#xff08;…...

移动WEB开发二、流式布局

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…...

分享在线预约系统制作步骤_在线预约链接怎么做

在微信小程序上进行在线预约&#xff0c;不管是商家还是顾客&#xff0c;都可以自由选择时间&#xff0c;顾客还可以通过预约小程序&#xff0c;了解到所选服务的详情和功能特色&#xff0c;不必等到去店内听介绍&#xff0c;顾客能节省等候时间&#xff0c;商家能解放招待人力…...

【每日一题Day125】LC1326灌溉花园的最少水龙头数目 | 动态规划 贪心

灌溉花园的最少水龙头数目【LC1326】 在 x 轴上有一个一维的花园。花园长度为 n&#xff0c;从点 0 开始&#xff0c;到点 n 结束。 花园里总共有 n 1 个水龙头&#xff0c;分别位于 [0, 1, ..., n] 。 给你一个整数 n 和一个长度为 n 1 的整数数组 ranges &#xff0c;其中 …...

C# FFmpeg推流Vlc.DotNet拉流优化参数

FFmpeg是流媒体开源神器&#xff0c;视频转换、剪裁包括推流&#xff0c;无所不能&#xff0c;很多系统都是基于其开发的。拉流可以用FFplay&#xff0c;但是不利于集成到自己的代码中&#xff0c;因此拉流选择了Vlc.DotNet。 在使用中&#xff0c;仅使用默认参数&#xff0c;…...

pnpm v8版本升级变化关注点(前瞻速攻版)

前言 pnpm v8.0.0-alpha.0 版本已经发布&#xff0c;包含少量变化&#xff0c;但其中还是有令人在意的点的。 本文将默认读者拥有大部分 pnpm v7 版本的知识储备&#xff0c;进行 v8 版本的前瞻速攻。 安装方法 目前通过指定 Tag 方式可以安装 v8 alpha 版&#xff1a; npm…...

Python基础-环境安装

Python安装1.下载PythonPython网址&#xff1a;https://www.python.org/进入Python官网&#xff0c;点击Downloads&#xff0c;选择自己对应的操作系统&#xff08;此处以Windows为例&#xff09;在左侧的稳定发行版中&#xff0c;选择一个3.5版本以上的&#xff0c;然后点击对…...

重载、重写、重构概念辨析

首先&#xff0c;重载、重写、重构都表现为方法名相同 重载 重载&#xff08;overload&#xff09;&#xff0c;表示同一类的方法之间的关系&#xff0c;至少有以下其中一种情况 参数个数不同参数类型不同参数顺序不同 注意&#xff0c;返回值类型不同不能作为重载依据 重…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...