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

Image processing 如何在将JPEG转换为非抖动位图时设置阈值?,image-processing,bitmap,jpeg,pbmplus,Image Processing,Bitmap,Jpeg,Pbmplus,我用我的数码相机做一个又快又脏的扫描器。分辨率实际上在300dpi左右,这是相当合理的。但是我的相机会产生一个彩色图像,我想把它还原成位图。我不想抖动图像;我在寻找如果我把文件放进黑白扫描仪会得到什么。使用djpeg-grayscale将JPEG转换为灰度图像是很容易的,也是标准的。难点在于决定哪些灰色像素应该是白色,哪些应该是黑色 pbmplus工具提供 djpeg -grayscale -pnm img.jpg | pgmtopbm -threshold -value $v > img

我用我的数码相机做一个又快又脏的扫描器。分辨率实际上在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来帮助我手动更快地找到阈值,但我真正要寻找的是设置阈值的算法,以将灰度图像转换为干净的位图。理想情况下,只需检查灰度图像的结构即可

颜色空间转换通常使用依赖于设备的配置文件完成

您的相机根据其颜色配置文件生成图像,如果您有扫描仪,它将根据其颜色配置文件生成图像

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

由于我怀疑您的相机是否有ICC或ICM配置文件,您可以从中选择一个。合适的灰度输出配置文件可能更难找到

如果无法应用特定于设备的配置文件,则可以找到该命令

有一些您可能会发现有用的程序和信息

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

如果所有这些都失败了,您是否能够从灰度图像的直方图中导出一个值

(您的帖子有点让人困惑,因为您声明您的相机输出彩色图像,但您希望该图像看起来像是通过黑白扫描仪扫描的。然后您声明您希望使用算法将灰度图像转换为“干净”位图。请澄清。)

编辑-如果您仍在寻找答案,可以使用ImageMagick应用ICC配置文件。也可以提供一些帮助

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

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

进入灰度没有问题。我已经对此进行了修正,并添加了一个ImageMagick示例。问题是如何找到阈值。我确信查看直方图可能会有所帮助。但接下来呢?没有某种类型的重采样(双三次、线性等)我不知道这个公式是否存在。有几段数据可以从柱状图中得到,比如实际值的范围和实际值本身。从这里你就可以自己做了。这个链接可能会有帮助:我站起来了。它不是重新采样,而是颜色量化。另一种想法是,将图像加载到PhotoShop或G导入并为其指定单色调色板。这些程序提供了哪些调整/选项?也许你可以从中推断出一些东西。@Norman Ramsey我有一个jpeg文件,我想找到每个像素的颜色。因此我想先将jpg转换为位图,然后将阈值应用到位图文件上[将每个像素转换为黑色或白色],然后编写一个C代码,消除头的前54个字节,然后获得三块字节[RGB]然后检查颜色。现在,我如何从jpeg转换为位图,如何使用imagemagick对其应用阈值?另外,我的C代码的像素处理部分是否正确?谢谢。