zoukankan      html  css  js  c++  java
  • FPGA模式识别之亮点,光点检测

                  简单描述一下,具体这个亮点和光点是怎么来的。

                   在做质量和数量检测的时候,常常会涉及到,识别异样点(坏点)。在很多检测的过程中,模型基本是相同的,比如说,检测电路板是否有异样,把坏点圈出来。电路板之间,都是相同的。我称作背景,检测到电路板边缘,进行位置校对后,减去背景。剩下的就是一些亮点了。还有如果要让你把红豆和绿豆分开。绿豆里面有多少红豆(少量),做前期图像处理的时候,把红豆的色彩分量提取的话,图像就只有红豆是白色的,其他的都是黑色的了。等等。都需要涉及这一点。

               最后就会出现一张图。这张图你可以这么理解,就是一块蛋糕上,撒了些小豆,然后我检测一下,上面小豆的数量。

               1,理论:其实我们大概也知道,亮点它的亮度一定比周边的要亮,呈现一种高斯形状,旁边数值低,亮的地方高,然后旁边又低。但是不但表它比整个平面的相对亮度都亮。所以进行图像处理的时候,并不一定要全局处理。

    这张图像的质量比较好,不需要做图像的较多处理。其实前期有时候是需要滤波,均衡的。亮点的情况大概说了下,怎么检测呢??有一个是,边缘检测,边缘检测后,亮点就会变成一个圈。然后形态学处理,开操作,闭操作。进行处理后,进行个数测量。第二个,就是高斯形状检测,用5*5的高斯掩膜做处理。对 整幅图扫描,如果符合高斯形状,我就认为是亮点。

                        2,matlab的处理和验证:

    亮点的数据情况:

     

    126为中心,的一个亮点。这就是一个亮点周围数值的分布状态。

    第一种方法是边缘检测的,是吧。

    这个是边缘检测后的,

    呈现的是这种状态。后面怎么操作呢??3*3的中值滤波。把孤立点去掉。最后通过距离进行聚类。这个方法比较麻烦。最后我还是采用了,第二种方案。高斯形状的检测。

    for i=20:236                                                                 
           for j=20:280                                                         
       if (f1(i,j)>f1(i,j+1)&&f1(i,j)>f1(i,j+2) &&f1(i,j+1)>f1(i,j+3) &&f1(i,j)-f1(i,j+4)>15  && ... %比较右边
                     f1(i,j)>f1(i,j-1)&&   f1(i,j)>f1(i,j-2) &&f1(i,j-1)>f1(i,j-3) &&f1(i,j)-f1(i,j-4)>15 ... %比较左边
                    &&f1(i,j)>f1(i-1,j)&&f1(i,j)>f1(i+1,j))  %比较上边和下边
                   t(1,w)= i;
                   t(2,w)=j;
                   w=w+1;
                end
      end
    end

    这个是matlab的比较方案。这个检测方案,是对图像进行了大量统计后,得到的比较模糊的检测方法。最后进来的亮点数量,远远大于实际的数量。

    abs(t(1,i)-t(1,i+1))<3 

     abs(t(2,i)-t(2,i+1))<3

    进行邻近点聚类。

               3,FPGA实现:

    parameter  read_ram_data_state = 64'b0000_0000_00
    parameter  read_up5add_state = 64'b0000_0000_0000
    parameter  compare_bigsmall_state1 = 64'b0000_000
    parameter  read_down5add_state = 64'b0000_0000_00
    parameter  compare_bigsmall_state2 = 64'b0000_000
    parameter  save_dot_add_state1 = 64'b0000_0000_00
    parameter  save_dot_add_state2 = 64'b0000_0000_00
    parameter  read_dot_add_state1 = 64'b0000_0000_00
    parameter  read_dot_add_state2 = 64'b0000_0000_00
    parameter  first_dot_add_state = 64'b0000_0000_00
    parameter  data_compare_two_state = 64'b0000_0000
    parameter  judge_different_state = 64'b0000_0000_
    parameter  read_ram_delay_state = 64'b0000_0000_0
    parameter  edge_dot_delet_state = 64'b0000_0000_0
    我还是把状态机贴出来。描述一下状态机的变化顺序。

    第一步,图像保存,存储器清空,前期准备工作。

    第二步,图像一行一行往计算模块里面送,计算什么呢??计算行向的高斯形状。因为如果一次去计算5行的情况,上下左右都检测,然后还要ram临时保存的话,会降低效率的。

    第三步,如果有检测到横向有高斯形状后,才开始检测,这个像素的上,和下,竖向方向是否也呈现高斯状态。

    第四步,如果呈现高斯状态,保存起来。如果不是,回到第二步。

    第五步,就是把保存的亮点,进行聚类。

    第六步,发送给上位机。

    检测的正确率还是很高的。可能是环境的质量比较好。当然了,整体结构是这样的,具体的细节还是有很多的。

    微笑本人能力有限,但是我努力奉献我的想法,希望对各位有所帮助,我希望着,中国的技术行业,可以上一个高的台阶。

    当然,如果有好的想法和建议,可以给我留言。

  • 相关阅读:
    LeetCode 264. Ugly Number II
    LeetCode 231. Power of Two
    LeetCode 263. Ugly Number
    LeetCode 136. Single Number
    LeetCode 69. Sqrt(x)
    LeetCode 66. Plus One
    LeetCode 70. Climbing Stairs
    LeetCode 628. Maximum Product of Three Numbers
    Leetcode 13. Roman to Integer
    大二暑假周进度报告03
  • 原文地址:https://www.cnblogs.com/maohuawang/p/3807222.html
Copyright © 2011-2022 走看看