zoukankan      html  css  js  c++  java
  • 给图像添加椒盐噪声和高斯噪声 python实现

    一. 椒盐噪声

            在噪声的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量图像噪声。通俗的讲就是信号占多少,噪声占多少,SNR越小,噪声占比越大。

            在信号系统中,计量单位为dB,为10lg(PS/PN), PS和PN分别代表信号和噪声的有效功率。在这里,采用信号像素点的占比充当SNR,以衡量所添加噪声的多少。

            椒盐噪声又称为脉冲噪声,它是一种随机出现的白点(盐噪声)或者黑点(椒噪声)。

            高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。


    椒盐噪声污染后的图像 ↑

    高斯噪声污染后的图像 ↑

    原图 ↑

    二. python实现给图像添加椒盐噪声和高斯噪声

    import numpy as np
    
    import random
    
    import cv2
    
    from matplotlib import pyplot as plt
    
    def sp_noise(image,prob):
    
        '''
    
        添加椒盐噪声
    
        prob:噪声比例
    
        '''
    
        output = np.zeros(image.shape,np.uint8)
    
        thres = 1 - prob
    
        for i in range(image.shape[0]):
    
            for j in range(image.shape[1]):
    
                rdn = random.random()
    
                if rdn < prob:
    
                    output[i][j] = 0
    
                elif rdn > thres:
    
                    output[i][j] = 255
    
                else:
    
                    output[i][j] = image[i][j]
    
        return output
    
    def gasuss_noise(image, mean=0, var=0.001):
    
        '''
    
            添加高斯噪声
    
            mean : 均值
    
            var : 方差
    
        '''
    
        image = np.array(image/255, dtype=float)
    
        noise = np.random.normal(mean, var ** 0.5, image.shape)
    
        out = image + noise
    
        if out.min() < 0:
    
            low_clip = -1.
    
        else:
    
            low_clip = 0.
    
        out = np.clip(out, low_clip, 1.0)
    
        out = np.uint8(out*255)
    
        #cv.imshow("gasuss", out)
    
        return out
    
    # Read image
    
    img = cv2.imread("../paojie.jpg")
    
    # 添加椒盐噪声,噪声比例为 0.02
    
    out1 = sp_noise(img, prob=0.02)
    
    # 添加高斯噪声,均值为0,方差为0.001
    
    out2 = gasuss_noise(img, mean=0, var=0.001)
    
    # 显示图像
    
    plt.figure(1)
    
    plt.subplot(131)
    
    plt.axis('off')  # 关闭坐标轴
    
    plt.title('Original')
    
    plt.imshow(img)
    
    plt.subplot(132)
    
    plt.axis('off')
    
    plt.title('Add Salt and Pepper noise')
    
    plt.imshow(out1)
    
    plt.subplot(133)
    
    plt.axis('off')
    
    plt.title('Add Gaussian noise')
    
    plt.imshow(out2)
    
    plt.show()

    三. 实验结果

     

    四. 参考内容

    https://www.jianshu.com/p/0ac8f1d658e3

  • 相关阅读:
    HTML5 完美解决javascript中iphone手机和android手机复制文本到剪切板问题
    去除移动端alert/confirm的网址(url)
    项目通过tomcat部署到服务器,请求数据中文乱码问题
    JEECG中表单提交的中断
    mysql数据库1129错误
    java中比较两个double类型值的大小
    spring配置上传文件大小
    GET方式,获取服务器文件
    java中多个数字运算后值不对(失真)处理方法
    V-rep学习笔记:关节力矩控制
  • 原文地址:https://www.cnblogs.com/wojianxin/p/12499928.html
Copyright © 2011-2022 走看看