美文网首页音视频开发机器视觉
halcon视觉学习-基于halcon

halcon视觉学习-基于halcon

作者: 时间之友 | 来源:发表于2019-05-26 16:34 被阅读0次

    halcon简介

    halcon在工业视觉中属于很棒的。
    学习halcon需要具备 软件、图像处理、光学 三个部分的知识。图像处理一般的套路就是 获取图像>分割区域>特征提取

    halcon界面

    halcon文件所在位置:
    Users / Shared / Library / Application Support / halcon 13 / example / hdevelop/
    我们做项目的图片路径就在 example/images/ 里面

    一、嵌入式工业读码器

    包括DM码、QR码、vericode码


    二、 图像采集的原理,以及准确成像的专业方法

    • 1.2 相机的接口类型
      USB、IEEE1394、Gigabit Ethernet(千兆网)

    • 1.3 小试halcon
      首先,安装相机驱动(一些品牌halcon自带驱动),比如balser安装pylon驱动,打开halcon界面,选择助手,打开新的Image Acquisition,选择资源,自动检测接口,然后点击右边的按钮选择一个接口,选择后把选项 资源 切换到 连接,再点击连接框里面的一个连接,表示相机和软件建立连接,再点击 实时,相机实时采集数据了。

    三、 Blob分析与形态学

    Blob
    区域是一种非常重要的概念。
    区域是blobs这一数据类型在halcon中的一种贴切的表达形式。
    采集图像-区域分割,最后通过特征(如圆度、面积、矩形度等)筛选,这一过程被称为Blob(binary large objects)分析。

    形态学
    形态学是对区域大小调整的一种非常重要的方法和概念。形态学包括「开运算、闭运算、腐蚀、膨胀」
    形态学需要引入一个新的概念,即结构元素。

    • 开运算可以去除小区域以及原区域中突出的细节部分;
    • 闭运算可以填补相邻区域以及空洞;
    • 腐蚀,会有一个结构元素,即一个形状的像素组合,以这个结构元素的中心点像素来计算保留处,这个结构元素在目标元素中逐行移动,若目标元素中的形状和结构元素相同,这个目标元素中对应中心点像素保留。
    • 膨胀,与腐蚀相反,即参照一个结构元素,这个结构元素我们可以设定中心点,需要膨胀的位置,然后顺着图像一格一格走,只要有和中心点有交集,即可按结构元素膨胀。
      开运算就是先腐蚀再膨胀,闭运算就是先膨胀再腐蚀。参考
    腐蚀 膨胀
    • 灰度直方图。在图像处理中使用非常频繁,比如分开绿豆和红豆,可以拍照后选择灰度,红色和绿色灰度不同,通过直方图选择灰度范围,即可选择出红豆或绿豆。

    • 特征直方图。比如圆度、面积、


    实战案例-区分红豆和绿豆

    • 1.首先打开一张图片,点击确定,打开图片后,按住command不放,在图片界面会出现 当前的像素坐标和 灰度值


    • 2.获取图片后,按照套路开始图片分割,我们打开灰度直方图,直接点上方的按钮,选择合适的灰度范围。按照下图操作完后,点击单步跳过函数


    整个程序的编写和思考如下:

    * 1. 采集图像
    read_image (HalconTest01, '/Users/jkx/Desktop/halcon_test01.png')
    * 2. 分割图像
    threshold (HalconTest01, Regions, 43, 247)  // regions区域,表示选中43-247中间的灰度
    dev_set_draw('margin')   // 画出边缘
    dev_display(HalconTest01)  // 显示halconTest01这个图片,主要是生成 HalconTest01 这个变量
    dev_display(Regions)  // 显示 分割过的 Regions 图片,此时可以看到图片背景有杂质,下一步要去除杂质
    * 3. 采用开运算,消除图像杂质,先构建结构元素,结构元素中心点坐标我们可以不用管
    gen_circle(Circle, 200, 200, 20)  // 200,200 是结构元素的坐标,不管,后面是半径,根据你杂质的大小选择,否组杂质清不干净
    opening (Regions, Circle, RegionOpening)  // 开运算,表示打开 Regions这个对象,依照结构元素Circle这个对象,且生成新的RegionOpening对象
    dev_clear_window()
    dev_display(HalconTest01)
    dev_display(RegionOpening)
    
    * 4. 分离区域,将一个区域分解成多个区域
    connection(RegionOpening, ConnectedRegions)  //这次分离只分离开部分,后面优化可以删掉这条
    gen_circle(Circle1, 200, 200, 21.5)    // 腐蚀,结构元素更大,确保连在一起的豆子被分割开,Circle1是对象
    erosion1 (ConnectedRegions, Circle1, RegionErosion, 1)  // ConnectedRegions, Circle1, RegionErosion, 1 ,括号里是函数的参数,这些参数是对象,RegionErosion是新的对象,halcon的套路是函数参数里靠后的是新生成的对象,输入、结构元素、输出
    connection (RegionErosion, ConnectedRegions1)   // 分离开这些豆子
    * 5. 再次清屏,为了更好的展示效果
    dev_display(HalconTest01)
    dev_display(RegionErosion)
    * 6. 数一数有多少个被腐蚀后的参数
    count_obj(ConnectedRegions1, Number)
    * 7. 膨胀,恢复原来的样子
    dilation1 (ConnectedRegions1, Circle1, RegionDilation1, 1)
    * 8. 再次清屏,显示效果,为了便于理解,程序才这么啰嗦,实际可简化
    dev_clear_window ()
    dev_display (HalconTest01)
    dev_display (RegionDilation1)
    * 9. 插入特征直方图,区分豌豆和绿豆
    select_shape (RegionDilation1, SelectedRegions, 'circularity', 'and', 0.571, 0.743)
    dev_set_line_width (2)
    dev_display (HalconTest01)
    dev_display (SelectedRegions)  // 和上面的不能倒顺序,倒顺序就只能显示Halcon01,不能显示 SelectedRegions
    
    count_obj (SelectedRegions, Number1)  // 数一下豌豆的数量
    set_tposition (200000, 24, 12)  // 设置显示文字的位置
    write_string (200000, '豌豆的个数是:' + Number1)   // 显示的内容
    * dev_clear_window ()
    * dev_display (HalconTest01)
    
    difference (RegionDilation1, SelectedRegions, RegionDifference)   // 差值运算,这里小错误,虽然差值了,很多元素看不见了,但是还存在,所以结果还是67,需要再次处理
    select_shape (RegionDifference, SelectedRegions1, 'area', 'and', 855, 4895)
    
    count_obj (SelectedRegions1, Number2)
    set_tposition (200000, 24, 12)
    new_line (200000)
    write_string (200000, '绿豆的个数是:' + Number2)   // 显示绿豆数
    

    颜色空间
    主要分为以下几点:Halcon支持的颜色空间、通道与颜色空间的转化、通道与区域分割方法、案例讲解

    一般来说,我们得到一幅图像可以拆分为RGB(红黄蓝三通道分量交织,按BGRB排序)随后我们可以由RGB得到HSV空间图像。
    而且,通道图像和 颜色空间图像 都是 8bit 灰度图像。

    • 色调 H
      用角度来度量,取值为 0~360度,从红色开始逆时针计算,红色为0,绿色为120,蓝色为240,它们的补色黄色为60,青色180,品红300.

    • 饱和度 S
      饱和度表示颜色接近光谱的程度,一种颜色可以看出光谱色和白色混合的结果,其中光谱色越大,饱和度越高,颜色越艳丽,类似油画里的白矾,颜色加上白矾,它的保护度就降低了。

    • 明度 V
      明度表示颜色的 明亮程度,对于光源色,明度值取决于发光体的光亮度,对于物色体,此值和物体的折射比和反射比相关,一般取值从0%(黑)到100%(白)。

    四、 几何定位+仿射变换+视觉测量

    定位三方法:Blob定位、模板匹配、深度学习

    仿射变换:就是一种特殊的几何变换,是一种投影,常见的有 旋转、平移、缩放 (就是矩阵间的运算)

    Blob分析 模板匹配

    五、MPL深度学习(多层神经网络)

    比如对于不同的物品,A、B、C,我们可以通过纹理区分ABC,得出3个不同的值,再比如我们 通过周长区分ABC,又得出3个不同的值,那边把这些特征集合在一起构成特征向量, 不同物品的特征向量值不一样,可以划分出ABC,这个划分的过程就是靠分类器完成的,而训练的过程就是根据 特征向量的不同,把他们训练成某类物品并归类分类。
    MPL:Multi-Layer Perceptron


    halcon视觉总结

    一般来说,对于2D项目,无外乎这样的套路:

      1. 图像采集
      1. 预处理,主要有两种方法,对比度去噪
    对比度:
    scale_image (灰度缩放算子,在灰度直方图里操作,线性拉伸灰度)
    emphsize (增强算子)
    grey_range_rect (增加灰度动态范围的算子)
    equ_histo_image (直方图均匀化,让图片灰度分布更均匀)
    
    去燥:
    mean_image (均值滤波)、高斯滤波、中值滤波
    
      1. 图像分割
        二值化、形状选择、形态学
      1. 特征识别 和 求取计算
      1. 显示与通讯

    halcon中涉及的图像处理十大理论知识

    1. 图像处理基础知识
    2. 图像的灰度变换
    3. 图像增强(预处理:增强对比度 和去噪(均值、中值、高斯滤波))
    4. 图像的几何变换(仿射变换、投影变换、极坐标变换等)
    5. 图像分割(边缘提取、Blob分析等)
    6. 图像的频域(缺陷划痕检测等)
    7. 图像的形态学(膨胀、腐蚀、开运算、闭运算等)
    8. 图像的复原(这点halcon涉及不多,主要是刑侦用)
    9. 运动图像(运动检测,差分、光流法)
    10. 图像配准(模板匹配等)

    六、硬件知识

    购买工业相机必须要知道的参数

    • 分辨率(Resolution):相机每次采集图像的像素点数。对于数字工业相机一般是直接与光电传感器的像元数对应的,对于模拟相机则是取决于视频制式,PAL制为768576,NTSC制为640480。
    • 像素深度(Pixel Depth):即每像素数据的位数,一般常用的是8Bit.例如,一幅彩色图像的每个像素用R,G,B三个分量表示,若每个分量用8位,那么一个像素共用24位表示,就说像素的深度为24,每个像素可以是16 777 216(2的24次方)种颜色中的一种。在这个意义上,往往把像素深度说成是图像深度。表示一个像素的位数越多,它能表达的颜色数目就越多,而它的深度就越深。
    • 最大帧率(Frame Rate)/行频(Line Rate):即相机采集传输图像的速率,对于面阵相机一般为每秒采集的帧数,对于线阵相机为每秒采集的行数。
    • 曝光方式(Exposure)和快门速度(Shutter):对于线阵相机都是逐行曝光的方式,可以选择固定行频和外触发同步的采集方式,曝光时间可以与行周期一致,也可以设定一个固定的时间;面阵工业相机有帧曝光、场曝光和滚动行曝光等几种常见方式。数字工业相机一般都提供外触发采图的功能,快门速度一般可到10微秒,高速工业相机还可以更快。
    • 像元尺寸(Pixel Size):像元大小和像元数共同决定了相机靶面的大小。目前数字工业相机像元尺寸一般为3-10μm,一般像元尺寸越小,制造难度越大,图像质量也越不容易提高。
    • 光谱响应特性(Spectral Range):指该像元传感器对不同光波的敏感特性,一般响应范围是350-1000nm,一些相机在靶面前加了一个滤镜,滤除红外光线,如果系统需要对红外感光时可去掉该滤镜。

    打光和镜头
    《工程光学》 打光、选型、镜头

    附录:以上是工业上的,其实在显微镜等超高精度的视觉中,除了要考虑相机图像分辨率,还要考虑 光学系统分辨率,这里一般精度在 nm 级别,可 参考文章



    与公司算法工程师的交流:

    • 问:卷积在图像算法中能干嘛?
      答:可以用来滤波,也可以来模板匹配

    • 问:图像中 均值滤波、高斯滤波、中值滤波,这些感冒?
      答:去噪声。比如中值滤波可以去椒盐噪声, 自然界的噪声高斯噪声多,用高斯滤波去除,等等。补充:频域高通滤波锐化图像,即图像中的边界轮廓越明显,丢失了信息丰富的低频部分;频域低通滤波平滑图像,即图像中轮廓被淡化。

    • 问:卷积是对图片进行平滑处理吗?
      答:卷积可以理解为一种方法、一种操作,卷积就是按照块滑动处理,比如去一些图像毛刺。Halcon中的 开运算、闭运算、膨胀、收缩、也可以理解 为一种卷积。

    • 问:傅里叶变换在图像中的意义是?
      答:傅里叶变换用途很大,比如有时候噪声很难再时域中去除,在频域中 很好去除,另外,傅里叶可以用来压缩图像,图像打包后变成频域,解压再变成时域。

    • 涉及具体数学,傅里叶到底对图片做什么?
      答:图片其实可以理解为三维空间 图,xy 为空间位置,z为灰度值,通过傅里叶变换后,新的三维空间图像 xy 为不同方向的频率,z为幅值(待定)


    图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯

    这就得出了一个结论:傅里叶变换后的白色部分(即幅度较大的低频部分),表示的是图像中慢变化的特性,或者说是灰度变化缓慢的特性(低频部分)。

    傅里叶变换后的黑色部分(即幅度低的高频部分),表示图像中快变化的特性,或者说是灰度变化快的特性(高频部分)。

    相关文章

      网友评论

        本文标题:halcon视觉学习-基于halcon

        本文链接:https://www.haomeiwen.com/subject/cafftctx.html