美文网首页
缺陷检测理论基础

缺陷检测理论基础

作者: 大龙10 | 来源:发表于2023-10-04 12:27 被阅读0次

    书名:计算机视觉40例从入门到深度学习:OpenCV-Python
    作者:李立宗
    出版社:电子工业出版社
    出版时间:2022-07-01
    ISBN:9787121436857


    一、缺陷检测

    • 工业产品的形状缺陷不仅影响产品的美观,还影响产品的性能。
      例如,应该是圆形的药品,若被加工成不规则圆形不仅看起来不美观,而且会因为剂量的改变而影响药效。
      因此,在工业生产中人们对形状缺陷非常重视。

    • 使用视觉算法进行缺陷检测可以解决人工操作带来的判断误差、效率低等问题。

    二、理论基础

    1、开运算

    • 开运算进行的操作是先将图像腐蚀,再对腐蚀结果进行膨胀。
      开运算可以用于去噪、计数等。
    实现去噪的开运算示例 实现计数的开运算示例
    • 使用函数cv2.morphologyEx()实现开运算。

    2、距离变换函数distanceTransform

    • 若图像内的子图没有连接在一起,则可以直接使用形态学的腐蚀操作确定前景对象;
      若图像内的子图连接在一起,则很难确定前景对象。
      此时,借助距离变换函数distanceTransform可以方便地将前景对象提取出来。

    • 距离变换函数distanceTransform可计算二值图像内任意点到最近背景点的距离。
      一般情况下,该函数计算的是图像内像素值非0的像素点到最近的像素值为0的像素点的距离,即计算二值图像中所有像素点距离其最近的像素值为0的像素点的距离。
      如果该像素点本身的像素值为0,则这个距离为0。

    • 距离变换函数distanceTransform的计算结果反映了各个像素点与背景(像素值为0的像素点)的距离关系。通常情况下:

      • 前景对象的质心(中心)距离像素值为0的像素点较远,会得到一个较大的值。
      • 前景对象的边缘距离像素值为0的像素点较近,会得到一个较小的值。
    • 如果对上述计算结果进行阈值处理,就可以得到图像内子图的质心、骨架等信息。
      距离变换函数distanceTransform不仅能计算对象的质心,还能细化轮廓、获取图像前景对象等。

    3、确定前景实例

    1)分析

    • 如果一些像素点距离背景点足够远,那么就认为这些点是前景点。
      据此,先找出图中各个像素点距离(最近)背景点的距离,然后将这些距离中较大值对应的像素点判定为前景点。

    2)方法

    • 具体实现时,使用距离变换函数distanceTransform完成距离的计算,使用阈值分割函数threshold根据距离将所有像素点划分为前景点、背景点。

    3)注意事项

    • 需要注意的是,在使用距离变换函数distanceTransform前,需要先对图像进行开运算,以去除图像内的噪声。

    4)步骤

    • Step 1:图像预处理(利用开运算去噪)。
    • Step 2:使用函数distanceTransform完成距离的计算。
    • Step 3:使用函数threshold分割图像,获取确定前景。判断依据是,将距离背景大于一定长度(如最远距离的70%)的像素点判定为前景点。
    • Step 4:显示处理结果。

    5)程序

    import numpy as np
    import cv2
    
    img = cv2.imread('d:\\water_coins.jpg')
    cv2.imshow("coins",img)
    
    # ====step1 预处理
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
    
    ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
    kernel = np.ones((3,3),np.uint8)
    opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2)
    
    # ====step2 完成距离的计算=====
    dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5)
    
    # ====step3 确定前景 ====
    ret, fore = cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0) 
    
    # ====step4 显示处理结果 ====
    cv2.imshow("fore",fore)
    
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    运行结果

    相关文章

      网友评论

          本文标题:缺陷检测理论基础

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