您如何将彩色图像二值化?


14

我的朋友有一张彩色的手写汉字图像(基本上是通过照相或扫描在白纸上写的东西),他希望我将其转换为黑白二进制图像。Ubuntu下是否有可以实现此目的的应用程序?

这是一个示例图像:

在此处输入图片说明


Answers:


27

所需的图像处理中称为“阈值”。基本上,它以图像作为输入并输出图像,该图像的所有像素的值都低于给定阈值,而所有像素的值都超过阈值,而所有像素都被设置为白色。这导致来自任意输入图像的黑白图像。

通常,您希望先转换为灰度以获得更可预测的结果,但是也可以对全彩色图像进行阈值处理。

您可以使用诸如GIMP之类的图形工具以交互方式执行此操作(您可以通过主菜单->颜色->阈值找到该工具),也可以使用ImageMagick这样的方式:

convert colored.png -threshold 75% thres_colored.png

在示例映像上运行以上命令将产生如下所示的结果。

OP图像的黑白版本

由于阈值化通常是一个反复试验的过程,以获得您满意的结果,尤其是如果源图像与黑白图像之间的距离不是很近时,我建议使用GUI方法(如果可能),但是无论出于何种原因,您都不可以通过命令行进行选择。为了更好地控制输出,可以先使用颜色曲线,色阶和对比度之类的工具来更好地隔离阈值之前的图像的明暗部分。(实际上,阈值可以看作是使用颜色曲线工具的一种极端情况。)


2
谢谢!由于彩色图像具有RBG三个通道,因此该阈值通常适用于/可以适用于什么?
蒂姆(Tim)2014年

@Tim可能取决于软件,但是我希望将阈值(除非您为每个通道指定或为特定通道指定,请参见例如ImageMagick的convert的-channel选项)将应用于计算出的某种像素“值”从所有渠道。这就是为什么我说您可能想先转换为灰度以获得更可预测的结果的原因。(另请参阅我的编辑。)
CVn 2014年

谢谢!是否存在一些有关帖子中显示的命令适用于阈值的文档?
蒂姆(Tim)

@Tim不是。我希望convert取最大值的一个百分比(每个通道应该为256)或一个特定值,但是当指定百分比时,我只能得到有用的结果。使用图形工具(包括GIMP)进行处理时,通常会得到一个直方图,以显示图像的色调分布。这将对选择合适的价值有很大帮助。除非您有特定的原因,否则仅使用命令行可能确实会带来更多麻烦。
2014年

2
附带说明一下,还存在其他不必依赖于硬编码阈值级别的阈值化方法。例如,ImageMagick包括-lat在考虑周围像素的情况下执行局部自适应阈值的功能。
voithos

7

您可以使用Imagemagick:

convert test.png -colorspace Gray gray_colorspace.png

这里

这是我套用到您的图片后得到的:

在此处输入图片说明


10
“二进制”来自“ bi”,意思是“两个”,因此我假设OP希望将图像转换为纯黑白。转换为灰度会产生两个以上的层次。
的CVn

同意!有道理,+ 1。
mkc 2014年

2

来自ImageMagick的 -monochrome是一个选项,它使用一些智能抖动,并且与-threshold您打算供人类食用的输出相比,其输出更加可见:

convert -monochrome signature.png out.png

在此处输入图片说明

对于这样一个简单的图像,并没有太大的区别,但是对于较大的图像,这是惊人的。


1

您也可以使用netpbm工具包轻松完成此操作:

anytopnm inputfile | ppmtopgm | pgmtopbm > outputfile

ppmtopgm转换为灰度图像,pgmtopbm转换为黑白图像,然后将输出重定向到文件。它将是pbm格式;如果您想要更普通的东西,则必须添加一个输出转换器(例如,pnmtopng类似的东西)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.