数字图像处理——添加高斯噪声&椒盐噪声

最近交了数图作业,mark一下。

1.添加高斯噪声

1.1 概率密度函数

这里写图片描述

σ为z的标准差,z为均值,用E。

1.2 生成高斯分布随机数序列

方法由Marsaglia和Bray在1964年提出,C++版本如下: mu是均值,sigma是方差,X服从N(0,1)分布

double generateGaussianNoise(double mu, double sigma)
{
    static double V1, V2, S;
    static int phase = 0;
    double X;
    double U1,U2;
    if ( phase == 0 ) {
        do {
            U1 = (double)rand() / RAND_MAX;
            U2 = (double)rand() / RAND_MAX;

            V1 = 2 * U1 - 1;
            V2 = 2 * U2 - 1;
            S = V1 * V1 + V2 * V2;
        } while(S >= 1 || S == 0);

        X = V1 * sqrt(-2 * log(S) / S);
    } else{
        X = V2 * sqrt(-2 * log(S) / S);
    }
    phase = 1 - phase;
    return mu+sigma*X;
}

1.3 添加高斯噪声

高斯噪声为加性噪声,在原图的基础上加上噪声即为加噪后的图象。
代码如下:

void AddNoise(Mat img,double mu, double sigma,int k){
    Mat outImage;
    outImage.create(img.rows,img.cols,img.type());
    for(int x=0;x<img.rows;x++){
        for(int y=0;y<img.cols;y++){
            double temp = img.at<uchar>(x, y)
                    +k*generateGaussianNoise(mu,sigma);
            if(temp>PixcelMax)
                    temp=PixcelMax;
            else if(temp&
要在灰度图片`img`上按照您描述的方式添加椒盐噪声,你可以遵循以下步骤: 1. 首先,读取和加载原始灰度图像`img`。这通常需要一个图像处理库,如Python的PIL(Pillow)或OpenCV。 ```python from PIL import Image img = Image.open('input.jpg').convert('L') ``` 2. 创建一个新的同尺寸的空白图像,用于存储处理后的结果,我们将其命名为`noisy_img`。 ```python noisy_img = Image.new('L', img.size) ``` 3. 使用`img.getdata()`获取原图的像素列表,并遍历每个像素。检查像素值,根据条件分别添加食盐噪声(低像素值)或胡椒噪声(像素值)。 ```python salt_prob = 0.5 # 食盐噪声的概率 pepper_prob = 0.5 # 胡椒噪声的概率 salt_value = 0 pepper_value = 255 for i in range(img.size[0]): for j in range(img.size[1]): pixel = img.getpixel((i, j)) if pixel < 100: # 添加食盐噪声 noisy_img.putpixel((i, j), salt_value) with probability salt_prob elif pixel > 200: # 添加胡椒噪声 noisy_img.putpixel((i, j), pepper_value) with probability pepper_prob else: # 其他值保持不变 noisy_img.putpixel((i, j), pixel) ``` 4. 对于概率性的添加,可以使用随机数生成来决定是否添加噪声。这里假设`random`模块已导入。 ```python import random if random.random() < salt_prob: noisy_img.putpixel((i, j), salt_value) elif random.random() < pepper_prob: noisy_img.putpixel((i, j), pepper_value) ``` 5. 最后,将处理后的图像`noisy_img`保存到指定路径`output`。 ```python noisy_img.save('output.jpg') ``` 6.
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值