1.灰度变化:

色深是一个可以显示灰阶个数的参数。对于8bit的显示器来说,灰阶数就是256个;对于10bit的显示器来说,灰阶数就是1024个,所以位数越高的显示器,灰阶范围也就越大,图像的明暗变化也就越平滑。

如下图1所示,是一个变化不平滑的灰阶,它对于图像的明暗显示局限性非常的大;

图1

图2是8bit的灰阶范围图,但是由于8bit无法将全部的灰阶显示出来,所以灰阶图上会出现一条一条的条带,这种现象称为“色带”。

图2

图3是16bit的灰阶范围图,可以看到16bit的灰阶范围更为广阔,明暗变化也更为平滑。

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的效果会更好得多,而且基本上不会增加太多可闻的噪点。

灰度变换及dithering抖动算法相关推荐

  1. Android 墨水屏黑白红色阶算法和抖动算法,拿过去直接用

    Android 墨水屏黑白红色阶算法和抖动算法, 拿过去直接用, 有问题直接下面问 色阶法 一张图像,我们可以把它划分为几个大的颜色域,图像上的每个像素点根据颜色跟这几个色域的趋近程度,被划分到这些颜 ...

  2. 弗洛伊德-斯坦伯格抖动算法

    弗洛伊德-斯坦伯格抖动算法 这是一个真实的魔法技术.它愚弄了你的眼睛和大脑,让你以为自己看到的颜色要比实际的多. 一般来说,抖动是通过增加人工噪声去减少一个图像的颜色空间,主旨在于,一个区域的光量应该 ...

  3. 使用Floyd-Steinberg抖动算法处理价签图片

    2019独角兽企业重金招聘Python工程师标准>>> Floyd-Steinberg抖动算法简直量身为价签这种低颜色呈现设备准备的.由于价签的墨水屏能够呈现的色彩非常有限,根据型号 ...

  4. 串口接收 DMA FIFO 双缓冲区配置 + 单色OLED屏幕灰度图像显示的抖动算法

    适用于单色OLED屏幕图像显示的抖动算法 Visual studio c++ STM32F407 0.96寸单色IIC通信OLED 5级灰度 串口DMA.双缓冲 github 抖动算法原理 DITHE ...

  5. Android 各种图片转黑白图和抖动算法的黑白图

    最近做的关于打印机打印图片的项目,需要将图片转为打印机能打的点阵位图.我参考了很多文章,但是也没有说的很详细的,其中流浪的鱼的csdn博客写的比较详细,但是,半路出家的Android菜鸟,表示没看太懂 ...

  6. 基于错误扩散的Floyd-Steinbery抖动算法简单理解

    1. 图像处理中的dithering技术     它是一种欺骗你眼睛,使用有限的色彩让你看到比实际图象更多色彩的显示方式.通过在相邻像素间随机的加入不同的颜色来修饰图象,通常这种方式被用于颜色较少的情 ...

  7. opencv4.2.0 视频去抖动算法代码

    // videostabDemo.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. //#include <iostream>#include ...

  8. 使用Atkinson抖动算法处理价签图片

    找了好久Atkinson的Java实现,始终没找到现成的,只有一个pde的参考: https://github.com/danielepiccone/dithering_algorithms/blob ...

  9. 程序员自制超迷你智能NFC名片:一张平平无奇的门禁卡,如何变身为用不起的样子?...

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 转自:机器之心 一款火柴盒大小的电子卡片,集公司工牌 ...

最新文章

  1. java 应用是单机集群_Java集群优化——使用Dubbo对单一应用服务化改造
  2. QTableView中修改某个单元格或者行或者列内容颜色
  3. 【Git】Git使用记录: 撤回已经commit到本地的提交记录
  4. Netty实战 IM即时通讯系统(十)实现客户端和服务端收发消息
  5. ORA-07445:[SIGFPE] [Integer divide by zero]内部错误一例
  6. .NET6之MiniAPI(十):基于策略的身份验证和授权
  7. python 计算订单_python实现apriori算法的关联规则之支持度、置信度、提升度
  8. SCI论文写作训练营笔记汇总02_英文科技论文阅读与解析
  9. sap commit rollback
  10. 老牌社交网站Friends Reunited宣布关闭
  11. excel表头_Spring Boot实现导出Excel功能
  12. 不输入密码执行sudo命令方法介绍
  13. 【报告分享】2020海外留学趋势报告.pdf(附下载链接)
  14. python统计中文字数_Python实现统计文本文件字数的方法
  15. 巅峰阁批量卡android,卡iPhoneQQ在线
  16. c语言中实型变量的三种类型,在C语言中实型变量分为两种类型.doc
  17. 设置gradle远程仓库_Gradle 创建java项目详细步骤
  18. RT-Thread Studio 使用笔记(六)| 获取光传感器数据(I2C设备驱动+BH1750手写驱动代码分享)
  19. Linux之创建组名和删除组名
  20. 大数据缺省值插补方法(回归填补[stochastic regression imputation],聚类填补,。。)

热门文章

  1. #sql server 导入excel数据报错 未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序
  2. [NVME协议8] : 从传输层看PCIE 和 NVME 交互
  3. Simscape Multibody 答疑(三)
  4. 旅游电商平台B2C解决方案
  5. Rhino 7 建模工具 最新Mac版下载
  6. 百度地图API实现定位与目的地导航
  7. C#.NET 获取拨号连接 宽带连接
  8. CenOS 7 网络连接设置
  9. 1_Java语言概述
  10. 三星手机安装linux系统下载,三星galaxy nexus刷ubutun系统的详细步骤