Jac*_*Lee 4 matlab opencv image image-processing computer-vision
有时我有一个真正的彩色图像,通过使用抖动算法,我可以将颜色减少到256.我想知道抖动算法如何实现这一点.
我知道抖动可以减少误差,但算法如何减少颜色深度,特别是从真彩色到256色甚至更少.
小智 6
抖动通过在定义的调色板中"混合"颜色来模拟更高的颜色深度,以创建实际上不存在的颜色的错觉.实际上,它正在做与您的计算机显示器已经在做的相同的事情:获取颜色,将其分解为原色,并将它们显示在彼此旁边.您的计算机显示器使用可变强度的红色,绿色和蓝色进行操作,而抖动使用一组固定强度颜色进行.由于您的眼睛分辨率有限,它会对输入进行求和,并且您会感知平均颜色.
以同样的方式,报纸可以通过抖动黑色墨水来打印灰度图像.它们不需要大量的中间灰色来获得合适的灰度图像; 他们只是在页面上使用更小或更大的黑色墨水点.
当您抖动图像时,您会丢失信息,但您的眼睛会以相同的方式感知它.从这个意义上讲,它有点像JPEG或其他有损压缩算法,它会丢弃您的眼睛无法看到的信息.
抖动本身不会减少颜色数量。相反,在减少颜色的过程中应用抖动,以使减少颜色的伪像变得不那么明显。
介于其他两种颜色之间的颜色可以通过一种颜色的一半和另一种颜色的一半的图案来模拟。这也可以推广到其他百分比。可以通过将 10% 的像素作为第一种颜色、将 90% 的像素作为第二颜色来模拟由 10% 的一种颜色和 90% 的另一种颜色混合而成的颜色。这是因为眼睛倾向于将随机变化视为噪声,并将它们平均到某个区域颜色的整体印象中。
最有效的抖动算法将跟踪原始图像和减色图像之间的差异,并在转换未来像素时考虑到这种差异。这称为误差扩散——当前像素上的误差扩散到其他像素的转换中。
选择最佳 256 种颜色进行转换的过程与抖动是分开的。