持更

应用范围

  1. (罗列自官方帮助文档,以后有空了按照需求展开叙述)
  2. 1. 安全系统
  3. 2. 表面检测
  4. 3. 定位
  5. 4. 二维测量比较
  6. 5. 二维码识别
  7. 6. 二维位置定位
  8. 7. 二维物体识别
  9. 8. 光学字符识别
  10. 9. 机器人视觉
  11. 10. 交通监视和驾驶辅助系统
  12. 11. 三维测量比较
  13. 12. 三维物体定位
  14. 13. 三维物体识别
  15. 14. 特征检测
  16. 15. 完整性检测
  17. 16. 颜色检测
  18. 17. 一维码识别
  19. 18. 印刷检测

方法

  1. Blob分析

    对前景/背景分离后的二值图像,进行连通域提取和标记。核心思想是将一块区域内 灰度突变 的范围找出来。

    threshold, connection, union, select_shape

    这个用得太多了,就不举例了。

  2. Hough转换

    霍夫变换,一种使用参数估计做特征提取的技术。结合边缘检测使用,有的规则的边缘,比如近似直线或者圆可能有部分小区域被挡住了,使用霍夫变换可以估计出边缘实际的形状。

    举例:



    这张图上面的边缘附近有一些特别亮的区域,导致这个边缘检测到的结果会与实际我们关心的边缘不一致,使用边缘检测结合霍夫变换,可以估计出上边缘的实际情况,近似的是下图中的这条红线:



    使用霍夫变换得到边缘线的同时,还可以得到边缘线相对于垂直方向的角度。

    1. 算子多以hough开头
  3. 边缘提取

    1. 像素精度

      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等等,这些不同的求边缘算法主要在定义的卷积核不同上。

      举例:



    2. 亚像素精度,精度上比像素精度更高一些,不罗列了,算子名称中多包含contours,sub pix,xld

      edges_sub_pix:使用Deriche,Lanser,Shen或者Canny过滤器求边缘
  4. 变化的模板

    1. create_variation_model相关算子。

    使用没有问题的图片创建模板,或者使用一些没有问题的图片训练模板,再在目标图像上找匹配,可以用于识别单一的变化不大的物体,能够准确的识别出匹配的图像,通过与模板图像做比对,能够找出缺陷。

    直接拿halcon中的图举例:



    2. create_shape_model/create_scaled_shape_model相关算子。

    3. create_metrology_model相关算子。

  5. 定位

    主要还是结合图片上一些已知特征做特征筛选来做定位,或者通过模板匹配来做定位

  6. 对焦测距

    利用多倍聚焦提取深度 depth_from_focus,同一物体不同聚焦下的图组成的多通道图片提取深度(是否可以用在对理论上是同一平面的物体检测凹陷或凸起上?这个模型可能只是一个估计出来的模型,是否能够发现细小的凹陷或凸起?需要解决的问题还有怎样一次性快速获取到不同倍数聚焦下的图片,感觉上有点类似于3d建模)

  7. 多目立体视觉

    需要在摄像机标定得到的参数的基础上做。

    通过不完全相同的角度拍摄的多张标定后的图片重建3d表面,reconstruct_surface_stereo

  8. 二维码识别

    用于二维图像上的二维码识别和解析,支持五种主流的编码和3种GS1编码模式的二维码。

  9. 分类器

    1. 根据内部已经定义好的特征(6大类:颜色,灰度,区域,旋转,缩放,纹理),自动选择合适的特征做训练,训练的对象是属于某一种类的那个区域的特征(相关算子:get_feature_names,calculate_features,create_class_train_data,add_sample_class_train_data,select_feature_set_knn,classify_class_knn等)
    2. 使用各种分类器做分类,需要把模板图片自己分好类,用模板图片做训练,各种分类器的使用都是差不多的,都是create_class_xxx,add_samples_image_class_xxx, train_class_xxx, classify_image_class_gmm。
    3. 二维多通道图像根据两个通道的特征结合起来基于二维直方图做分类
    4. 两张单通道图像基于二维直方图做聚类分割
  10. 光度立体法

    用多张不同光源拍摄的同一物体的图片重建物体表面,通过对重建表面后获取到的梯度图像或者反射图像再处理能够相对容易的找出凹凸的缺陷

    photometric_stereo

    更适合用在表面漫反射的物体上,不适合表面有较强镜面反射的物体上。

  11. 光学字符检测和识别

    1. 自己训练并检测需要识别的字符:create_ocv_proj, train_ocv_proj, do_ocv_simple
    2. 使用各种分类器做光学字符检测:create_ocr_class_xxx, write_ocr_trainf, append_ocr_trainf, train_ocr_class_xxx
    3. 根据已有的模型直接检测图片种的字符,已有的模型有多种可选:create_text_model_reader, find_text
    4. 直接做字符检测:select_characters
  12. 基于样本的识别

    通过一些图片作为样本训练之后再识别同类物体,每张图片是一种物体

    create_sample_identifier, add_sample_identifier_object_info, prepare_sample_identifier, train_sample_identifier, apply_sample_identifier, get_sample_identifier_object_info

  13. 激光三角测量

    运用线结构光,举的例子代码太长了,还待研究。。。

  14. 几何测量

    角度测量,图上的各种距离测量(这个可能可以用于测量缺陷长度)

  15. 几何转换

    缩放,旋转,扭曲,平移

  16. 快速傅里叶变换

    将图片转换到频率域上,使用特定的过滤器做卷积,达到某种效果。可能用到的滤波器:平滑滤波器(gauss filter, binomial filter可以用来抑制细小的噪声),带通滤波器(bandpass filter允许特定的波形通过)等。

    在频率域上做处理,去除除了中心点之外的高亮点可以去除图象上的噪声。

    处理前后:



    处理前频谱图:



    处理后频谱图:

  17. 轮廓线处理,和边缘有点类似,不过轮廓线一般是亚像素精度的

    找轮廓线,分割轮廓线,根据轮廓做图形拟合

    gen_contours_skeleton_xld

  18. 模板匹配

    基于点,灰度值,描述符,相关性,形状,组件的模板匹配,可以处理轻微的变形

    参考:https://www.cnblogs.com/bile/p/10551593.html

  19. 偏折术

    可以应用于3d建模,适合于表面有反光的物体的建模。具体用法待研究。

  20. 拼接

    针对不在同一平面的物体或不能一次性拍摄完整的物体,拍摄多张照片后,将这些图像拼接到一个平面上。

    例如柱状塑料瓶的包装纸,一个很大的房间的全局图。

    这里面用到的一个技术是将坐标转换到世界坐标系中,这个技术也要求摄像机已经做过标定。

  21. 三维匹配

    1. 表面变形
    2. 基于表面
    3. 基于形状
  22. 摄像机标定

    目的是为了建立空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,需要建立摄像机成像的几何模型,求解这个模型的参数。需要求解出摄像头的畸变参数。

    一般图像的四边畸变得比较厉害,拍摄的用于标定的图片应尽量将标定板放在四周的都有一些。

    根据标定后的参数,可以用于校正拍摄到的畸变图片,校正过的图片可以用来做测量等处理。

    标定后做校正举例:

    校正前:



    校正后:

  23. 深度学习

    处理分类,目标检测,语义分割。halcon中提供了三种预训练好的模型可供再训练。

  24. 特征提取及分析

    通过提取到区域的中心,孔洞,纹理,离心率,致密性,面积,凸度,等一系列特征做分析

  25. 形态学

    膨胀,腐蚀,开,闭,区域填充,扩展,连通

  26. 一维码识别

    一维条形码的检测

  27. 运动检测

    针对同一场景下的连续拍照,有几种常用的手段:

    1. 做光流检测,定位移动的物体
    2. 做图像减法,通过减到的结果检测发生位移的物体
    3. 对两张图片做动态阈值分割,能够找出不同区域
    4. 做场景流检测,定位

缩写词

  1. HNF:Hesse normal form,第一次在hough变换中遇到。
  2. ROI:region of interest,感兴趣区域
  3. DFF:depth from focus

附录:

  1. 已经定义好的过滤器大类:

    1. 算数相关:灰度的加减乘除,乘方,开方,三角函数,正反变换
    2. 位运算
    3. 颜色变换,图像通道处理
    4. 求边缘
    5. 图像增强
    6. 傅里叶变换
    7. 几何变换:缩放,移动,镜像,旋转
    8. 图像修复相关
    9. 寻找线条
    10. 噪声相关:添加噪声
    11. 光流
    12. 角点检测
    13. 场景流
    14. 光滑图像
    15. 提取纹理
    16. 维纳滤波:降低平稳噪声

halcon小结的更多相关文章

  1. halcon学习方法小结及以后的学习计划

    学了这么久的halcon,感觉还是没有摸到门路. 记录一下这么久以来经历过的学习阶段: 看冈萨雷斯<数字图像处理>这本书,使用halcon做练习. 我实际上只比较完整地看了这本书的形态学处 ...

  2. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  3. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  4. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  5. iOS--->微信支付小结

    iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...

  6. iOS 之UITextFiled/UITextView小结

    一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...

  7. K近邻法(KNN)原理小结

    K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...

  8. scikit-learn随机森林调参小结

    在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...

  9. Bagging与随机森林算法原理小结

    在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...

随机推荐

  1. 即时聊天APP(四) - 联系人和会话

    联系人和会话界面使用的是RecyclerView进行滑动显示,并将好友列表存储至数据库,以供下次登录时使用,RecyclerView在后面我会详细介绍,这里略过. 联系人初始化时读取数据库并展示: / ...

  2. LINUX下搭建简单临时的WWW服务器

    首先确定是否安装有python: python -V 如果有: cd 到你要开放的文件夹中,然后使用下面的命令可以把 当前文件夹内的所有文件 发布到 8000 端口. python -m Simple ...

  3. FlutterGo 后端知识点提炼:midway+Typescript+mysql(sequelize)

    前言 关于 FlutterGo 或许不用太多介绍了. 如果有第一次听说的小伙伴,可以移步FlutterGo官网查看下简单介绍. FlutterGo 在这次迭代中有了不少的更新,笔者在此次的更新中,负责 ...

  4. 【linux】【Fabric】Centos7搭建Fabric运行环境

    1.安装jdk1.8配置环境变量 参考:https://www.cnblogs.com/jxd283465/p/11541506.html 2.安装git yum -y install git 3.安 ...

  5. 使用Spreadsheet导出表格时,设置样式

    $spreadsheet = new Spreadsheet();// 初始化         $spreadsheet->createSheet();// 添加一个sheet          ...

  6. 常用的HDFS操作

    首先,把Hadoop命令加入到PATH环境变量中,直接通过start-dfs.sh开启Hadoop,也可以直接通过hdfs命令访问HDFS中的内容,方便平时的操作. 配置PATH环境变量 vim  ~ ...

  7. Hadoop点滴-HDFS文件系统

    1.HDFS中,目录作为元数据,保存在namenode中,而非datanode中 2.HDFS的文件权限模型与POSIX的权限模式非常相似,使用  r  w  x 3.HDFS的文件执行权限(X)可以 ...

  8. 谷歌助力,快速实现 Java 应用容器化

    原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」.一群同频者,一起成长,一起精进,打破认知的局限性. Google 在 2018 年下旬开源 ...

  9. 开发电商平台用PHP语言和JAVA语言有什么区别?哪种语言更好?

    现在很多行业都通过电子商务拓展业务,所以商城系统开发成为很多企业的刚性需求.一般有一点技术基础的客户应该知道目前商城系统开发主流语言有两个,PHP和Java.那么很多客户朋友会纠结是选择哪个语言开发好 ...

  10. MySQL 复制已存在的表生成新表

    从已有的表创建一个新的空表 CREATE TABLE new_table LIKE old_table; 注意: create table ... like 创建的表会保留原有表的字段.索引的定义,但 ...