将JPEG转换为非抖动位图时如何设置阈值?

时间:2009-08-15 19:13:15

标签: image-processing bitmap jpeg pbmplus

我正在使用我的数码相机作为快速而肮脏的扫描仪。分辨率实际上在300dpi左右,这是非常合理的。但是我的相机产生了一个彩色图像,我希望将其缩小为位图。我想要抖动图像;如果我把文件放在一台黑白扫描仪上,我正在寻找能得到的东西。使用djpeg -grayscale将JPEG转换为灰度图像既简单又标准。困难的部分是决定哪些灰色像素应该是白色,哪些应该是黑色。

pbmplus工具提供

djpeg -grayscale -pnm img.jpg | pgmtopbm -threshold -value $v > img.pbm

但杀手就是那个价值$v。良好的价值似乎在0.3到0.6的范围内,手工重复的反复试验正在扼杀我。 (对于那些更熟悉ImageMagick的人来说,$v就是-black-threshold参数的值。)

我想我可以构建一个可以帮助我更快地找到阈值的GUI,但我真正想要的是和算法来设置阈值以将灰度图像转换为干净的位图。理想情况下,只需检查灰度图像的结构就可以了!

2 个答案:

答案 0 :(得分:0)

色彩空间转换通常使用设备相关的配置文件完成。

您的相机根据其颜色配置文件生成图像,如果您有扫描仪,则会生成符合其颜色配置文件的图像。

如果您的相机具有ICC或ICM配置文件,并且您的设备与您的假设扫描仪设备的输出接近,则可以使用ImageMagickLittle CMS将配置文件应用于您的数据

由于我怀疑您的相机有ICC或ICM配置文件,因此您只需选择the many free ones available on the Internet中的一个。适当的灰度输出配置文件可能更难找到。

如果您无法应用特定于设备的配置文件,则可能会发现ImageMagick can do what you need with it's -colorspace命令。

ICC (International Color Consortium)有一些您可能会觉得有用的程序和信息。

  
    

算法设置阈值以将灰度图像转换为干净的位图

  

如果所有其他方法都失败了,您可以从灰度图像的直方图中获取值吗?

(你的帖子有点令人困惑,因为你声明你的相机输出彩色图像,但你希望它看起来像是通过黑白扫描仪运行。然后你说你要一个算法转换一个灰度图像到“干净”的位图。“请澄清。”

编辑 - 如果您仍在寻找答案,可以使用ImageMagick来应用ICC配置文件。 this page of scanner profile info也可能有所帮助。

convert RGB.jpg -profile "Scanner.icc" BW.jpg

答案 1 :(得分:0)

这并不是我所希望的,但mkbitmap项目中的potrace程序可以很好地将照片转换为位图。在边缘处往往存在一些伪影,但它在消除不相关的低空间频率信号方面做得更好,这使用简单的阈值处理是不可能的。