我试图教我的相机成为扫描仪:我拍摄打印文本的照片,然后将它们转换为位图(然后转换为djvu和 OCR'ed)。我需要计算一个阈值,哪个像素应该是白色的,哪个是黑色的,但是我被不均匀的照明所阻碍。例如,如果中心的像素足够暗,我很可能会在角落里看到一堆黑色像素。
在相对简单的假设下,我想做的是在阈值化之前补偿不均匀的照明。更确切地说:
假设有一个或两个光源,可能一个在整个表面上的光强度逐渐变化(环境光),另一个具有反向正方形(直射光)。
假设纸张的白色部分都具有相同的反射率/反照率/其他。
找到一些算法来估计每个像素的照明度,并从中恢复每个像素的反射率。
根据像素的反射率,将其分类为白色或黑色
我不知道如何编写算法来做到这一点。我不想依靠最小二乘拟合,因为在估计照明时我想以某种方式忽略暗像素。我也不知道算法是否可行。
所有有用的建议都将被投票!
编辑:我绝对考虑过将图像切成足够大的块,这样它们仍然看起来像“白色背景上的文本”,但足够小,以至于单块的照明或多或少是均匀的。我认为,如果我随后对阈值进行插值,以使子图像边界之间没有不连续性,我可能会得到一些不错的结果。这是一个很好的建议,我将不得不试一试,但它仍然给我留下了在哪里划清白色和黑色之间的界限的问题。更多想法?
编辑:这里有一些来自 GIMP 的屏幕转储,显示了不同的直方图和每个直方图的“最佳”阈值(手动选择)。在三个中的两个中,整个图像的单个阈值就足够了。然而,在第三个中,左上角确实需要一个不同的阈值: