1.参考(我的示例代码在页面底端)

可参考8x8 Bayer matrix: https://github.com/libretro/glsl-shaders/blob/master/dithering/shaders/bayer-matrix-dithering.glsl

BayerFilter: https://en.wikipedia.org/wiki/Bayer_filter

2.Ordered Dithering(有序抖动法,It is an image dithering algorithm)

wiki:https://en.wikipedia.org/wiki/Ordered_dithering

一篇不错的抖动算法描述:https://blog.csdn.net/paris_he/article/details/40341233

Arbitrary size threshold maps can be devised with a simple rule: First fill each slot with a successive integers. Then reorder them such that the average distance between two successive numbers in the map is as large as possible, ensuring that the table "wraps" around at edges.[citation needed] For threshold maps whose dimensions are a power of two, the map can be generated recursively via:

上图的 U 为元素都为1的对应方阵

M3(8×8阵)比较特殊,称为Bayer抖动表(上面的1/64图所表示的矩阵就是)

3.应用Ordered Dither在Banding效果图上的示例:

原图

4 x 4 Bayer matrix  Dithered效果:

8 x 8 Bayer matrix Dithered效果:

原理示例代码(JS):

let type = 8;// 4x4 Bayer Matrixlet threshold = [[0,8,2,10,0],[12,4,14,6,12],[3,11,1,9,3],[15,7,13,5,15]];if(type != 4){// 8 x 8 Bayer Matrixthreshold = [[0,48,12,60,3,51,15,63],[32,16,44,28,35,19,47,31],[8,56,4,52,11,59,7,55],[40,24,36,20,43,27,39,23],[2,50,14,62,1,49,13,61],[34,18,46,30,33,17,45,29],[10,58,6,54,9,57,5,53],[42,26,38,22,41,25,37,21]];}//let i = 0;let j = 0;let k = 0;let value = 0;for(; i < m_img.height; ++i){for(j = 0; j < m_img.width; ++j){k = (i * m_img.width + j) * 4;value = Math.floor(0.333 * (pixData[k] + pixData[k+1] + pixData[k + 2]));if(type != 4){                    if ((value>>2) > threshold[i&7][j&7]){value = 255;}else{value = 0;}}else{                                        if ((value>>2) > threshold[i&3][j&3]){value = 255;}else{value = 0;}}pixData[k] = value;pixData[k+1] = value;pixData[k+2] = value;pixData[k+3] = 255;}}

4.Floyd–Steinberg Dithering

Wiki: https://en.wikipedia.org/wiki/Floyd%E2%80%93Steinberg_dithering

Error diffusion: https://en.wikipedia.org/wiki/Error_diffusion

原图:

抖动之后的图:

如果用更少的色阶来表示这两张图,抖动之后的图效果要比原图好很多(可以用色调分离和模糊这两个操作来做实验)

关于Dither技术的小故事: 据说最早源自二战,当时的轰炸机飞行员使用机械计算机来进行导航和bomb轨道计算。奇怪的是,这些计算机(由上百机械零件组成)在飞机甲板上要比在地面上工作地更为准确。工程师们意识到飞机的震动降低了它的一些活动部件所导致的误差。为了让它们更好的工作,工程师基于这个原理为这种计算机安装了震动马达,他们把这些马达的震动叫做Dither

Dither(抖动): Bayer Matrix(Bayer ordered dither matrix)与Bayer Filter(拜尔滤镜)相关推荐

  1. matlab抖g是什么,MATLAB中dither抖动函数的用法

    不知道dither存在的意义,既然MATLAB中有它,就一定有它的价值吧,书上说在出版和印刷业中应用的较多,我也不清楚. MATLAB帮助文档说dither可抖动灰度图像和RGB彩色图像,将灰度图像转 ...

  2. android matrix 简书,android matrix

    (1) 构造函数 public Matrix() public Matrix(Matrix src) 构造函数有两个,第一个是直接创建一个单位矩阵,第二个是根据提供的矩阵创建一个新的矩阵(采用deep ...

  3. c++实现Matlab矩阵Matrix类(实矩阵Matrix、复矩阵CMatrix)

    全栈工程师开发手册 (作者:栾鹏) matlab2c动态链接库下载 matlab库函数大全 matlab2c基础教程 matlab2c开发全解教程 开发注意事项: 1.目前matlab2c对矩阵的实现 ...

  4. Matrix: android 中的Matrix (android.graphics.Matrix) (转)

    本篇博客主要讲解一下如何处理对一个Bitmap对象进行处理,包括:缩放.旋转.位移.倾斜等.在最后将以一个简单的Demo来演示图片特效的变换. 1. Matrix概述 对于一个图片变换的处理,需要Ma ...

  5. Coding the Matrix Week 3 The Matrix 矩阵

    本周共有三次作业.所花费的时间为一天左右,还算可以,需要注意的是考虑一些特殊情况,写出能够通用的程序,这就行了. 体会 set()和{}结果相同,可以通用,可以采取后者. >>> t ...

  6. the jacobian matrix and the gradient matrix

    引用于Matrix Differential Calculus with Applications in Statistics and Econometrics, 99

  7. c实现 图像dither算法_Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结...

    Atitit (Sketch Filter)素描滤镜的实现  图像处理attilax总结 Sch lg java d sketch filter aigo se ,ma sinsho ..byedu ...

  8. 显著性检测的四种经典方法

    最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以下将研究的一些收获和经验共享. 先从最简单的最容易实现的算法说起吧: 1. LC算法 参考论文:Visual Attenti ...

  9. 四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT

    本篇博文来自博主Imageshop,打赏或想要查阅更多内容可以移步至Imageshop. 转载自:https://www.cnblogs.com/Imageshop/p/3889332.html  侵 ...

  10. 四种简单的图像显著性区域特征提取方法-----AC/HC/LC/FT。

    四种简单的图像显著性区域特征提取方法-----> AC/HC/LC/FT. 分类: 图像处理 2014-08-03 12:40 4088人阅读 评论(4) 收藏 举报 salient regio ...

最新文章

  1. python找工作学历_第一学历和最高学历,哪一个对找工作帮助更大?
  2. python与excel表格-超简单:用Python让Excel飞起来
  3. 各种Camera,总有一款适合你(二)
  4. 电脑鼠标自己乱跳乱点_无线鼠标VS有线鼠标,二者区别何在?你可知晓?不妨来了解一下...
  5. java platform_Java Platform Module系统中的可选依赖项
  6. 华为美国研发中心将迁至加拿大;高通CEO否认中国5G超美国:技术上还没有,顶多算并驾齐驱;亚马逊宣布进军量子界……...
  7. C#中get和SET
  8. 《深入理解分布式事务》第七章 XA 强一致性分布式事务原理
  9. 【Kafka】kafka replication factor : 3 larger than avaiable brokers:2
  10. java实现线性表的案例_数据结构—线性表(LinearList)的原理以及Java实现案例
  11. 直播、线上办公、IoT需求井喷,Wi-Fi 6如何防止网络“塞车”?
  12. MOQL--操作数(Operand) (二)
  13. 用iFrame遮挡DropDownList的方法
  14. DP动态规划之01背包问题
  15. 毕设-周报-20150520
  16. 粒子群算法及C语言实现
  17. [经典好文] 谈笑色影间,人生本无忌 (转于色影无忌)
  18. Flink1.13 DataStream API - Event Time - Generating Watermarks
  19. 带有数字钥匙的智能电动车已商用
  20. 在JS中如何获取时间以及转换时间

热门文章

  1. 利用计算机解决问题的一般过程是怎样的,计算机解决问题的一般过程1
  2. idea报错cannot access com.*.*
  3. 查看正在运行python进程_查找Python中每个正在运行的进程的路径 - python
  4. 英语六级考前急救100词 10个List
  5. 学习JS的这些日子——十二月总结
  6. arcgis画矢量图
  7. 题解 CF1389B 【Array Walk】
  8. html版贪吃蛇的项目计划书,自动贪吃蛇.html
  9. 组装台式计算机需要哪些配件,组装一台电脑需要哪些配件【详细列举】
  10. 微信跳跳代码php执行,微信跳一跳,能够直接运行的脚本