图像处理------添加高斯与泊松噪声

数学基础:

什么是泊松噪声,就是噪声分布符合泊松分布模型。泊松分布(Poisson Di)的公

式如下:

关于泊松分布的详细解释看这里:http://zh.wikipedia.org/wiki/泊松分佈

关于高斯分布与高斯噪声看这里:

http://blog.csdn.net/jia20003/article/details/7181463

 二:程序实现

以前在图像加噪博文中现实的加高斯噪声,比较复杂。是自己完全实现了高斯随

机数的产生,这里主要是利用JAVA的随机数API提供的nextGaussion()方法来得

到高斯随机数。泊松噪声为了简化计算,Google到一位神人完成的C++代码于是

我翻译成Java的。

三:程序效果

滤镜源代码:

[java] view plaincopy

  1. package com.gloomyfish.filter.study;  
  2.   
  3. import java.awt.image.BufferedImage;  
  4. import java.util.Random;  
  5.   
  6. public class NoiseAdditionFilter extends AbstractBufferedImageOp {  
  7.     public final static double MEAN_FACTOR = 2.0;  
  8.     public final static int POISSON_NOISE_TYPE = 2;  
  9.     public final static int GAUSSION_NOISE_TYPE = 1;  
  10.     private double _mNoiseFactor = 25;  
  11.     private int _mNoiseType = POISSON_NOISE_TYPE;  
  12.       
  13.     public NoiseAdditionFilter() {  
  14.         System.out.println("Adding Poisson/Gaussion Noise");  
  15.     }  
  16.       
  17.     public void setNoise(double power) {  
  18.         this._mNoiseFactor = power;  
  19.     }  
  20.       
  21.     public void setNoiseType(int type) {  
  22.         this._mNoiseType = type;  
  23.     }  
  24.       
  25.     @Override  
  26.     public BufferedImage filter(BufferedImage src, BufferedImage dest) {  
  27.         int width = src.getWidth();  
  28.         int height = src.getHeight();  
  29.         Random random = new Random();  
  30.         if ( dest == null )  
  31.             dest = createCompatibleDestImage( src, null );  
  32.   
  33.         int[] inPixels = new int[width*height];  
  34.         int[] outPixels = new int[width*height];  
  35.         getRGB( src, 0, 0, width, height, inPixels );  
  36.         int index = 0;  
  37.         for(int row=0; row<height; row++) {  
  38.             int ta = 0, tr = 0, tg = 0, tb = 0;  
  39.             for(int col=0; col<width; col++) {  
  40.                 index = row * width + col;  
  41.                 ta = (inPixels[index] >> 24) & 0xff;  
  42.                 tr = (inPixels[index] >> 16) & 0xff;  
  43.                 tg = (inPixels[index] >> 8) & 0xff;  
  44.                 tb = inPixels[index] & 0xff;  
  45.                 if(_mNoiseType == POISSON_NOISE_TYPE) {  
  46.                     tr = clamp(addPNoise(tr, random));  
  47.                     tg = clamp(addPNoise(tg, random));  
  48.                     tb = clamp(addPNoise(tb, random));  
  49.                 } else if(_mNoiseType == GAUSSION_NOISE_TYPE) {  
  50.                     tr = clamp(addGNoise(tr, random));  
  51.                     tg = clamp(addGNoise(tg, random));  
  52.                     tb = clamp(addGNoise(tb, random));  
  53.                 }  
  54.                 outPixels[index] = (ta << 24) | (tr << 16) | (tg << 8) | tb;  
  55.             }  
  56.         }  
  57.   
  58.         setRGB( dest, 0, 0, width, height, outPixels );  
  59.         return dest;  
  60.     }  
  61.       
  62.     private int addGNoise(int tr, Random random) {  
  63.         int v, ran;  
  64.         boolean inRange = false;  
  65.         do {  
  66.             ran = (int)Math.round(random.nextGaussian()*_mNoiseFactor);  
  67.             v = tr + ran;  
  68.             // check whether it is valid single channel value  
  69.             inRange = (v>=0 && v<=255);   
  70.             if (inRange) tr = v;  
  71.         } while (!inRange);  
  72.         return tr;   
  73.     }  
  74.   
  75.     public static int clamp(int p) {  
  76.         return p > 255 ? 255 : (p < 0 ? 0 : p);  
  77.     }  
  78.       
  79.     private int addPNoise(int pixel, Random random) {  
  80.         // init:  
  81.         double L = Math.exp(-_mNoiseFactor * MEAN_FACTOR);  
  82.         int k = 0;  
  83.         double p = 1;  
  84.         do {  
  85.             k++;  
  86.             // Generate uniform random number u in [0,1] and let p ← p × u.  
  87.             p *= random.nextDouble();  
  88.         } while (p >= L);  
  89.         double retValue = Math.max((pixel + (k - 1) / MEAN_FACTOR - _mNoiseFactor), 0);  
  90.         return (int)retValue;  
  91.     }  
  92.   
  93. }  
时间: 2024-09-30 14:36:18

图像处理------添加高斯与泊松噪声的相关文章

图像处理------应用卷积一实现噪声消去

均值滤波: 均值滤波,是图像处理中最常用的手段,从频率域观点来看均值滤波是一种低通滤波器,高 频信号将会去掉,因此可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能.理想的均 值滤波是用每个像素和它周围像素计算出来的平均值替换图像中每个像素.采样Kernel数 据通常是3X3的矩阵,如下表示: 从左到右从上到下计算图像中的每个像素,最终得到处理后的图像.均值滤波可以加上两个 参数,即迭代次数,Kernel数据大小.一个相同的Kernel,但是多次迭代就会效果越来越好. 同样,迭代次数相同,Ker

信道噪声-用labview进行2fsk通信系统的仿真,需要在信道中加噪然后进行观察

问题描述 用labview进行2fsk通信系统的仿真,需要在信道中加噪然后进行观察 哪位大神可以解答以下我的问题哒~需要在信道中添加高斯白噪声,然后观察眼图什么的,怎么加呢?是直接在调制.解调之间的那部分增加噪声就可以了吗?

解密:阿里巴巴公司根据截图查到泄露信息的员工的技术是?

    本文通过一个的实验,简要介绍频域手段添加数字盲水印的方法,并进一步验证其抗攻击性.在上述实验的基础上,总结躲避数字盲水印的方法.(多图预警) 本文分为四个部分,第一部分综述:第二部分频域数字盲水印制作原理介绍:第三部分盲水印攻击性实验:第四部分总结: 一.综述 本文提供的一种实现"阿里通过肉眼无法识别的标识码追踪员工"的技术手段.通过看其他答主的分析,阿里可能还没用到频域加水印的技术. 相对于空域方法,频域加盲水印的方法隐匿性更强,抵抗攻击能力更强.这类算法解水印困难,你不知道

理解SIFT

理解SIFT 理解SIFT MarkdownHTML ## SIFT步骤### 找尺度空间极值 可以用DoG找 需要讲理论依据和DoG结合进行推导 s值和$\sigma$值的选取问题### 关键点定位 和泰勒展开相关### 方向赋值### 局部图像描述符## SIFT用于目标识别的步骤 目标图像提取SIFT特征:搭建SIFT特征数据库 用快速kNN将目标特征在数据库中查找 用霍夫变换寻找属于同一单目标的簇(cluster) 用least-square(最小二乘法)验证## SIFT算法步

利用PS图层样式制作绿色水晶立体字

效果图为比较常见的立体字,制作的时候可以先把文字复制多层,副本图层填充改为0,然后分别加上图层样式得到层次感比较好的水晶效果,再用错位的方法制作立体面即可. 最终效果 <点小图查看大图> 1.新建画布,大小并不固定,此教程是以1200 * 600为实例的. 新建图层,首先去做一个径向渐变,然后在此图层上设置图层样式,然后在此图层上方加一个暗角层(先将整个图层填充黑色,再用椭圆选框工具从中心拉一个椭圆,Shift + F6羽化选区,按Delete删除,适当调整不透明度). 2.建立新组命名为&q

PS制作绿色立体水晶文字

  最终效果如下: 一.新建画布,大小并不固定,此教程是以1200 * 600为实例的. 新建图层,首先去做一个径向渐变,然后在此图层上设置图层样式,然后在此图层上方加一个暗角层(先将整个图层填充黑色,再用椭圆选框工具从中心拉一个椭圆,Shift + F6羽化选区,按Delete删除,适当调整不透明度). 二.建立新组命名为"特效文字",并新建图层输入文字,复制多层,将1,2图层填充改为:0%,图层3填充黑色. 三.对2图层分别进行斜面和浮雕.投影.渐变叠加图层样式的设置,参数如下图.

Photoshop网页制作教程:清爽的ipad页面

效果图: 1.创建新文件:1100 x 1250像素. 背景颜色:#e8e8e8. 2.复制背景图层(CTRL + J),然后滤镜>杂色>添加杂色,设置如下. 3.创建一个圆角矩形.白色的形状在中间的空间布局. 4.简单的图层样式: 5.在右边的位置,加增iPad的图片. 6.复制两个ipadi图片,添加高斯模糊效果,移动到后方,左右分开, 产生空间感.(这里图象加载失败就省去图象) 7.创建一个简单的字体效果: 8.图层样式设置: [1] [2] [3] [4] [5] [6]  下一页

PS合成爱丽丝漫游奇幻大片场景

  PS合成爱丽丝漫游奇幻大片场景   图01 教程素材: 地面.森林.树.小径.门.女孩.草.光纹理. 一.创建背景: 第一步: 在Photoshop中新建画布1800*135,设置如下: 图02 第二步: 打开"地面"素材,选择矩形选框工具,只选择草地部分,移动到主画布底部. 图03 图04 第三步: 添加高斯迷糊滤镜,设置模糊半径为30像素. 图05 添加滤镜蒙版,然后用黑色软笔刷将草地的上边缘虚化,以便下面融入场景中. 图06 第四步: 添加色相/饱和度调整图层,设置为剪贴蒙版

正确使用HTML title属性的一些建议

 如果你想对使用手机,平板电脑和辅助技术的用户隐藏某些内容,而只对键盘用户显示,那么请使用title属性. 细节 HTML的title属性本身有问题.之所以有问题是因为它在一些重要的方面表现的不够好,尽管它陪伴我们超过14年了.随着触摸设备的兴起,这个属性的作用进一步降低.title属性的可访问性变得很鸡肋,由于缺少浏览器的支持,屏幕阅读器的支持和制作人员的重视. 下列情况下title属性由于缺乏支持变得多余: 对于在手机浏览器里访问web内容信息的人.通常title属性的内容在桌面浏览器里显示