【发布时间】:2012-02-27 14:10:07
【问题描述】:
有时我有一个真正的彩色图像,通过使用抖动算法,我可以将颜色减少到只有 256。我想知道抖动算法是如何实现这一点的。
我知道抖动可以减少错误,但是算法如何降低颜色深度,尤其是从真彩色到只有 256 色甚至更少。
【问题讨论】:
标签: image matlab image-processing opencv computer-vision
有时我有一个真正的彩色图像,通过使用抖动算法,我可以将颜色减少到只有 256。我想知道抖动算法是如何实现这一点的。
我知道抖动可以减少错误,但是算法如何降低颜色深度,尤其是从真彩色到只有 256 色甚至更少。
【问题讨论】:
标签: image matlab image-processing opencv computer-vision
抖动通过“混合”定义的调色板中的颜色来模拟更高的颜色深度,以创建一种颜色并不存在的错觉。实际上,它所做的事情与您的计算机显示器已经在做的事情相同:获取一种颜色,将其分解为原色,然后将它们并排显示。您的计算机显示器使用可变强度的红色、绿色和蓝色进行处理,而抖动使用一组固定强度的颜色进行处理。由于您的眼睛的分辨率有限,它会将输入相加,您会感知平均颜色。
同样,报纸可以通过抖动黑色墨水来打印灰度图像。他们不需要大量的中间灰色来获得像样的灰度图像;他们只是在页面上使用更小或更大的黑色墨水点。
当您抖动图像时,您会丢失信息,但您的眼睛以大致相同的方式感知它。从这个意义上说,它有点像 JPEG 或其他有损压缩算法,会丢弃您的眼睛看不到的信息。
【讨论】:
抖动本身不会减少颜色的数量。相反,在减少颜色的过程中会应用抖动,以使颜色减少的伪影不那么明显。
一种颜色介于其他两种颜色之间的颜色可以通过一种颜色的一半和另一种颜色的一半来模拟。这也可以推广到其他百分比。可以通过将 10% 的像素作为第一种颜色,将 90% 的像素作为第二种颜色来模拟混合了 10% 的一种颜色和 90% 的另一种颜色的颜色。这是因为眼睛倾向于将随机变化视为噪声,并将它们平均为一个区域颜色的整体印象。
最有效的抖动算法将跟踪原始图像和减色图像之间的差异,并在转换未来像素时考虑这种差异。这称为误差扩散 - 当前像素上的误差会扩散到其他像素的转换中。
为转换选择最佳 256 种颜色的过程与抖动分离。
【讨论】: