2012-07-13 92 views
11

将图像预处理操作应用于EmguCV中的文本识别的最佳图像预处理操作是什么?用于文本识别的图像预处理

我已经包含两个示例图像here

应用低通滤波器或高通滤波器将不适合,因为文本可能具有任何大小。我试过了中位数和双边滤波器,但它们似乎并没有太大影响图像。

理想的结果是一个二进制图像,所有文本都是白色的,其余大部分都是黑色的。这个图像将被发送到OCR引擎。

谢谢

+1

请问您可以在这里上传这些示例图片吗?链接给出403禁止 – Alupotha 2017-01-29 01:34:55

回答

16

没有什么比最佳设置。请记住,数字图像可以通过不同的捕捉设备获取,每个设备可以嵌入自己的预处理系统(过滤器)和其他特性,可以彻底改变图像,甚至为它们添加噪音。所以每个案例都必须以不同的方式进行处理(预处理)。

然而,有commmon操作可以用来完善的检测,例如,一个很基本的一个将是为灰度和应用threshold二值化图像的图像转换。我之前使用的另一种技术是the bounding box,它允许您检测文本区域。为了消除图像中的噪音,您可能会对腐蚀/扩张操作感兴趣。我在this post上演示了一些这些操作。

此外,大约有OCR和OpenCV其他有趣的帖子,你应该看看:

现在,只要向你展示一个简单的方法,可以与您的示例图像一起使用,这是反转颜色并应用阈值的结果:

cv::Mat new_img = cv::imread(argv[1]); 
cv::bitwise_not(new_img, new_img); 

double thres = 100; 
double color = 255; 
cv::threshold(new_img, new_img, thres, color, CV_THRESH_BINARY); 

cv::imwrite("inv_thres.png", new_img); 
+0

我想我必须为每张图片找到正确的侵蚀/扩张操作集。现在,我似乎无法找到适合所有图像的组合。不过,分水岭的例子效果最好。 – Osiris 2012-07-17 03:51:54

+0

有没有其他的方法来检测图像中的文字? – Maystro 2013-04-16 18:44:37

+1

第二个OpenCV链接已经死了,下面是一个替代方案:https://github.com/damiles/basicOCR – yurez 2015-12-16 14:05:41

2

尝试形态学图像处理。看看this。但是,它只适用于二进制图像 - 所以你将不得不二进制化图像(阈值?)。虽然很简单,但它依赖于字体大小,所以一个结构元素不适用于所有字体大小。如果你想要一个通用的解决方案,图像中有许多用于文本检测的论文 - 谷歌学者搜索这个术语应该为你提供一些有用的出版物。

+0

谢谢,那篇论文将会非常有用。我研究了形态学操作,但正如你所说,它们依赖于文本大小。 – Osiris 2012-07-17 03:47:57