• 机器视觉中提高解码成功率的思路分析


    以Halcon为例,一般解码的步骤为:创建解码模型——设置解码参数——执行解码——清除模型回收内存。如下所示:

    1 create_bar_code_model ([], [], BarCodeHandle)
    2 set_bar_code_param (BarCodeHandle, 'num_scanlines', 30)
    3 find_bar_code (Image, SymbolRegions1, BarCodeHandle, ['Code 128','Code 39'], BarCodeStrings)
    4 clear_bar_code_model (BarCodeHandle)

    我们一般会在“设置解码参数”这个步骤里面做文章。例如设置多个参数,以达到解码成功率高且解码速度快的目的。这个只是常规思路,我今天并不想讲这个,而且这种思路有局限:有时候无论你参数设置得多么合理,就是死活解不出来码。

    不知大家有没有这样的体验:生活中我们经常用手机去扫二维码,有时候我们第一次扫不上,但是变动手机位置或者打开闪光灯重复扫,最终基本都能扫出来(解码成功)。

    我分析的原因如下:

    质量高的码Halcon解码一般仅需几毫秒,日常生活中手机解码如果需要一秒左右,那可以推测其实手机是用了多次解码的方式,一次不成功再来一次,因为手机可以多次对焦曝光拍照用于解码,并且可以变换手机的位置来解码。由于单次解码时间很短,因此就算是多次解码,手机扫码看起来也像是一次性成功的。


    用Halcon解码时,对于难解的码我们可以用类似思路:一次不成,再换个解码参数再解一次;或者改变相机曝光重新拍一张,再解一次。(变换工业相机位置拍摄不太现实,不考虑)

    按此思路,Halcon编写的解码示例代码如下:(只贴出了关键部分)

     1 Length := 0
     2 DecodedDataStrings := []
     3 for min_gray := 0 to 30 by 3
     4     for max_gray := 255 to 180 by -7
     5         *色阶映射,增强图像对比度
     6         scale_gray_map (Image, Image2, min_gray, max_gray) 
     7         find_data_code_2d (Image2, SymbolXLDs, hv_DataCodeHandleQR, [], [], ResultHandles, DecodedDataStrings)
     8         tuple_strlen (DecodedDataStrings, Length)
     9         *字符串大于5应该就是解出来了,当然这里只是简单判断
    10         if (Length > 5)
    11             break
    12         endif       
    13     endfor
    14     
    15     if (Length > 5)
    16         break
    17     endif
    18 endfor
    19 
    20 disp_message (3600, '解码结果:' + DecodedDataStrings  , 'image', 100, 12, 'black', 'true')

    我设计了两层for循环,逐渐提高图片Image的对比度,然后在新图Image2上解码。

    注意:两层for循环的步长不宜过小(我设计的步长分别是3和-7),不然循环的次数太多,速度太慢。

    至于函数scale_gray_map (Image, Image2, min_gray, max_gray) 是一个根据色阶映射增强图像对比度的函数,实现方式参考:https://www.cnblogs.com/xh6300/p/7512532.html

    示例代码中是通过模拟不同曝光的思路提高解码成功率,当然也可以选择在解不出来时通过set_data_code_2d_param重新设置新的解码参数的思路来提高解码成功率。

  • 相关阅读:
    BZOJ 3157 &数学乱搞...
    BZOJ 2654 & 玄学二分+MST
    概率与期望的一些问题整理
    BZOJ1024&丝帛搜索
    BZOJ 1260&UVa 4394 区间DP
    hdu Atlantis(线段树的面积并)
    hdu Stars in Your Window(线段树,涉及扫描线建立)
    hdu Potted Flower(线段树,求区间的最值)
    hdu Frequent values (线段树 求最值)
    hdu Stars(树状数组)
  • 原文地址:https://www.cnblogs.com/xh6300/p/9809692.html
Copyright © 2020-2023  润新知