首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何补偿打印页面照片中的不均匀照明?

如何补偿打印页面照片中的不均匀照明?
EN

Stack Overflow用户
提问于 2009-11-28 14:44:50
回答 10查看 4K关注 0票数 5

我正在尝试教我的相机成为扫描仪:我拍摄打印文本的照片,然后将它们转换为位图(然后转换为djvu和OCR‘)。我需要计算一个阈值,哪些像素应该是白色的,哪些是黑色的,但是我被不均匀的光照所阻碍。例如,如果中间的像素足够暗,我很可能会在角落里看到一堆黑色的像素。

在相对简单的假设下,我想做的是在阈值之前补偿不均匀的光照。更准确地说:

  • 假设有一个或两个光源,可能一个光源的光线强度在表面上逐渐变化(环境光),另一个光源的光线强度与正方形相反(直射光)。
  • 假设纸张的白色部分都具有相同的反射率/反照率/其他值。
  • 找到一些算法来估计每个像素的照度,并由此恢复每个像素的反射率。
  • 根据像素的反射率,将其分类为白色或黑色

我不知道如何编写一个算法来做到这一点。我不想退回到最小二乘拟合,因为我想忽略估计照度时的暗像素。我也不知道这个算法是否有效。

所有有用的建议都会得到支持!

编辑:我确实考虑过将图像分成足够大的部分,这样它们看起来仍然像“白色背景上的文本”,但足够小,以便单个部分的照明或多或少是均匀的。我想,如果我对阈值进行插值,这样就不会在子图像边界上出现不连续,我可能会得到一些还算不错的东西。这是一个很好的建议,我将不得不试一试,但它仍然给我留下了一个问题,即在哪里划清白色和黑色之间的界限。更多的想法?

编辑:这里是一些来自GIMP的屏幕转储,显示了不同的直方图和每个直方图的“最佳”阈值(手动选择)。在三个阈值中的两个中,整个图像的单个阈值就足够好了。然而,在第三个例子中,左上角确实需要一个不同的阈值:

EN

回答 10

Stack Overflow用户

发布于 2011-11-10 12:03:21

我不确定过了这么久,你是否还需要一个解决方案,但如果你仍然需要解决方案的话。几年前,我和我的团队用相机拍摄了大约250,000页,并将它们转换成(几乎是黑白的)灰度图像,然后我们进行DjVued (也制作pdf)。

(请参阅法国Pondicherry研究所1144份论文抄本目录及全集。)

我们还遇到了照明不均匀的问题。我们提出了一个简单而简单的解决方案,在实践中效果非常好。这个解决方案还应该创建黑白图像,而不是灰度图像(正如我将描述的那样)。

1. 摄像机和照明设置

a)我们用胶带把一个空的相框贴在桌子的顶部,使我们的页面保持在完全相同的位置。

b)我们把相机放在三脚架上,也放在上面的桌子上,指向下面的胶带相框和一个大约一英尺宽的杆子,连接到相机顶部的外部闪光灯支架上,我们安装了两个“造型灯”。这些相机可以在任何一家好的相机商店买到。它们被设计成提供均匀的照明。相机通过在每个模型灯周围放置一个小纸箱来遮挡灯光。我们拍摄了灰度图像,然后进行进一步处理。(我们的页面是用蓝色墨水书写的棕色旧纸,所以你的案例应该更简单)。

2. 图像的处理

我们使用的是免费软件包irfanview视图

该软件具有批处理模式,可以同时进行颜色校正、位深改变和图像裁剪。我们会拍摄一张页面的照片,然后在交互模式下调整亮度、对比度和gamma设置,直到它接近黑白。(我们使用灰度,但通过将位深度设置为2,当您批量处理所有页面时,您将获得黑白效果。)在确定了最佳颜色校正后,我们交互地裁剪了一张图像,并记录了裁剪设置。然后,我们在批处理模式窗口中设置所有这些设置,并处理一本书的页面。

3. 创建DjVu图像。

我们使用免费的DjVu Solo 3.1来创建DjVu镜像。这有几种模式来创建DjVu图像。创建黑白图像的模式对我们的照片来说不是很好,但“照片”模式可以。

我们没有OCR (因为图像是手写梵文),但只要字母均匀地照亮,我认为你的OCR软件应该忽略大的黑色区域,比如两页之间的跨页。但是你总是可以通过裁剪页面两次来消除两页之间或边缘的黑色,一次用于左侧页面,一次用于右侧页面,irfanview软件将允许您巧妙地对页面进行编号,以便您可以按正确的顺序重新合并页面。也就是说,将页面重命名为类似page-xxxA的左侧页面和page-xxxB的右侧页面,然后页面将按名称正确排序。

如果你仍然需要一个解决方案,我希望上面的一些对你有用。

票数 5
EN

Stack Overflow用户

发布于 2009-11-28 16:22:47

我建议校准相机。考虑到您的照明设置是固定的(即灯光不会在图片之间移动),并且您的相机是灰度(而不是彩色)。

拍摄一张覆盖了“扫描仪”整个工作区域的白纸的照片。存储这张图片,它告诉每个像素什么是白纸。现在,当您拍摄要扫描的文档的图片时,您可以在执行阈值之前重新加载“白色参考图片”甚至照明。

让我们称白色参考REF,图片DOC,均匀照明图片为偶数,像素MAX的最大值(对于8位成像,它是255)。对于每个像素:

代码语言:javascript
复制
EVEN = DOC * (MAX/REF)

备注:

  • 注意括号:大多数图像处理库使用image像素类型来执行像素值的计算,简单的乘法将会重载您的像素。最后,自己编写循环,并使用32位整数进行中间计算。
  • 在该过程中使用白色参考图像之前,可以对其进行平滑。任何平滑或模糊的滤镜都可以,不要犹豫,积极地应用它。
  • 上面公式中的MAX值表示结果图像中的目标像素值。使用最大像素值目标为明亮的白色,但可以调整该值以目标为较浅的灰色。
票数 2
EN

Stack Overflow用户

发布于 2009-11-28 14:49:59

好吧。通常我做的图像处理是高度时间敏感的,所以像你正在寻找的那种复杂的算法是不会起作用的。但是。..。..。您是否考虑过将图像分割成更小的部分,并重新缩放每个子图像?这应该会使“暗”像素非常突出,即使在可变光照条件的图像中(我在这里假设您正在谈论的是一个标准的、主要是白色的、带有深色文本的页面)。

这是一种欺骗,但比你建议的“正确”方式容易得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1811800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档