我正在尝试在下面的图像上进行OCR预成型,正如你可能注意到的那样,许多字母都不完整。它们缺少部件,这导致了Tesseract的一些不好的结果。

我尝试使用下面的代码来侵蚀图像,但似乎效果不是很好:
Mat eroded;
double element_size = 25;
RNG rng(12345);
Mat element = getStructuringElement( cv::MORPH_ELLIPSE,cv::Size( 2*element_size + 1, 2*element_size+1 ),cv::Point( element_size, element_size ) );
erode(src, eroded, element);有没有人知道我怎样才能使这段文字变得清晰,使字母变得一致?
发布于 2014-04-16 09:05:26
回想起数字图像处理,我认为Laplacian-Gaussian或Sobel滤波将有助于锐化您的图像。通常,差分滤波器是高频通过/放大滤波器,因此使用这种滤波器进行滤波将导致图像中的高频放大(即边缘、细节)。现在,就OCR而言,直观地说,我认为在原始图像上使用拉普拉斯高斯将提高性能。高斯上的拉普拉斯实际上是一个双通滤波器。首先,高斯滤波器将放大图像的低频,因此将放大暗淡像素的强度(即,您发布的图像上的间隙),而作为二阶微分滤波器的拉普拉斯将放大高频,因此将创建所需的锐化效果。
发布于 2014-04-16 14:51:10
似乎你已经对你的图像做了一些预处理,否则我认为相机捕捉的图像不会自然地看起来是这样的。在这种情况下,我建议使用自适应阈值(adaptive thresholding api in opencv),而不是自己设置阈值。请看(some explanation on how it works)中的区别。这通常比使用魔法阈值要好。
此外,我怀疑形态学操作是否会有所帮助。
发布于 2014-04-16 14:56:00
您是在尝试对您提供的二进制图像执行OCR,还是在另一个图像上执行一些操作并获得该二进制图像?你不应该试图提高图像的质量。
这样想吧。您有一个图像,但该图像的某些部分丢失了。而你正在试图找出这些部分是什么。这不是一个尖锐的问题。这是一个巨大的问题。因此,我认为您应该从原始图像中获得更好的二进制图像来执行OCR。
祝好运。
https://stackoverflow.com/questions/23096644
复制相似问题