图像处理之误差扩散(抖动)算法

前言:本文原发表在新浪博客http://blog.sina.com.cn/s/blog_b27f71160101ggzd.html,现新浪博客将其搬家至CSDN,原新浪博客停止更新。

①申请搬家后,迟迟未能收到申请搬家的码

②再熟悉一下算法

③联系键盘打字

基于以上三点,遂将博文重新敲一遍。

一、算法简介

误差扩撒法在数据处理中经常碰到,尤其是用于图像处理中,降低色彩的深度。下面有三张图,【图一】256级(8bit)灰度过度      【图二】将图一转换成16级(8bit)灰度(高4位不变,低4位置0)       【图三】将图一用误差扩散法转换成16级灰度。(256级灰度指共256种灰度值,16级灰度指共16种灰度值)

                    

【图一】                     【图二】                        【图三】

很明显,同是16级灰度,但是【图三】的效果明显好于【图二】,其原因是【图二】使用的是误差扩撒算法。

顾名思义,误差扩撒,就是色彩深度降低时,将像素的变化的误差扩撒开去,使得肉眼在观察图片的时候,相邻的像素点集合整体的误差变小,就比如:人在下楼梯时,如果台阶过高,容易扯着蛋;要是同样的高度能多有几个台阶,那么台阶之间的距离变小了,那么扯蛋效应就会减小甚至消失(不好意思,我称之为扯蛋效应)。

二、具体过程

1、如果我们要将这一张256级灰度的图片转换成16级灰度,最简单的办法就是将每个像素的后四位置0。例如256级灰度值是120,转换成16级灰度值则有:120/16=7.5,7*16=112,即16级灰度值为112,那么存在120-112=8(即0.5*16=8)的像素差值,这就是误差。如果不利用这个误差信息,则就是【图二】的效果。

2、误差扩散(抖动),为了解决【图二】的现象,我们来利用这个误差,即将这个误差扩散到该像素点的周围,而不是由该像素完全承担这个误差。这样从视觉方面来看,就会更平缓,更容易接受。我们按照3:2:3的比例将8这个误差分批到该像素点的右边,右下,下边这些周围的像素点上,即右边像素=右边像素+3,右下像素=右下像素+2,下边像素=下边像素+3,如此一来,处理完整个图像的每个像素点,是不是比直接截尾的效果要好很多呢?

在上述说明中这个误差8的举例有点特殊,误差是13,则按3:2:3得分配的误差为2,1,2(或者四舍五入的3,2,3)。

事实上,3:2:3的效果也不是最好的分配误差法案,你还可以试一试下面的分法(也可以自己构造):

其中X指的是要转换的像素点,周围的瓜分误差的比例。

ok,这个算法还是比较有用的,由于比较简单,就不给出代码了,可以自己实现一下。

时间: 2024-08-30 05:33:20

图像处理之误差扩散(抖动)算法的相关文章

神经网络 误差逆传播算法推导 BP算法

??误差逆传播算法是迄今最成功的神经网络学习算法,现实任务中使用神经网络时,大多使用BP算法进行训练. ??给定训练集\(D={(x_1,y_1),(x_2,y_2),......(x_m,y_m)},x_i \in R^d,y_i \in R^l\),即输入示例由\(d\)个属性描述,输出\(l\)个结果.如图所示,是一个典型的单隐层前馈网络,它拥有\(d\)个输入神经元.\(l\)个输出神经元.\(q\)个隐层神经元,其中,\(\theta_j\)表示第\(j\)个神经元的阈值,\(\gam

神经网络和深度学习之——误差反向传播算法

在讲解误差反向传播算法之前,我们来回顾一下信号在神经网络中的流动过程.请细细体会,当输入向量\(X\)输入感知器时,第一次初始化权重向量\(W\)是随机组成的,也可以理解成我们任意设置了初始值,并和输入做点积运算,然后模型通过权重更新公式来计算新的权重值,更新后的权重值又接着和输入相互作用,如此迭代多次,得到最终的权重. 信号向前传播,权重的更新反向传播,是这样吗? 是的,你的直觉没错,确实是反向传播. 1. 前馈的实质 反向传播这个术语经常被误解为用于多层神经网络的整个学习算法.实际上,反向传

图像处理之水彩画特效生成算法

在研究非真实感绘制相关算法时,水彩画算法是第一个開始看的,只是却拖到最后总结. 水彩画还是挺不好模拟的,里面涉及的算法比較多,本文实现的水彩画算法主要參考以下两篇文章,<Interactive watercolor rendering with temporal coherence and abstraction> .<Towards Photo Watercolorization with Artistic Verisimilitude> .第一篇文章比較早.第二篇文章比較新.通

MATLAB图像处理_图像的白平衡算法(灰色世界法)

白平衡,即所谓的白色的平衡. 白平衡的算法有很多,这里记录的是最简单实用的白平衡算法,即灰色世界法! 灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R. G. B 三个分量的平均值趋于同一个灰度K. 下面是具体的算法代码: RGB=imread('test.jpg'); R = RGB(:,:,1); G = RGB(:,:,2); B = RGB(:,:,3); Rx4 = RGB(:,:,1)*4; Gx4 = RGB(:,:,2)

图像处理之基础---肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法

本文涉及的很多算法,在网络上也有不少同类型的文章,但是肯定的一点就是,很多都是不配代码的,或者所附带的代码都是象征性的,速度慢,不优雅,不具有实用价值,本文努力解决这些问题. 文中各算法出现的顺序并不代表算法的优越性,仅仅是作者随机排布的而已. 2.基于RGB颜色空间的简单阈值肤色识别 在human skin color clustering for face detection一文中提出如下简单的判别算式: R>95 And G>40 And B>20 And R>G And R

图像处理之基础---去污算法

http://bbs.csdn.net/topics/390211536 http://blog.csdn.net/laviewpbt/article/details/14225413 http://bbs.csdn.net/topics/390573504 http://blog.csdn.net/laviewpbt/article/details/11555877

【数字图像处理之三】拉普拉斯边缘检测算法

实现效果: 源码地址: http://download.csdn.net/detail/u013580497/8877185 版权声明:本文为博主原创文章,未经博主允许不得转载.

数字加网(三)— —调频加网算法及实现

数字加网(一)- -概念及分色合成 数字加网(二)- -调幅加网算法及实现 数字加网(三)- -调频加网算法及实现 调频加网算法主要是抖动法与误差扩散法,前者又可以分为有序抖动和无序抖动,是点过程:后者是相邻过程. 有序抖动算法 Bayer抖动算法 算法公式 最具代表性的有序抖动算法,是1973年Bayer提出的Bayer算法,其递推公式如下: 令D1=0,n=2可以求出抖动矩阵 然后就可以继续推导出D4的抖动矩阵,推导过程如下 同理,我们可以推出D8的抖动矩阵 [注]一般处理采用D8的抖动矩阵

整理图像处理的一些方法

[转]图像滤镜处理算法: 1.灰度 2.黑白 3.底片 4.浮雕 [转]图像处理之特殊灰度算法技巧 1.基于像素平均值的图像阈值二值化算法 2.基于错误扩散的Floyd-Steinberg抖动算法 3.选择性灰度算法 [转]大津法理解(二值化) [转]图像处理之常见二值化方法汇总