高斯噪聲和椒鹽噪聲的python程序實現

首首先我們先來看下python中shape()函數的用法
from numpy import *
a=array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]])
a.shape[0]


得到a的行數爲 4

然後輸入a.shape[1]

得到a的列數爲 3

圖1:運行在python的IDLE中示例

通過程序我們可以看到shape[0]表示的爲行數,shape[1]表示的爲列數

然後我們看下range()函數的用法

我們首先看下help('range')給我們的解釋

意思是:返回一個從0開始的對象的整數序列,

進入正題:

我們先定義高斯噪聲函數:GaussianNoise(src,means,sigma)

通過使用函數random.gauss(means,sigma)生成均值爲means,標準差爲sigma的高斯白噪聲

高斯噪聲的代碼如下:

def GaussianNoise(src,means,sigma):
    NoiseImg=src
    rows=NoiseImg.shape[0]
    cols=NoiseImg.shape[1]
    for i in range(rows):
        for j in range(cols):
            NoiseImg[i,j]=NoiseImg[i,j]+random.gauss(means,sigma)
            if  NoiseImg[i,j]< 0:
                 NoiseImg[i,j]=0
            elif  NoiseImg[i,j]>255:
                 NoiseImg[i,j]=255
    return NoiseImg

椒鹽噪聲的函數定義如下:

def PepperandSalt(src,percetage):
    NoiseImg=src
    NoiseNum=int(percetage*src.shape[0]*src.shape[1])
    for i in range(NoiseNum):
        randX=random.random_integers(0,src.shape[0]-1)
        randY=random.random_integers(0,src.shape[1]-1)
        if random.random_integers(0,1)<=0.5:
            NoiseImg[randX,randY]=0
        else:
            NoiseImg[randX,randY]=255          
    return NoiseImg 

椒鹽噪聲總體代碼如下:

import cv2
import random
from numpy import *
def PepperandSalt(src,percetage):
    NoiseImg=src
    NoiseNum=int(percetage*src.shape[0]*src.shape[1])
    for i in range(NoiseNum):
        randX=random.random_integers(0,src.shape[0]-1)
        randY=random.random_integers(0,src.shape[1]-1)
        if random.random_integers(0,1)<=0.5:
            NoiseImg[randX,randY]=0
        else:
            NoiseImg[randX,randY]=255          
    return NoiseImg 
def GaussianNoise(src,means,sigma):
    NoiseImg=src
    rows=NoiseImg.shape[0]
    cols=NoiseImg.shape[1]
    for i in range(rows):
        for j in range(cols):
            NoiseImg[i,j]=NoiseImg[i,j]+random.gauss(means,sigma)
            if  NoiseImg[i,j]< 0:
                 NoiseImg[i,j]=0
            elif  NoiseImg[i,j]>255:
                 NoiseImg[i,j]=255
    return NoiseImg 
img=cv2.imread('C:/Users/Administrator/Desktop/12.jpg',0)
img1=PepperandSalt(img,0.2)
cv2.imwrite('C:/Users/Administrator/Desktop/3.jpg',img1)
cv2.imshow('PepperandSalt',img1)
cv2.waitKey(0)

加入椒鹽噪聲之後的運行結果如下:

圖2:加入椒鹽噪聲的運行結果

高斯噪聲的代碼爲:

import cv2
from numpy import shape
import random
def PepperandSalt(src,percetage):
    NoiseImg=src
    NoiseNum=int(percetage*src.shape[0]*src.shape[1])
    for i in range(NoiseNum):
        randX=random.randint(0,src.shape[0]-1)
        randY=random.randint(0,src.shape[1]-1)
        if random.random_integers(0,1)<=0.5:
            NoiseImg[randX,randY]=0
        else:
            NoiseImg[randX,randY]=255          
    return NoiseImg 
def GaussianNoise(src,means,sigma,percetage):
    NoiseImg=src
    NoiseNum=int(percetage*src.shape[0]*src.shape[1])
    for i in range(NoiseNum):
        randX=random.randint(0,src.shape[0]-1)
        randY=random.randint(0,src.shape[1]-1)
        NoiseImg[randX, randY]=NoiseImg[randX,randY]+random.gauss(means,sigma)
        if  NoiseImg[randX, randY]< 0:
                 NoiseImg[randX, randY]=0
        elif NoiseImg[randX, randY]>255:
                 NoiseImg[randX, randY]=255
    return NoiseImg 
img=cv2.imread('C:/Users/Administrator/Desktop/12.jpg',0)
img1=GaussianNoise(img,2,4,0.8)
cv2.imwrite('C:/Users/Administrator/Desktop/3.jpg',img1)
cv2.imshow('PepperandSalt',img1)
cv2.waitKey(0)

加入高斯噪聲的運行結果爲:


這次就先寫到這兒,晚上回去把它寫成可以在彩色圖像上使用!


















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章