看液晶屏手册,发现有一个引脚控制Dithering功能,Dithering功能简单的说就是用有限的颜色经过处理呈现出更多“显示颜色”的技术。
比如只用黑白两种颜色(0和255),表示下面的灰度图(0到255之间):
如果只是简单的二值化,大于128显示白色(255),小于128显示黑色(0),那么效果为:
这样显示效果惨不忍睹。那怎么使用黑白两色表示出0-255的灰度值呢?控制一个区域内黑白两种点数目的比例就可以了。在一个区域内用很小的白点和黑点填充,如果白点和黑点的数目各占一半,这个区域看起来就是灰度值128,其他灰度值也一样。这就是Dithering技术,也叫图像抖动技术。用Dithering技术处理后,效果为:
还有一个例子:
把经过Dithering处理的图像放大后,可以看到图像中只有黑白两种颜色。
彩色图像也是同样的道理,把有限的颜色经过Dithering处理,可以呈现出更多的颜色:
如果上面的用红色和蓝色,组合出紫色。
让我们简单看下灰度变换急dither抖动算法帮助理解
1.灰度变化:
色深是一个可以显示灰阶个数的参数。对于8bit的显示器来说,灰阶数就是256个;对于10bit的显示器来说,灰阶数就是1024个,所以位数越高的显示器,灰阶范围也就越大,图像的明暗变化也就越平滑。
如下图1所示,是一个变化不平滑的灰阶,它对于图像的明暗显示局限性非常的大;
图1
图2是8bit的灰阶范围图,但是由于8bit无法将全部的灰阶显示出来,所以灰阶图上会出现一条一条的条带,这种现象称为“色带”。
![](https://edit.wpgdadawant.com/uploads/news_file/blog/2022/7073/tinymce/______2.png)
图2
图3是16bit的灰阶范围图,可以看到16bit的灰阶范围更为广阔,明暗变化也更为平滑。
图3
2.抖动算法
对于8bit的显示器,加入我们给它足够的补偿,那么8bit的显示器对于灰阶的显示也会更加的平滑。抖动算法( dithering)就是实现这一目的的重要方法,也可以知道,抖动算法就是高精度信号转换到低精度信号时,对损失部分信号的填补与增益。
为什么高精度信号转换为低精度信号时会失真?
试想,高精度信号是一个保留1位小数的等差数列:1.0,1.6,2.2,2.8,3.4……
而低精度信号只能保留每项为整数,这时候这个等差数列会变成什么样?
四舍五入:1,2,2,3,3
向下取整:1,1,2,2,3
向上取整:1,2,3,3,4
常规方法下生成的新数列没有一个能还原出原数列等差排列的效果:新信号不仅丢失了精度,更重要的是变化的幅度不再均匀——这才是最要命的,而这其实就是图像信号中色带(banding)的产生原因。
而抖动算法正为此而生,抖动算法通过在原信号之间增加噪音,使得新信号呈现出和原信号更多的一致性。
下面是一个抖动算法效果的演示:
上图中,左图为原图,原生具有8bit的高位深。当其以低位深输出时,中间的图是不加抖动的结果,而右图使用了一种error diffusion dithering的算法,于是结果迥异。右图虽然增加了噪点,但完全避免了色带的产生。
这个演示告诉了你,在选择显示器时,原生10 bit面板固然最好,但即使8 bit面板仍然能很好地表现10 bit内容。上图是8 bit内容抖动到有效精度不到3bit情况下的结果,可想而知,10 bit内容抖动到8 bit的效果会更好得多,而且基本上不会增加太多可闻的噪点。
Novatek: T-con NT71875支持Dithering function (12bits to 10bits,10bits to 8/6 bits).
撰写:mary.xu@aitgroup.com.cn
评论