首页 > 解决方案 > 图像阈值处理无法完全去除图像中的点状噪声

问题描述

我正在处理一些图像,我必须进行一些预处理操作以删除任何内容并只保留文字。
为此,我使用了不同的阈值方法(自适应平均阈值、自适应高斯阈值……)。我得到的最好结果是自适应平均阈值。然而,使用自适应平均阈值不仅消除了不需要的“噪音”,而且还消除了一部分文字!
这是我使用的代码:

src = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
height, width = src.shape
blockSize = 35
C = 23
amtImage = cv2.adaptiveThreshold(src, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize, C)
cv2.imwrite('output.jpg', amtImage)

输入图片: 出于保密原因,这些图片均来自互联网!

图 1

图 2 输出图像:

图 1

图 2

我尝试使用以下代码消除虚线噪声:

import cv2
import numpy as np

img = cv2.imread('output.jpg', 0)
_, blackAndWhite = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)

nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(blackAndWhite, None, None, None, 8, cv2.CV_32S)
sizes = stats[1:, -1] #get CC_STAT_AREA component
img2 = np.zeros((labels.shape), np.uint8)

for i in range(0, nlabels - 1):
    if sizes[i] >= 10:   #filter small dotted regions
        img2[labels == i + 1] = 255

res = cv2.bitwise_not(img2)
cv2.imwrite('another_output.jpg, res)

这是我得到的一个例子:

在此处输入图像描述

虽然自适应平均阈值做得很好,但最终结果仍然不够好,无法进行 OCR-ed(使用 Tesseract)。
任何人都可以提出一些修改或任何想法,以提高阈值的质量并只保留最终图像中的文字吗?
抱歉太长了,谢谢!

标签: pythonopencvimage-processingocrimage-thresholding

解决方案


推荐阅读