Halcon 学习笔记五:几何定位+仿射变换+测量
Halcon 学习笔记五:几何定位+仿射变换+测量
- 定位流程
- 例子一
- 例子二(药片的定位)
- 例子三(充电宝定位)
- 例子四(车牌定位)
- 其他
定位流程
- blob分析
- 模板匹配 (仿射变换成标准的形状)
- 识别
例子一
打开这个关于仿射变换的例子
在窗口中画一个图形,左键画,右键确认
draw_region (Region, WindowID)
获得单位矩阵
hom_mat2d_identity (HomMat2DIdentity)
获得旋转矩阵
hom_mat2d_rotate (HomMat2DIdentity, -0.3, 256, 256, HomMat2DRotate)
可以看到-0.3 是旋转角,如果是正的话,就是逆时针旋转的。负的话就是顺时针旋转,
两个256分别是x,y的坐标点(旋转中心)。
通过旋转角和旋转中心可以得到旋转矩阵
图像缩放
x,y都放大1.5倍,
256,256是固定点
点(Px,Py)是变换的固定点,即当使用HomMat2DScale变换时,该点保持不变。为了获得这种行为,首先向输入变换矩阵添加平移,将固定点移动到全局坐标系的原点。然后,添加缩放,最后是将固定点移回其原始位置的平移。
hom_mat2d_scale (HomMat2DRotate, 1.5, 1.5, 256, 256, HomMat2DScale)
进行放射变换
affine_trans_region (Region, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')
最后可以看到变换后的结果
dev_clear_window ()
dev_set_draw ('margin')
dev_set_color ('red')
dev_display (Region)
dev_set_color ('green')
dev_display (RegionAffineTrans)
完整代码
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowID)
dev_set_color ('black')
* Draw with the mouse an arbitrary region into the window
draw_region (Region, WindowID)
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_rotate (HomMat2DIdentity, -0.3, 256, 256, HomMat2DRotate)
hom_mat2d_scale (HomMat2DRotate, 1.5, 1.5, 256, 256, HomMat2DScale)
affine_trans_region (Region, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')
dev_clear_window ()
dev_set_draw ('margin')
dev_set_color ('red')
dev_display (Region)
dev_set_color ('green')
dev_display (RegionAffineTrans)
补充
最终要的就是 旋转 、平移、缩放
平移 hom_mat2d_translate
旋转 hom_mat2d_rotate
缩放 hom_mat2d_scale
例子二(药片的定位)
打开示例,药片的定位
思路就是 先blob分析,然后计算区域的角度,然后仿射成标准的位置
首先是读取图片,打开窗口,设置字体,和draw方式,线宽等
dev_close_window ()
dev_update_off ()
read_image (ImageOrig, 'blister/blister_reference')
dev_open_window_fit_image (ImageOrig, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
获取BGR中的第一个通道,就是B对应的单通道图像
(halcon中的三通道图像是默认BGR的)
access_channel (ImageOrig, Image1, 1)
接下来是二值化和获取轮廓(凸性)
threshold (Image1, Region, 90, 255)
shape_trans (Region, Blister, 'convex')
获得该区域的角度(与水平的夹角)
该运算符基于椭圆轴,将区域看成一个椭圆,椭圆的长轴与极轴的夹角就是这个角度Phi
orientation_region (Blister, Phi)
可以看到是负的
获得区域的中心坐标
area_center (Blister, Area1, Row, Column)
利用 起始中心点坐标和角度 到 目标中心点坐标和角度 生成 仿射矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
进行仿射变换
affine_trans_image (ImageOrig, Image2, HomMat2D, 'constant', 'false')
例子三(充电宝定位)
由于图片不是正的,导致测量比较麻烦
所以我们可以通过仿射变换,使得图像变正,就可以使用统一的直线测量线段了
dev_close_window ()
read_image (Image, 'C:/Users/xuheding/Desktop/图片/2.png')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 185, 247)
opening_rectangle1 (Regions, RegionOpening, 15, 15)
fill_up (RegionOpening, RegionFillUp)
* 最小外接矩形
shape_trans (RegionFillUp, RegionTrans, 'rectangle2')
* 获得角度
orientation_region (RegionTrans, Phi)
* 获得区域中心坐标
area_center (RegionTrans, Area, Row, Column)
* 获得仿射矩阵
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(180), HomMat2D)
* 仿射变换
affine_trans_image (GrayImage, ImageAffineTrans, HomMat2D, 'constant', 'false')
最后选择,助手->测量助手
绘制直线
设置参数后
点击代码生成
例子四(车牌定位)
将图像转为灰度图后,可以点击助手->OCR
1.先画ROI 2.输入希望读取的文本 3.点击字符是暗背景上的亮字符(因为这张图的缘故) 4.点击应用快速设置即可
1.首先读取图片,转为灰度图,然后阈值分割,开操作(去噪),计算连通域,选择特征形状
2.要排序 区域,因为后序要识别
3.载入ocr分类器(0到9,A到Z),进行预测(由于该分类器的原因,要输入黑字白底的,但是车牌是白字黑底的,所以要翻转一下,传入分类器中)
read_image (Image, 'C:/Users/xuheding/Desktop/图片/3.png')
rgb1_to_gray (Image, GrayImage)dev_display (GrayImage)
threshold (Image, Regions, 100, 211)
opening_rectangle1 (Regions, RegionOpening, 3, 3)
connection (RegionOpening, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['width','height','rectangularity','column'], 'and', [0,35.78,0.20092,254.13], [63.3,71.01,0.59358,725.69])
sort_region (SelectedRegions, SortedRegions, 'character', 'true', 'row')read_ocr_class_mlp ('DotPrint_0-9A-Z_NoRej.omc', OCRHandle)
invert_image (GrayImage, ImageInvert)
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
可以看到 都识别到了
其他
测量助手使用
点击
可以通过绘制线段,检测直线
变换设置postive,选择黑到白的变化
设置negative则是,白到黑
设置all则是,都要
可以点击显示轮廓线,来显示轮廓
Halcon 学习笔记五:几何定位+仿射变换+测量相关推荐
- Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例
Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例 一.基本概念 基本流程为: 获取图像 对图像进行灰度值标定 (针对相机获取的图像灰度和输入能量之间的非线性关系, ...
- Halcon学习笔记(五)几何定位+仿射+车牌识别
定位 Blob分析 模板匹配 仿射 使用单位矩阵求仿射矩阵 示例:affine_trans_region.hdev 单位矩阵 hom_mat2d_identity (HomMat2DIdentity) ...
- Halcon基于形状的几何定位函数说明
Halcon基于形状的几何定位函数说明 1. create_shape_model(Template: : //reduce_domain后的模板图像 NumLevels,//金字塔的层数,可设为&q ...
- Halcon 学习笔记八:颜色识别
Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...
- Halcon学习笔记(三)---数据类型
Halcon学习笔记(三)---数据类型 halcon只能在单独行进行注释,不能在语句后面进行注释. 1.tuple(元组,重数) 赋值符号":=" tuple算子: (1)变量定 ...
- Halcon学习笔记:select_points_object_model_3d(3D对象模型阀值分割)
Halcon学习笔记:select_points_object_model_3d 3D对象模型阀值分割 This example program shows how to use the operat ...
- 【AngularJs学习笔记五】AngularJS从构建项目开始
为什么80%的码农都做不了架构师?>>> #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...
- Halcon学习笔记:3D_coordinates(3D标定)
Halcon学习笔记:3D_coordinates(3D标定) 欢迎有兴趣的朋友一起学习,代码理解注释有问题的可以告诉我,一起讨论,共同进步. *初始化程序,dev_close_window() *关 ...
- 一、HALCON学习笔记(容器液位缺陷检测)
一.HALCON学习笔记(容器液位缺陷检测) * In this example a fill level check for the * pharmaceutical industry is dem ...
最新文章
- 浪漫的形式有100种,单身的就1种!
- rsyslog日志管理+LogAnalyzer
- vue 中的el表达式_Vue中vue.filter()的使用方法介绍(过滤)
- java 批量增删改_java使用JDBC连接mysql并且进行批量增删改操作
- 前端学习(2345):项目目录简单介绍
- c语言循环字符,字符串 非暴力for循环法(内附C语言代码)
- python如何输入多行数据合并_python 实现将txt文件多行合并为一行并将中间的空格去掉方法...
- hibernate 根据用户名获取用户对象_Mybatis 和 Hibernate 持久层框架之间的区别是啥?...
- 虚函数virtual
- 使用Pack200压缩你的代码
- Eclipse自动生成作者、日期注释等功能设置
- xna中的截屏操作处理
- 2012年参加油田象棋比赛的几盘棋
- PCI Geomatica 操作视频专辑
- 公司与公司保密协议范本
- vscode安装uweb_桌面应用|在Ubuntu中安装Visual Studio Code
- H5案例分享—你的数学是语文老师教的吗?
- 小学生能学计算机编程是什么,小学生为什么要学编程?小学生学习编程怎么样?...
- SafetyNet 漏洞rootutils 利用
- 嵌入式硬件开发基础(持续更新)
热门文章
- linux进程tty,linux下kill tty
- 200行代码如何实现人脸识别开锁应用?
- FFMPEG相关功能命令(转载)
- linux lts版本的区别,什么是Linux 发行版的 LTS 版本?
- 在Linux上安装Gearman及配置使用Gearman的PHP扩展环境
- 演讲比赛流程管理系统
- 01-AI矢量图和位图
- cas20205-29-2|2,3,3-三甲基-1-丙基-3H-吲哚碘|2,3,3-trimethyl-1-propylindol-1-ium,iodide齐岳生物
- echo 框架中的 middleware 设计深度解析
- 感量越大抑制频率约低_磁环抗干扰选择