我已经编写了一个程序,用于将图像转换为自定义文件格式,该格式使用30种特定颜色的有限颜色调色板。
在我的应用程序中,我给出了在RGB或YUV颜色空间中工作的选项,以及选择: Sierra、Jarvis或Floyd抖动。
然而,我已经注意到,photoshop的保存到web功能与使用色表限制颜色调色板做了一个比我的程序好得多的工作。
因此,我想改进我的申请,以提供更好的结果。
现在,以Floyd抖动为例,我实际上使用了这个伪代码
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吗:
发布于 2016-01-08 18:19:25
是的,实际上Lab更适合这个目的,因为在Lab中,颜色之间的欧几里德距离反映了人类对颜色的感知距离,而RGB中的距离则不是。
https://stackoverflow.com/questions/34681041
复制相似问题