我编写了一个程序,用于将图像转换为使用30种特定颜色的有限调色板的自定义文件格式。
在我的应用程序中,我可以选择使用RGB或YUV颜色空间以及选项:Sierra,Jarvis或Floyd-Steinberg抖动。
但是我注意到,使用颜色表来限制调色板,使用photoshop保存到网页功能比我的程序好得多。
所以我想改进我的应用程序以获得更好的结果。
现在,以Floyd-Steinberg为例,我基本上使用这个伪代码
for each y from top to bottom
for each x from left to right
oldpixel := pixel[x][y]
newpixel := find_closest_palette_color(oldpixel)
pixel[x][y] := newpixel
quant_error := oldpixel - newpixel
pixel[x+1][y ] := pixel[x+1][y ] + quant_error * 7/16
pixel[x-1][y+1] := pixel[x-1][y+1] + quant_error * 3/16
pixel[x ][y+1] := pixel[x ][y+1] + quant_error * 5/16
pixel[x+1][y+1] := pixel[x+1][y+1] + quant_error * 1/16
我的像素以RGB格式存储,并找到最接近的调色板颜色,我使用RGB / YUV中的欧几里德距离。
我一直在阅读CIE94和CIEDE2000色差算法,这些算法对我的“find_closest_palette_color”函数应该更好。
要进行这些计算,我必须将RGB转换为CIELab色彩空间。我可以通过以下方式在我的抖动算法中分配错误时使用CIELab:
答案 0 :(得分:0)
是的,实际上Lab更适合这个目的,因为Lab中颜色之间的欧几里德距离反映了颜色之间的人类感知距离,而RGB中的距离则没有。