仿射变换学习
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轴正方向的弧度)…...
基于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 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中…...
【Linux】vim拒绝服务安全漏洞修复
根据国家信息安全漏洞共享平台于2023年2月19日发布的安全漏洞通知,Linux系统自带的vim编辑器存在两个高危安全漏洞(CNVD-2023-09166、CNVD-2023-09647),攻击者可以利用该漏洞发起拒绝服务攻击,并可能运行(恶…...
moveit 2源码编译
文章目录前言下载编译过程创建开发环境拉取源代码更新rosdep下载安装moveit 2依赖包编译源码输出结果总结前言 本文用来记录moveit 2从源码编译的全流程。 本机环境: 系统:debian 11 ros版本:ros2 humble 处理器:intel i7 内存&a…...
2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A模块(4)
目录 二、竞赛注意事项 (本模块20分) 一、项目和任务描述: 二、服务器环境说明 三、具体任务(每个任务得分以电子答题卡为准) A-1任务一 登录安全加固(Windows) 1.密码策略 a.更改或创建…...
微服务保护之sentinel熔断器
文章目录 目录 文章目录 前言 一、解决微服务雪崩的问题 二、使用步骤 三、熔断器的使用 3.1 限流规则 3.1.1流控模式 3.1.2流控效果 3.2 隔离和降级 3.2.1 隔离 3.2.2 降级 四、sentinel规则持久化 总结 前言 在基于 SpringCloud 构建的微服务体系中,服务间的调用…...
电动打气泵方案开发--鼎盛合PCBA方案
开车的每一个司机都必须要知道一个事情——定期检查轮胎气压是否正常,因为轮胎胎压不足会导致轮胎过早磨损,从而造成容易发生道路交通事故,并且对汽车的操控性和牵引力带来不良影响,甚至会出现爆胎或汽车失控等极其危险的事故。电…...
第十三届蓝桥杯省赛 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项目实战三(djangobootstrap实现增删改查)进阶分页》 知识点: 使用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. 上面是官方给的定义,ViewModel 类是业务逻辑或屏幕级状态持有者。 一、业务逻辑持有者 在此之前,无论是MVC模式,还是MVP模式,在视图层,都会…...
追梦之旅【数据结构篇】——详解C语言动态实现顺序表
详解C语言动态实现顺序表~😎前言🙌顺序表概念及结构🙌功能函数的具体实现分析:🙌尾插函数具体实现:尾删函数具体实现:头插函数具体实现:头删插函数具体实现:任意插函数具…...
xss基础
目录标题一、XSS的原理二、XSS漏洞分类1、反射型xss2、存储型XSS3、基于DOM的XSS三、XSS漏洞的危害及验证四、XSS漏洞的黑盒测试五、XSS漏洞的白盒测试一、XSS的原理 跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(…...
移动WEB开发二、流式布局
零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…...
分享在线预约系统制作步骤_在线预约链接怎么做
在微信小程序上进行在线预约,不管是商家还是顾客,都可以自由选择时间,顾客还可以通过预约小程序,了解到所选服务的详情和功能特色,不必等到去店内听介绍,顾客能节省等候时间,商家能解放招待人力…...
【每日一题Day125】LC1326灌溉花园的最少水龙头数目 | 动态规划 贪心
灌溉花园的最少水龙头数目【LC1326】 在 x 轴上有一个一维的花园。花园长度为 n,从点 0 开始,到点 n 结束。 花园里总共有 n 1 个水龙头,分别位于 [0, 1, ..., n] 。 给你一个整数 n 和一个长度为 n 1 的整数数组 ranges ,其中 …...
C# FFmpeg推流Vlc.DotNet拉流优化参数
FFmpeg是流媒体开源神器,视频转换、剪裁包括推流,无所不能,很多系统都是基于其开发的。拉流可以用FFplay,但是不利于集成到自己的代码中,因此拉流选择了Vlc.DotNet。 在使用中,仅使用默认参数,…...
pnpm v8版本升级变化关注点(前瞻速攻版)
前言 pnpm v8.0.0-alpha.0 版本已经发布,包含少量变化,但其中还是有令人在意的点的。 本文将默认读者拥有大部分 pnpm v7 版本的知识储备,进行 v8 版本的前瞻速攻。 安装方法 目前通过指定 Tag 方式可以安装 v8 alpha 版: npm…...
Python基础-环境安装
Python安装1.下载PythonPython网址:https://www.python.org/进入Python官网,点击Downloads,选择自己对应的操作系统(此处以Windows为例)在左侧的稳定发行版中,选择一个3.5版本以上的,然后点击对…...
重载、重写、重构概念辨析
首先,重载、重写、重构都表现为方法名相同 重载 重载(overload),表示同一类的方法之间的关系,至少有以下其中一种情况 参数个数不同参数类型不同参数顺序不同 注意,返回值类型不同不能作为重载依据 重…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
