0
我已经编写了一个用于将图像转换为使用30种特定颜色的有限调色板的自定义文件格式的程序。使用CIELab颜色空间用于降低抖动颜色的算法
在我的应用程序中,我给出了在RGB或YUV色彩空间以及Sierra,Jarvis或Floyd-Steinberg抖动的选项。
但是我注意到,使用颜色表来限制颜色调色板的photoshop保存到网络功能比我的程序做得好得多。
所以我想改进我的应用程序,以提供更好的结果。
眼下,随着弗洛伊德 - 斯坦伯格的例子中,我基本上是利用伪代码
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颜色空间
- 对于每个像素找到使用CIE94或CIEDE2000
- 计算在我的调色板中最接近的颜色:通过分布在我的抖动算法的错误后,能否也用的CIELab CIELab颜色空间中的错误(L *,a *,b *而不是RGB)。
- 根据我使用的任何抖动算法以及我在RGB中使用的相同权重分配错误。