数学基础:
什么是泊松噪声,就是噪声分布符合泊松分布模型。泊松分布(Poisson Di)的公
式如下:
关于泊松分布的详细解释看这里:http://zh.wikipedia.org/wiki/泊松分佈
关于高斯分布与高斯噪声看这里:
http://blog.csdn.net/jia20003/article/details/7181463
二:程序实现
以前在图像加噪博文中现实的加高斯噪声,比较复杂。是自己完全实现了高斯随
机数的产生,这里主要是利用JAVA的随机数API提供的nextGaussion()方法来得
到高斯随机数。泊松噪声为了简化计算,Google到一位神人完成的C++代码于是
我翻译成Java的。
三:程序效果
滤镜源代码:
package com.gloomyfish.filter.study;
import java.awt.image.BufferedImage;
import java.util.Random;
public class NoiseAdditionFilter extends AbstractBufferedImageOp {
public final static double MEAN_FACTOR = 2.0;
public final static int POISSON_NOISE_TYPE = 2;
public final static int GAUSSION_NOISE_TYPE = 1;
private double _mNoiseFactor = 25;
private int _mNoiseType = POISSON_NOISE_TYPE;
public NoiseAdditionFilter() {
System.out.println("Adding Poisson/Gaussion Noise");
}
public void setNoise(double power) {
this._mNoiseFactor = power;
}
public void setNoiseType(int type) {
this._mNoiseType = type;
}
@Override
public BufferedImage filter(BufferedImage src, BufferedImage dest) {
int width = src.getWidth();
int height = src.getHeight();
Random random = new Random();
if ( dest == null )
dest = createCompatibleDestImage( src, null );
int[] inPixels = new int[width*height];
int[] outPixels = new int[width*height];
getRGB( src, 0, 0, width, height, inPixels );
int index = 0;
for(int row=0; row<height; row++) {
int ta = 0, tr = 0, tg = 0, tb = 0;
for(int col=0; col<width; col++) {
index = row * width + col;
ta = (inPixels[index] >> 24) & 0xff;
tr = (inPixels[index] >> 16) & 0xff;
tg = (inPixels[index] >> 8) & 0xff;
tb = inPixels[index] & 0xff;
if(_mNoiseType == POISSON_NOISE_TYPE) {
tr = clamp(addPNoise(tr, random));
tg = clamp(addPNoise(tg, random));
tb = clamp(addPNoise(tb, random));
} else if(_mNoiseType == GAUSSION_NOISE_TYPE) {
tr = clamp(addGNoise(tr, random));
tg = clamp(addGNoise(tg, random));
tb = clamp(addGNoise(tb, random));
}
outPixels[index] = (ta << 24) | (tr << 16) | (tg << 8) | tb;
}
}
setRGB( dest, 0, 0, width, height, outPixels );
return dest;
}
private int addGNoise(int tr, Random random) {
int v, ran;
boolean inRange = false;
do {
ran = (int)Math.round(random.nextGaussian()*_mNoiseFactor);
v = tr + ran;
// check whether it is valid single channel value
inRange = (v>=0 && v<=255);
if (inRange) tr = v;
} while (!inRange);
return tr;
}
public static int clamp(int p) {
return p > 255 ? 255 : (p < 0 ? 0 : p);
}
private int addPNoise(int pixel, Random random) {
// init:
double L = Math.exp(-_mNoiseFactor * MEAN_FACTOR);
int k = 0;
double p = 1;
do {
k++;
// Generate uniform random number u in [0,1] and let p ← p × u.
p *= random.nextDouble();
} while (p >= L);
double retValue = Math.max((pixel + (k - 1) / MEAN_FACTOR - _mNoiseFactor), 0);
return (int)retValue;
}
}
转载文章请注明
分享到:
相关推荐
图像处理python代码,附带测试图片:添加高斯、椒盐、泊松、均匀噪声,分别进行高斯滤波、中值滤波、盒滤波、双边滤波
matlab图像预处理对于各种噪声的处理(灰度、彩色图加椒盐、高斯、泊松、瑞利、伽马、乘性噪声)的实现
matlab图像加噪处理,融合高斯、泊松、椒盐三种常见噪声。
图像文件的读取与保存,图像文件实现旋转、裁剪、添加马赛克、添加边框、底片效果功能,可添加高斯、椒盐、乘法、泊松噪声,能够实现傅里叶变换、离散余弦变换、灰度线性拉伸变换,可实现五种算子的边缘检测、可实现...
图像去噪是图像处理中的基本问题, 目标是从含噪 的观测图像估计出理想图像, 通常这是一个不适定的反 问题, 大量文献对该问题进行了深入的研究, 不过主要 针对的是加性高斯白噪声, 然而在光量子计数成像系统 中, 如 ...
编辑部分的图像旋转,添加高斯、椒盐、乘法、泊松噪声,图像初始化。图像变换部分的傅里叶变换、离散余弦变换。边缘检测部分具有Roberts、sobel、prewitt、log、canny方法。图像类型转换部分有原图-灰度、原图-二值...
垂直错切,图像噪声模型,椒盐噪声,高斯噪声,泊松噪声,空间域滤波,直方图均衡化,线性空间滤波,非线性滤波(中值滤波),中值滤波,排序滤波,逆谐波均值滤波器,经典锐化方法,经典梯度锐化,经典拉普拉斯锐化...
②添加噪声,如高斯噪声、椒盐噪声、泊松噪声等; ③图像变换,包括傅里叶变换、离散余弦变换; ④边缘检测,如用Sobel算子检测等; ⑤图像基本类型转换,如原图变为二值图等; ⑥图像滤波,包括线性滤波(中值滤波...
matlab图像预处理对于各种噪声的处理(灰度、彩色图加椒盐、高斯、泊松、瑞利、伽马、乘性噪声)并绘制其直方图
图像加噪包含高斯、泊松、椒盐、斑点噪声;图像去噪包含中值滤波、维纳滤波、小波滤波、理想低通滤波和高斯低通滤波;图像压缩包含PCA、DCT(离散余弦变换)、FFT(快速傅里叶变换)、位平面行程编码和JPEG。
使用matlab对图像进行处理,有插入图片,删除图片,图像灰度化,图像二值化,还有添加椒盐噪声,高斯噪声,泊松噪声,然后进行去噪,使用中值滤波,均值滤波,自适应滤波等
文件、打开、保存、退出、编辑、放大、缩小、灰度、亮度、旋转、截图、变换、傅里叶变换、离散余弦变换、Radom变换、噪声、高斯噪声、椒盐噪声、斑点噪声、泊松噪声、滤波、高通滤波、低通滤波、平滑滤波(线性、...
matlab图像预处理对于各种噪声的处理(灰度、彩色图加椒盐、高斯、泊松、瑞利、伽马、乘性噪声)去噪并绘制直方图
数字图像去噪典型算法及matlab实现代码。...一般数字图像系统中的常见噪声主要有:高斯噪声(主要由阻性元器件内部产生)、椒盐噪声(主要是图像切割引起的黑图像上的白点噪声或光电转换过程中产生的泊松噪声)等;
图像加噪包含高斯、泊松、椒盐、斑点噪声;图像去噪包含中值滤波、维纳滤波、小波滤波、理想低通滤波和高斯低通滤波;图像压缩包含PCA、DCT(离散余弦变换)、FFT(快速傅里叶变换)、位平面行程编码和JPEG。
源自大牛Joseph Salmon的PCA图像降噪新算法-patch based PCA,可以进行高斯噪声、泊松噪声等多种噪声的降噪处理,且能去的比较好的效果。内含代码和对应的文献,值得学习图像处理的看看!
图像处理 灰度和高斯模糊的代码在image_process.m中。泊松噪声的添加,归一化和缩小的代码在Creation_Dataset_Code.ipynb中。 数据集是所有图像都在一个文件夹中,使用Matlab I对每个图像进行灰度缩放,并通过Matlab...
一般数字图像系统中的常见噪声主要有:高斯噪声(主要由阻性元器件内部产生)、椒盐噪声(主要是图像切割引起的黑图像上的白点噪声或光电转换过程中产生的泊松噪声)等; 目前比较经典的图像去噪算法主要有以下三种...
因为可以通过泊松过程来模拟量子噪声,所以我们首先使用安斯科姆方差稳定变换(VST)对量子噪声进行变换,从而产生具有单位方差的近似高斯噪声。 其次,通过在小波域中的自适应硬阈值处理获得无噪声的小波系数。 第...
设计针对高斯噪声、泊松噪声、固定值脉冲噪声和随机值脉冲噪声的混合检测方法,使用改进的滤波方法在空域去除固定值脉冲噪声和随机值脉冲噪声,进行非下采样轮廓波变换多层分解,在变换域使用阈值方法去除高斯噪声和...