halcon小结

持更

应用范围

(罗列自官方帮助文档,以后有空了按照需求展开叙述)

1. 安全系统
2. 表面检测
3. 定位
4. 二维测量比较
5. 二维码识别
6. 二维位置定位
7. 二维物体识别
8. 光学字符识别
9. 机器人视觉
10. 交通监视和驾驶辅助系统
11. 三维测量比较
12. 三维物体定位
13. 三维物体识别
14. 特征检测
15. 完整性检测
16. 颜色检测
17. 一维码识别
18. 印刷检测

方法

  1. Blob分析
    对前景/背景分离后的二值图像,进行连通域提取和标记。核心思想是将一块区域内 灰度突变 的范围找出来。
    threshold, connection, union, select_shape
    这个用得太多了,就不举例了。

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

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

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

     算子多以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. 维纳滤波:降低平稳噪声
原文地址:https://www.cnblogs.com/yutou2016/p/11265561.html