zoukankan      html  css  js  c++  java
  • 机器视觉中提高解码成功率的思路分析

    以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重新设置新的解码参数的思路来提高解码成功率。

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/xh6300/p/9809692.html
Copyright © 2011-2022 走看看