Python 3.x 通过OCR预处理标准化脏图像

Python 3.x 通过OCR预处理标准化脏图像,python-3.x,image-processing,opencv3.0,python-tesseract,image-thresholding,Python 3.x,Image Processing,Opencv3.0,Python Tesseract,Image Thresholding,我正在做一个项目,研究不同来源的OCR图像面临的问题,但这个问题仅限于相机拍摄的图像。样本来自书籍、试卷等 我正在寻找的是一种方法,通过它我可以使图像OCR准备好 资料来源: 我尝试过的一些方法 th = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2) 输出:(因尺寸较大而压缩) 在阈值之后,我尝试了内核大小为9

我正在做一个项目,研究不同来源的OCR图像面临的问题,但这个问题仅限于相机拍摄的图像。样本来自书籍、试卷等

我正在寻找的是一种方法,通过它我可以使图像OCR准备好

资料来源:

我尝试过的一些方法

th = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                            cv2.THRESH_BINARY,11,2)

输出:(因尺寸较大而压缩)

在阈值之后,我尝试了内核大小为9的中值模糊,它去除了几乎所有的噪声,但也损坏了一些字符

输出:

我尝试过的另一种方法是使用skimage(本地阈值):

这种方法会产生大量的噪声,但使用中值模糊可以清除的噪声也会损坏某些字符

我这样做对吗?
如果没有,我该怎么做,下一步该怎么做。我的目标是找到一种能在所有图像上以最大精度工作的方法,最好是100%

通常每个图像都是噪声方面的特例,没有通用的解决方案,但您是否仍然需要更好地处理此文本的解决方案?对于此特定图像,您可以使用:
img[img[…,0]>130]=255
then
,th=cv2.threshold(img,200255,cv2.THRESH_BINARY)
我需要的是一种标准化图像的方法,以获得最大的结果,不是100%,而是尽可能最大的结果。因此,我可以在研究中表明,需要ML或神经网络才能获得100%的准确度。你不妨试试大津阈值。但正如@BelalHomaidan所说,没有一个通用的解决方案。您可以做的一件事是拥有一组可以处理任何图像的方法,并将所有这些方法应用于您遇到的每个图像。挑最好的。当然,考虑到所花费的时间,这不是最好的方法。为此,您可以进行并行处理。
warped = cv2.cvtColor(imgc, cv2.COLOR_BGR2GRAY)
T = threshold_local(warped, 11, offset = 1, method = "gaussian")
warped = (warped > T).astype("uint8") * 255
cv2.imwrite('newth.jpg', warped)