halcon小结
持更
应用范围
(罗列自官方帮助文档,以后有空了按照需求展开叙述)
1. 安全系统
2. 表面检测
3. 定位
4. 二维测量比较
5. 二维码识别
6. 二维位置定位
7. 二维物体识别
8. 光学字符识别
9. 机器人视觉
10. 交通监视和驾驶辅助系统
11. 三维测量比较
12. 三维物体定位
13. 三维物体识别
14. 特征检测
15. 完整性检测
16. 颜色检测
17. 一维码识别
18. 印刷检测
方法
Blob分析
对前景/背景分离后的二值图像,进行连通域提取和标记。核心思想是将一块区域内 灰度突变 的范围找出来。
threshold, connection, union, select_shape
这个用得太多了,就不举例了。Hough转换
霍夫变换,一种使用参数估计做特征提取的技术。结合边缘检测使用,有的规则的边缘,比如近似直线或者圆可能有部分小区域被挡住了,使用霍夫变换可以估计出边缘实际的形状。
举例:
这张图上面的边缘附近有一些特别亮的区域,导致这个边缘检测到的结果会与实际我们关心的边缘不一致,使用边缘检测结合霍夫变换,可以估计出上边缘的实际情况,近似的是下图中的这条红线:
使用霍夫变换得到边缘线的同时,还可以得到边缘线相对于垂直方向的角度。算子多以hough开头
边缘提取
- 像素精度
sobel_amp:使用sobel算法求边界,这里用来求边界的卷积模板是已经定义好的3*3模板,如果给大于3的模板尺寸,会自动先用S-2的其他定义的模板对图像做光滑处理。这里求边缘时做卷积在对应位置乘积之后还有一些操作,可选;
derivate_gauss:通过求导求边缘,这里的求导方法有多种可选,有的可以用来求垂直边缘,有的求水平边缘,有的都能求出来
edges_image:使用Deriche,Lanser,Shen或者Canny过滤器求边缘,网上关于这些算法到底是怎么回事的介绍几乎找不到,只能知道有这些选项
edges_color,frei_amp,kirsch_amp, laplace,prewitt_amp,roberts,robinson_amp等等,这些不同的求边缘算法主要在定义的卷积核不同上。
举例:
- 亚像素精度,精度上比像素精度更高一些,不罗列了,算子名称中多包含contours,sub pix,xld
edges_sub_pix:使用Deriche,Lanser,Shen或者Canny过滤器求边缘
- 像素精度
变化的模板
1. create_variation_model相关算子。
使用没有问题的图片创建模板,或者使用一些没有问题的图片训练模板,再在目标图像上找匹配,可以用于识别单一的变化不大的物体,能够准确的识别出匹配的图像,通过与模板图像做比对,能够找出缺陷。
直接拿halcon中的图举例:
2. create_shape_model/create_scaled_shape_model相关算子。
3. create_metrology_model相关算子。定位
主要还是结合图片上一些已知特征做特征筛选来做定位,或者通过模板匹配来做定位对焦测距
利用多倍聚焦提取深度 depth_from_focus,同一物体不同聚焦下的图组成的多通道图片提取深度(是否可以用在对理论上是同一平面的物体检测凹陷或凸起上?这个模型可能只是一个估计出来的模型,是否能够发现细小的凹陷或凸起?需要解决的问题还有怎样一次性快速获取到不同倍数聚焦下的图片,感觉上有点类似于3d建模)
多目立体视觉
需要在摄像机标定得到的参数的基础上做。
通过不完全相同的角度拍摄的多张标定后的图片重建3d表面,reconstruct_surface_stereo二维码识别
用于二维图像上的二维码识别和解析,支持五种主流的编码和3种GS1编码模式的二维码。分类器
- 根据内部已经定义好的特征(6大类:颜色,灰度,区域,旋转,缩放,纹理),自动选择合适的特征做训练,训练的对象是属于某一种类的那个区域的特征(相关算子:get_feature_names,calculate_features,create_class_train_data,add_sample_class_train_data,select_feature_set_knn,classify_class_knn等)
- 使用各种分类器做分类,需要把模板图片自己分好类,用模板图片做训练,各种分类器的使用都是差不多的,都是create_class_xxx,add_samples_image_class_xxx, train_class_xxx, classify_image_class_gmm。
- 二维多通道图像根据两个通道的特征结合起来基于二维直方图做分类
- 两张单通道图像基于二维直方图做聚类分割
光度立体法
用多张不同光源拍摄的同一物体的图片重建物体表面,通过对重建表面后获取到的梯度图像或者反射图像再处理能够相对容易的找出凹凸的缺陷
photometric_stereo
更适合用在表面漫反射的物体上,不适合表面有较强镜面反射的物体上。光学字符检测和识别
- 自己训练并检测需要识别的字符:create_ocv_proj, train_ocv_proj, do_ocv_simple
- 使用各种分类器做光学字符检测:create_ocr_class_xxx, write_ocr_trainf, append_ocr_trainf, train_ocr_class_xxx
- 根据已有的模型直接检测图片种的字符,已有的模型有多种可选:create_text_model_reader, find_text
- 直接做字符检测:select_characters
基于样本的识别
通过一些图片作为样本训练之后再识别同类物体,每张图片是一种物体
create_sample_identifier, add_sample_identifier_object_info, prepare_sample_identifier, train_sample_identifier, apply_sample_identifier, get_sample_identifier_object_info激光三角测量
运用线结构光,举的例子代码太长了,还待研究。。。几何测量
角度测量,图上的各种距离测量(这个可能可以用于测量缺陷长度)几何转换
缩放,旋转,扭曲,平移快速傅里叶变换
将图片转换到频率域上,使用特定的过滤器做卷积,达到某种效果。可能用到的滤波器:平滑滤波器(gauss filter, binomial filter可以用来抑制细小的噪声),带通滤波器(bandpass filter允许特定的波形通过)等。
在频率域上做处理,去除除了中心点之外的高亮点可以去除图象上的噪声。
处理前后:
处理前频谱图:
处理后频谱图:
轮廓线处理,和边缘有点类似,不过轮廓线一般是亚像素精度的
找轮廓线,分割轮廓线,根据轮廓做图形拟合
gen_contours_skeleton_xld模板匹配
基于点,灰度值,描述符,相关性,形状,组件的模板匹配,可以处理轻微的变形
参考:https://www.cnblogs.com/bile/p/10551593.html偏折术
可以应用于3d建模,适合于表面有反光的物体的建模。具体用法待研究。拼接
针对不在同一平面的物体或不能一次性拍摄完整的物体,拍摄多张照片后,将这些图像拼接到一个平面上。
例如柱状塑料瓶的包装纸,一个很大的房间的全局图。
这里面用到的一个技术是将坐标转换到世界坐标系中,这个技术也要求摄像机已经做过标定。三维匹配
- 表面变形
- 基于表面
- 基于形状
摄像机标定
目的是为了建立空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,需要建立摄像机成像的几何模型,求解这个模型的参数。需要求解出摄像头的畸变参数。
一般图像的四边畸变得比较厉害,拍摄的用于标定的图片应尽量将标定板放在四周的都有一些。根据标定后的参数,可以用于校正拍摄到的畸变图片,校正过的图片可以用来做测量等处理。
标定后做校正举例:
校正前:
校正后:
深度学习
处理分类,目标检测,语义分割。halcon中提供了三种预训练好的模型可供再训练。特征提取及分析
通过提取到区域的中心,孔洞,纹理,离心率,致密性,面积,凸度,等一系列特征做分析形态学
膨胀,腐蚀,开,闭,区域填充,扩展,连通一维码识别
一维条形码的检测运动检测
针对同一场景下的连续拍照,有几种常用的手段:- 做光流检测,定位移动的物体
- 做图像减法,通过减到的结果检测发生位移的物体
- 对两张图片做动态阈值分割,能够找出不同区域
- 做场景流检测,定位
缩写词
- HNF:Hesse normal form,第一次在hough变换中遇到。
- ROI:region of interest,感兴趣区域
- DFF:depth from focus
附录:
- 已经定义好的过滤器大类:
- 算数相关:灰度的加减乘除,乘方,开方,三角函数,正反变换
- 位运算
- 颜色变换,图像通道处理
- 求边缘
- 图像增强
- 傅里叶变换
- 几何变换:缩放,移动,镜像,旋转
- 图像修复相关
- 寻找线条
- 噪声相关:添加噪声
- 光流
- 角点检测
- 场景流
- 光滑图像
- 提取纹理
- 维纳滤波:降低平稳噪声
halcon小结的更多相关文章
- halcon学习方法小结及以后的学习计划
学了这么久的halcon,感觉还是没有摸到门路. 记录一下这么久以来经历过的学习阶段: 看冈萨雷斯<数字图像处理>这本书,使用halcon做练习. 我实际上只比较完整地看了这本书的形态学处 ...
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- iOS--->微信支付小结
iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...
- iOS 之UITextFiled/UITextView小结
一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- scikit-learn随机森林调参小结
在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
随机推荐
- c++异常处理函数
注意: throw 抛出异常,catch 捕获异常,try 尝试捕获异常 catch 中的参数类型要和throw 抛出的数据类型一致 try{ //可能抛出异常的语句}catch (异常类型1) ...
- hadoop之hdfs架构详解
本文主要从两个方面对hdfs进行阐述,第一就是hdfs的整个架构以及组成,第二就是hdfs文件的读写流程. 一.HDFS概述 标题中提到hdfs(Hadoop Distribute File Syst ...
- CentOS7下LVM的基本操作
CentOS7下LVM的基本操作-创建LVM 环境 物理主机:windows10 虚拟软件:VMWare14 虚拟机:CentOS Linux release 7.6.1810 (Core) 软件环境 ...
- RabbitMQ的六种工作模式总结
最近学习RabbitMQ的使用方式,记录下来,方便以后使用,也方便和大家共享,相互交流. RabbitMQ的六种工作模式: 1.Work queues2.Publish/subscribe3.Rout ...
- Wordpress SEO
Wordpress SEO 安装插件 Baidu Sitemap Generator, 作者 柳城, 主要用于按照配置参数生成 sitemap.xml 网站地图. 设置路径 设置 => Baid ...
- 美化H标签
美化H标签 .article-content h2{ font-size:18px; font-weight:bold; background-color: #CEEEFA; border-botto ...
- ZK 网络故障应对法
网络故障可以说是分布式系统天生的宿敌.如果永远不发生网络故障,我们实际上可以设计出高可用强一致的分布式系统.可惜的是不发生网络故障的分布式环境还不存在,ZK 使用过程中也需要小心的应付网络故障. 让我 ...
- Springboot2.x整合RabbitMQ
1.RabbitMQ介绍 可参照RabbitMQ笔记 2.接入配置 pom依赖 <!--amqp依赖--> <dependency> <groupId>org.sp ...
- 百万it资源百度网盘链接分享
自己大量时间整理的优质资源,容量达3000多G,有需要的朋友可以微我,资源截图: 面试资料: 书籍类: 视频类: 以上只是部分资源,想要资源的亲请加微信咨询. 欢迎加微信咨询,请备注资源: 独乐乐不 ...
- MongoDB 学习笔记之 分片和副本集混合运用
分片和副本集混合运用: 基本架构图: 搭建详细配置: 3个shard + 3个replicat set + 3个configserver + 3个Mongos shardrsname Primary ...