給圖像添加椒鹽噪聲和高斯噪聲 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM