减色算法(ColorQuantization)是一种应用在色彩空间中用于减少图像离散色彩值的一类算法,旨在通过减少图像的离散色彩值从而减少了每个色彩值的表示比特数。一方面达到压缩图像的效果,另一方面使得一些以固定有限比特数表示像素的显示设备也能显示每个像素更多表示比特的图像。
中位切割算法(Median Cut)是最知名、应用最广泛的减色算法,常见的图像处理软件如 Photoshop、GIMP 等都使用了这个算法或其变种。
假设有一张 RGB 图像,想要降低图像中色彩数目到 256 色。中位切割算法流程如下:
假设有一张 RGB 图像,其每个像素的每个分量(R、G、B)均用 888 比特表示,要想将其色彩数目由 256 \times 256 \times 256 降低到 256,简单伪代码部分实现如下:
<R,G,B> 像素值的像素数量Global FREQUENCIES [0..255][0..255][0..255]
Global IMAGE [1..IMAGEHEIGHT][1..IMAGEWIDTH]
Procedure GatherFrequencies
Begin
For II = 1 To IMAGEHEIGHT Do
Begin
For JJ = 1 To IMAGEWIDTH Do
Begin
RED = IMAGE[II][JJ].RED
GREEN = IMAGE[II][JJ].GREEN
BLUE = IMAGE[II][JJ].BLUE
FREQUENCIES[RED][GREEN][BLUE] = FREQUENCIES[RED][GREEN][BLUE] + 1
End
End
End[Rl,Rr]、[Gl,Gr]、[Bl,Br]:Global FREQUENCIES [0..255][0..255][0..255]
Function DivideBlueInHalf
Begin
COUNT = 0
For BLUECUT = Bl to Br Do
Begin
For II = Rl to Rr Do
Begin
For JJ = Gl to Gr Do
Begin
COUNT = COUNT + FREQUENCIES[II][JJ][BLUECUT]
End
End
If COUNT > IMAGEHEIGHT * IMAGEWIDTH / 2 Then
Return BLUECUT
End
Return Br
End