Matlab 文档图像二值化

Matlab 文档图像二值化,matlab,image-processing,threshold,Matlab,Image Processing,Threshold,我试图找到有效的文档图像二值化技术。我目前已经实现了niblack和sauvola阈值算法,并尝试了基于直方图评估的二值化。有人能推荐其他被证明有效的二值化方法吗? 下面是我一直在处理的一个降级图像示例: 如果您有任何建议,我们将不胜感激。从简单地根据本地邻居调整阈值开始怎么样 im = rgb2gray(im); im = im2double(im); f_makebw = @(I) im2bw(I.data, double(median(I.data(:)))/1.45); bw = ~

我试图找到有效的文档图像二值化技术。我目前已经实现了niblack和sauvola阈值算法,并尝试了基于直方图评估的二值化。有人能推荐其他被证明有效的二值化方法吗? 下面是我一直在处理的一个降级图像示例:


如果您有任何建议,我们将不胜感激。

从简单地根据本地邻居调整阈值开始怎么样

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);
结果:


欢迎使用堆栈溢出。虽然图像二值化是一个有趣的话题,但您的问题并不适合这样做。如果您在二值化方面有特殊问题,您可以在上提出问题。如果您对二值化的实现有问题,请随意提出另一个问题。同样,Niblack也可以。(您不需要实现数百种算法,只需了解它们如何协同工作以及如何调整参数。在您的情况下),您应该查看局部阈值,并可能对颜色和对比度进行一些预处理。感谢您的帮助@BirgitP。我正在尝试应用几种算法,然后将它们用于我人为添加噪声的文档图像,以便通过与原始图像的比较来评估哪种方法是最好的。这就是为什么我要询问其他哪些方法最适合这个目的。你能推荐一些吗?你能解释一下这个语句的作用吗?f_makebw=@(I)im2bw(I.data,double(I.data(:)))/1.45);@NeedHelp,它对每个区域进行二值化(这里是128x128)基于该区域的中值灰度值。此外,由于除以1.45,阈值略有偏差。由于~blocproc说这是一个未定义的函数,我得到了一个错误。您能告诉我如何更正它吗?在我的示例中,
blockproc
调用了一个匿名函数
makebw
,该函数定义为你很可能在什么地方打错了。