首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于CIELab颜色空间的抖动减色算法

基于CIELab颜色空间的抖动减色算法
EN

Stack Overflow用户
提问于 2016-01-08 15:55:44
回答 1查看 566关注 0票数 0

我已经编写了一个程序,用于将图像转换为自定义文件格式,该格式使用30种特定颜色的有限颜色调色板。

在我的应用程序中,我给出了在RGB或YUV颜色空间中工作的选项,以及选择: Sierra、Jarvis或Floyd抖动。

然而,我已经注意到,photoshop的保存到web功能与使用色表限制颜色调色板做了一个比我的程序好得多的工作。

因此,我想改进我的申请,以提供更好的结果。

现在,以Floyd抖动为例,我实际上使用了这个伪代码

代码语言:javascript
复制
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吗:

  1. 将整个图像转换为CIELab颜色空间
  2. 对于每个像素,使用CIE94或CIEDE2000在我的调色板中找到最接近的颜色
  3. 计算CIELab颜色空间中的错误(L*,a*,b*,而不是RGB)。
  4. 按照我在RGB中使用的相同权重的抖动算法来分配错误。
EN

回答 1

Stack Overflow用户

发布于 2016-01-08 18:19:25

是的,实际上Lab更适合这个目的,因为在Lab中,颜色之间的欧几里德距离反映了人类对颜色的感知距离,而RGB中的距离则不是。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34681041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档