首首先我們先來看下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)
加入高斯噪聲的運行結果爲:
這次就先寫到這兒,晚上回去把它寫成可以在彩色圖像上使用!