2012-03-30 42 views
4

我正在尝试为文档图像找到有效的二值化技术。我目前实现了niblack和sauvola阈值算法,并尝试基于直方图评估的二值化。有人能请建议其他已证明有效的二值化方法吗? 下面是一个示例退化图像我一直使用:文档图像二值化

enter image description here

http://spie.org/Images/Graphics/Newsroom/Imported/0681/0681_fig1.jpg

任何建议将非常感激。

+0

开山鼻祖堆栈溢出。虽然图像二值化是一个有趣的话题,但您的问题不适合SO。如果您在二值化时遇到特殊问题,可以在http://dsp.stackexchange.com/上提问。如果您在实现二进制化时遇到问题,请随时就SO提出另一个问题。 – Simon 2012-03-30 12:03:05

+1

再次,尼布拉克会工作。 (http://imgur.com/pR1iN)你不需要实现数以百计的算法 - 只要理解它们是如何一起工作的以及如何调整参数就你的情况而言,你应该看看本地阈值,一些关于颜色和对比度的预处理 – 2012-03-30 13:54:50

+0

感谢您的所有帮助@BirgitP。我试图应用几种算法,然后在文档图像上使用它们来人工添加噪声,这样我就可以通过比较来评估哪种方法是最好的方法与原始图像。这就是为什么我询问哪些其他方法最适合的目的。请您建议一些?? – NeedHelp 2012-03-30 21:35:08

回答

10

从简单地调整基于本地邻域的阈值开始如何?

im = rgb2gray(im); 
im = im2double(im); 
f_makebw = @(I) im2bw(I.data, double(median(I.data(:)))/1.45); 
bw = ~blockproc(im, [128 128], f_makebw); 

结果:

enter image description here

+0

你能解释这个说法是什么?f_makebw = @(I)im2bw(I.data,double (median(I.data(:)))/ 1.45); – NeedHelp 2012-04-02 17:57:44

+0

@NeedHelp,它根据该区域的中值灰度值对每个区域(这里是128x128)进行二进制化处理,此外由于除以1.45,阈值略有偏差。 – Maurits 2012-04-02 18:41:09

+0

由于〜blocproc,我得到一个错误,说它是一个未定义的功能。请告诉我如何纠正它, – NeedHelp 2012-04-03 20:08:55