灰度变换及dithering抖动算法
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抖动算法相关推荐
- Android 墨水屏黑白红色阶算法和抖动算法,拿过去直接用
Android 墨水屏黑白红色阶算法和抖动算法, 拿过去直接用, 有问题直接下面问 色阶法 一张图像,我们可以把它划分为几个大的颜色域,图像上的每个像素点根据颜色跟这几个色域的趋近程度,被划分到这些颜 ...
- 弗洛伊德-斯坦伯格抖动算法
弗洛伊德-斯坦伯格抖动算法 这是一个真实的魔法技术.它愚弄了你的眼睛和大脑,让你以为自己看到的颜色要比实际的多. 一般来说,抖动是通过增加人工噪声去减少一个图像的颜色空间,主旨在于,一个区域的光量应该 ...
- 使用Floyd-Steinberg抖动算法处理价签图片
2019独角兽企业重金招聘Python工程师标准>>> Floyd-Steinberg抖动算法简直量身为价签这种低颜色呈现设备准备的.由于价签的墨水屏能够呈现的色彩非常有限,根据型号 ...
- 串口接收 DMA FIFO 双缓冲区配置 + 单色OLED屏幕灰度图像显示的抖动算法
适用于单色OLED屏幕图像显示的抖动算法 Visual studio c++ STM32F407 0.96寸单色IIC通信OLED 5级灰度 串口DMA.双缓冲 github 抖动算法原理 DITHE ...
- Android 各种图片转黑白图和抖动算法的黑白图
最近做的关于打印机打印图片的项目,需要将图片转为打印机能打的点阵位图.我参考了很多文章,但是也没有说的很详细的,其中流浪的鱼的csdn博客写的比较详细,但是,半路出家的Android菜鸟,表示没看太懂 ...
- 基于错误扩散的Floyd-Steinbery抖动算法简单理解
1. 图像处理中的dithering技术 它是一种欺骗你眼睛,使用有限的色彩让你看到比实际图象更多色彩的显示方式.通过在相邻像素间随机的加入不同的颜色来修饰图象,通常这种方式被用于颜色较少的情 ...
- opencv4.2.0 视频去抖动算法代码
// videostabDemo.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. //#include <iostream>#include ...
- 使用Atkinson抖动算法处理价签图片
找了好久Atkinson的Java实现,始终没找到现成的,只有一个pde的参考: https://github.com/danielepiccone/dithering_algorithms/blob ...
- 程序员自制超迷你智能NFC名片:一张平平无奇的门禁卡,如何变身为用不起的样子?...
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 转自:机器之心 一款火柴盒大小的电子卡片,集公司工牌 ...
最新文章
- java 应用是单机集群_Java集群优化——使用Dubbo对单一应用服务化改造
- QTableView中修改某个单元格或者行或者列内容颜色
- 【Git】Git使用记录: 撤回已经commit到本地的提交记录
- Netty实战 IM即时通讯系统(十)实现客户端和服务端收发消息
- ORA-07445:[SIGFPE] [Integer divide by zero]内部错误一例
- .NET6之MiniAPI(十):基于策略的身份验证和授权
- python 计算订单_python实现apriori算法的关联规则之支持度、置信度、提升度
- SCI论文写作训练营笔记汇总02_英文科技论文阅读与解析
- sap commit rollback
- 老牌社交网站Friends Reunited宣布关闭
- excel表头_Spring Boot实现导出Excel功能
- 不输入密码执行sudo命令方法介绍
- 【报告分享】2020海外留学趋势报告.pdf(附下载链接)
- python统计中文字数_Python实现统计文本文件字数的方法
- 巅峰阁批量卡android,卡iPhoneQQ在线
- c语言中实型变量的三种类型,在C语言中实型变量分为两种类型.doc
- 设置gradle远程仓库_Gradle 创建java项目详细步骤
- RT-Thread Studio 使用笔记(六)| 获取光传感器数据(I2C设备驱动+BH1750手写驱动代码分享)
- Linux之创建组名和删除组名
- 大数据缺省值插补方法(回归填补[stochastic regression imputation],聚类填补,。。)
热门文章
- #sql server 导入excel数据报错 未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序
- [NVME协议8] : 从传输层看PCIE 和 NVME 交互
- Simscape Multibody 答疑(三)
- 旅游电商平台B2C解决方案
- Rhino 7 建模工具 最新Mac版下载
- 百度地图API实现定位与目的地导航
- C#.NET 获取拨号连接 宽带连接
- CenOS 7 网络连接设置
- 1_Java语言概述
- 三星手机安装linux系统下载,三星galaxy nexus刷ubutun系统的详细步骤