【问题标题】:Manage a text detector which is very sensitive to lighting conditions管理对照明条件非常敏感的文本检测器
【发布时间】:2021-02-16 04:01:40
【问题描述】:

我正在使用名为 CRAFT 的文本检测(您可以在 github 中查看),它在我使用过的主要图像上做得很好,但我注意到文本检测对光照条件非常敏感。

为了说明这一点,请看这张图片:

Text detected with CRAFT

我有兴趣检测代码部分,即:FBIU0301487。然而,似乎即使使用等于 0 的阈值也无法检测到字符“F”,即让每个边界框都被视为有效检测。在看到更多这样的案例后,我认为这是由于照明条件造成的,即阴影部分和反射光部分之间存在高对比度的区域。更重要的是,在“22G1”文本框中,第一个字符“2”也会发生这种情况。

我的问题是:我能做些什么来检测这些部分吗?也许我可以进行一些图像预处理,但我不太确定哪种预处理可以帮助我。我正在使用 Python,但我不介意库(OpenCV、scikit-image、...)。

我会很感激任何想法。提前致谢!

【问题讨论】:

    标签: image opencv computer-vision


    【解决方案1】:

    一种可能性是在 Python/OpenCV 中进行除法归一化。

    输入:

    import cv2
    import numpy as np
    
    # read the image
    img = cv2.imread('truck_id.jpg')
    
    # convert to gray
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    # blur
    smooth = cv2.GaussianBlur(gray, (33,33), 0)
    
    # divide smooth by gray image
    division = cv2.divide(smooth, gray, scale=255)
    
    # invert
    division = 255 - division
    
    # save results
    cv2.imwrite('truck_id_division.jpg',division)
    
    # show results
    cv2.imshow('smooth', smooth)  
    cv2.imshow('division', division)  
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    分区结果:

    除法结果(全分辨率小节):

    【讨论】:

    • 这种方法有效!非常感谢,你真的很有帮助!
    【解决方案2】:

    您可以在文本检测算法之前对图像进行“局部自适应阈值”。

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt
    
    img = cv2.imread('dave.jpg',0)
    img = cv2.medianBlur(img,5)
    
    ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,\
                cv2.THRESH_BINARY,11,2)
    th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
                cv2.THRESH_BINARY,11,2)
    
    titles = ['Original Image', 'Global Thresholding (v = 127)',
                'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
    images = [img, th1, th2, th3]
    
    for i in xrange(4):
        plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
        plt.title(titles[i])
        plt.xticks([]),plt.yticks([])
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 2021-03-09
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      相关资源
      最近更新 更多