⚠️ 这是一个非官方翻译网站,与 ImageMagick Studio LLC 无关。准确信息请参阅原文(https://imagemagick.org/color-thresholding/)

颜色阈值处理

使用颜色阈值处理可以指定一个颜色范围并返回黑白图像。开始色与停止色之间(含两端)的所有颜色都会变为白色,其余的图像像素则变为黑色。两种颜色之间用连字符分隔。阈值处理默认在 sRGB 色彩空间中进行。要在其他色彩空间(目前仅限 sRGB、Gray、HSV、HSL、HCL、HSB 和 HSW)中进行阈值处理,请使用 -colorspace。开始色与停止色可以用(ImageMagick 所识别的)任意色彩空间指定,但一般而言,我们建议你用与 -colorspace 选项相对应的色彩空间来指定它们。对于 Gray 色彩空间,请务必使用比停止值更小的开始值。请注意,色相是循环的——0 和 360 是相同的。不过,如果开始色相值高于停止色相值,跨越色相 = 0 的颜色范围仍然可能有用。

在混用开始色与停止色的色彩空间和图像的色彩空间时,建议谨慎处理。某个色彩空间中的较大范围,在另一个色彩空间中可能只映射到很窄的范围。例如,有人可能会天真地认为,即便使用 -colorspace HSV,sRGB(0,0,0) 到 sRGB(255,255,255) 也会生成一张捕获所有颜色的白色图像。但这两种颜色是黑色和白色,因而只会作为 hsv(0,0%,0%) 和 hsv(0,0%,100%) 映射到灰度范围。对于一张彩色图像,你大概不会找到太多灰色像素。

为了说明颜色阈值处理的工作方式,使用这张图像:

convert input-image -colorspace XXX -color-threshold "start - stop" output-image

以下是一些典型的使用示例:

[Color Thresholding]

首先选择一种 sRGB 颜色(图像上的某处,本例中为花的黄色),并将其向低端和高端偏移,以构成两种 sRGB 颜色。较低的值构成开始色,较高的值构成停止色。从 sRGB(183,132,20) 开始。将其各值偏移 +-20 来确定开始色(-)和停止色(+),即 R=183+-20、G=132+-20、B=40+-20:

magick monet.jpg -color-threshold 'sRGB(163,112,0)-sRGB(203,152,40)' monet.gif

这会返回黄色花瓣的轮廓:

[Color Thresholding]

接下来,选取两种 RGB 颜色: sRGB(159,150,0) 和 sRGB(205,100,45):

magick monet.jpg -color-threshold 'sRGB(159,150,0)-sRGB(205,100,45)' monet.gif



![\[Color Thresholding\]](https://imagemagick.org/image/color-thresholding-rgb.gif)




接下来,选取一种 sRGB 颜色并将其转换为 HSV,再将其各值向低端和高端偏移,以生成开始与停止的 HSV 颜色。要将图像转换为 HSV,请使用 -colorspace HSV。在我们的 HSV 示例中,选取 sRGB(183,132,20) 并转换为 HSV:






magick xc:"srgb(183,132,20)" -colorspace HSV txt:
# ImageMagick pixel enumeration: 1,1,65535,hsv
0,0: (41.227,89.071%,71.7647%) #1D51E405B7B7 hsv(41.227,89.071%,71.7647%)

接下来,将其 HSV 值偏移为 H=41+-20、S=89+-10、V=72+-10,以创建开始色(-)和停止色(+):

magick monet.jpg -colorspace HSV -color-threshold 'hsv(21,79%,62%)-hsv(61,99%,85%)' monet.gif

[Color Thresholding]

接下来,选取两种 RGB 颜色。使用 -colorspace HSV 将图像转换为 HSV,并应用 RGB 的开始色与停止色。选择 sRGB(158,77,33) 和 sRGB(213,217,2):

magick monet.jpg -colorspace HSV -color-threshold "sRGB(158,77,33)-sRGB(213,217,2)" monet.gif

预期结果如下:

[Color Thresholding]

接下来,选取两种 sRGB 颜色并将它们转换为灰度。然后将图像转换为灰度,并使用这些灰度阈值颜色。

magick xc:"sRGB(159,150,0)" -colorspace gray txt:
# ImageMagick pixel enumeration: 1,1,65535,gray
0,0: (36259.1) #8DA38DA38DA3 gray(55.3278%)

magick xc:"sRGB(205,100,45)" -colorspace gray txt:
# ImageMagick pixel enumeration: 1,1,65535,gray
0,0: (30418.2) #76D276D276D2 gray(46.4152%)

请注意,开始强度必须小于停止强度:

magick monet.jpg -colorspace gray -color-threshold 'gray(46.4152%)-gray(55.3278%)' monet.gif

颜色阈值处理操作的结果如下:

[Color Thresholding]