从扫描图像中去除背景渐变
Posted
技术标签:
【中文标题】从扫描图像中去除背景渐变【英文标题】:Removing background gradient from scanned image 【发布时间】:2016-11-14 16:22:29 【问题描述】:我正在寻找一种对各种扫描图像进行批量图像处理的好方法。图片非常大(a4 时 300dpi),但图像处理时间不应该成为问题。
一般问题是这样的:图像可能是彩色的,但不一定是彩色的,其中一些是黑白的。它们的中间有一个非常典型的折痕,来自扫描书籍。我想要的是一个清除了该折叠标记的图像,它看起来像一个渐变,并且(作为额外的奖励)颜色偏移,因此实际背景显示为白色/浅灰色。一个示例图像是这样的(来源是 Haeckel 的 Kunstformen der Natur,任何感兴趣的人):
我考虑过在 Python 中使用自适应对比度过滤器来做这件事,但还没有真正想出好的解决方案;几乎任何框架/工具/语言的任何输入都可以帮助我。
【问题讨论】:
您能否添加一些带注释的示例,因为我不明白您要删除的内容。 编辑好的,我想我明白了。内部结构的左侧比右侧更暗。 整个背景颜色不统一。边缘变暗;理想情况下,它会更接近纯色,同时保留细节(参见文字和图纸)。 你的例子没有折叠标记,你也有吗? 折痕并没有比这更强。您实际上没有看到折叠,但您看到扫描不是完全笔直的。 【参考方案1】:这是使用vips 的快速破解。它会进行巨大的模糊(使用 sigma 200 的高斯)来获取背景,然后将图像放大到暗的程度。
#!/usr/bin/env python
import sys
import gi
gi.require_version('Vips', '8.0')
from gi.repository import Vips
image = Vips.Image.new_from_file(sys.argv[1])
# huge gaussian blur to remove all high frequences ... we will just be left with
# the changes in the background
smooth = image.gaussblur(200)
# scale up the darker areas of the original ... we scale up by the proportion they
# are darker than white by
image *= smooth.max() / smooth
# that'll make rather a dazzling white ... knock it back a bit
image *= 0.9
image.write_to_file(sys.argv[2])
像这样运行:
$ time ./remove_gradient.py ~/Desktop/orig.jpg x.jpg
real 0m16.369s
user 0m55.704s
sys 0m0.218s
仍有一些渐晕,但对我来说似乎减少了。
【讨论】:
以上是关于从扫描图像中去除背景渐变的主要内容,如果未能解决你的问题,请参考以下文章