我有一些包含数字的图像子集。每个子集都由Tesseract进行OCR阅读。不幸的是,对于一些图像,从原始图像中裁剪出来的部分并不理想。
因此,图像顶部和底部的一些工件/残留物会妨碍Tesseract识别图像上的字符。因此,我希望摆脱这些工件,并获得类似的结果:
但结果一点也不好: 然后我偶然发现了来自scipy的flood_fill函数(这里),但发现它太耗时间且仍不够高效。类似的问题在Stack Overflow上有人问过(这里),但并没有提供太多帮助。也许可以考虑k近邻方法?我还发现,一些将相邻像素根据某些标准合并的方法被称为生长方法,其中单链接是最常见的(这里)。
你会推荐什么方法来消除上下的伪影?
首先,我考虑了一个简单的方法:将第一行像素设置为参考。如果在x轴上发现了伪影(即,如果图像被二值化,则为白色像素),则沿y轴删除它,直到下一个黑色像素。这种方法的代码如下:
import cv2
inp = cv2.imread("testing_file.tif")
inp = cv2.cvtColor(inp, cv2.COLOR_BGR2GRAY)
_,inp = cv2.threshold(inp, 150, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
ax = inp.shape[1]
ay = inp.shape[0]
out = inp.copy()
for i in range(ax):
j = 0
while j in range(ay):
if out[j,i] == 255:
out[j,i] = 0
else:
break
j+=1
out = cv2.bitwise_not(out)
cv2.imwrite('output.png',out)
但结果一点也不好: 然后我偶然发现了来自scipy的flood_fill函数(这里),但发现它太耗时间且仍不够高效。类似的问题在Stack Overflow上有人问过(这里),但并没有提供太多帮助。也许可以考虑k近邻方法?我还发现,一些将相邻像素根据某些标准合并的方法被称为生长方法,其中单链接是最常见的(这里)。
你会推荐什么方法来消除上下的伪影?