- FRC算法
FRC(Frame Rate Control)像素抖动算法利用人眼视觉惰性生理特性,这个特性大致指的就是人眼的亮度感觉并不会随着物体亮度的消失而立即消失。对相邻的 2 个灰阶实施时间混色来实现中间亮度的显示,从而达到在 TFT-LCD 上实现目标灰阶显示的一种方法。
图1 FRC控制算法原理示意图
如果4帧全为白色的图像,那么眼睛感觉到的就是纯白的图像。在这四帧图像中加入黑色的图像,随着黑色图像的增加人的视觉效果也会由纯白变为纯黑。运用时间的抖动方式可以产生多个中间层级灰阶。
每一种颜色均由 RGB 分量组成,RGB 分量的比特数决定了颜色的丰富度。 - Dither算法
FRC算法是在时间上进行混色,而dither算法是通过在空间进行混色。几个像素点离得很近,那么从远处看,眼睛感知的是这些颜色接近于平均的颜色,,从而产生一些中间的灰度。
图2 抖动算法原理示意图
可以把靠的很近的16个像素看成一个大像素,这16个像素叫做大像素的子像素。对于子像素来说,只有黑白两种灰度,通过合理的分配黑白的比例,人的眼睛会自然地将这些像素的色彩进行混色,因而,对于大像素来说,就会产生更多的灰度。就像一个陀螺表面被涂上一半黑色一半白色,当陀螺高速转动时颜色就会变成介于黑色与白色中间的一种灰色,陀螺转速一定的情况下,这种组合而成的灰色随着黑色占比增加而加深,随着白色占比增加而减少,这种现象与dither算法原理相似。 - 抖动算法实现
实际应用中,一般都是将dither和FRC结合起来使用才能有比较好的视觉效果。也就是空间像素抖动变化与时间像素抖动变化相结合。
如果只使用静态的矩阵抖动,会产生方块效应。如果将抖动矩阵划分为像素块,每个像素块的灰度仍然不变但是抖动矩阵的样式是不断变化的,避免了抖动图案的叠加,从而一定程度上消除了方块效应。
非常推荐大家关注我刚开通的 公众号【FPGA开发笔记】,我每天都会更新分享发布自己在FPGA开发过程中的心得和收货,也会分享一些硬件电路、电子DIY、嵌入式软件相关的文章。