"""
作者:ZhiWei
日期:2022年02月17日
"""
import math
import cv2
import random
import numpy as np
import matplotlib.pyplot as plt
def jiazai(src):
plt.figure(figsize=(8,10))
plt.imshow(cv2.cvtColor(src, cv2.COLOR_BGR2RGB))
plt.show()
src = cv2.imread("image/4.jpg")
jiazai(src)
def sp_noise(image,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
output1=sp_noise(src,0.02)
jiazai(output1)
dst1 = cv2.blur(output1,(3,3))
jiazai(dst1)
dst2=cv2.medianBlur(output1,5)
jiazai(dst2)
def clamp(pv):
if pv>255:
return 255
elif pv<0:
return 0
else:
return pv
def gaussian_noise(src):
image=src
h,w,c=image.shape
for row in range(h):
for col in range(w):
s=np.random.normal(0,20,3)
b=image[row,col,0]
g=image[row,col,1]
r=image[row,col,2]
image[row,col,0]=clamp(b+s[0])
image[row,col,1]=clamp(g+s[1])
image[row,col,2]=clamp(r+s[2])
return image
output2=gaussian_noise(src)
jiazai(output2)
dst3=cv2.GaussianBlur(output2,(3,3),sigmaX=15)
jiazai(dst3)
def gd(x,mu=0,sigma_quad=1):
left=1/(np.sqrt(2*math.pi)*np.sqrt(sigma_quad))
right=np.exp(-(x-mu)**2/(2*sigma_quad))
return left*right
if __name__=='__main__':
x=np.arange(-4,5,0.1)
y_1=gd(x,0,0.2)
y_2=gd(x,0,1.0)
y_3=gd(x,0,5.0)
y_4=gd(x,-2,0.5)
plt.plot(x,y_1,color='green')
plt.plot(x,y_2,color='blue')
plt.plot(x,y_3,color='gray')
plt.plot(x,y_4,color='red')
plt.xlim(-5.0, 5.0)
plt.ylim(-0.2, 1)
ax=plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.legend(labels=['$\mu=0,\sigma^2=0.2$',
'$\mu=0,\sigma^2=1.0$',
'$\mu=0,\sigma^2=5.0$',
'$\mu=-2,\sigma^2=0.5$'])
plt.show()
dst4 = cv2.bilateralFilter(output2,9,200,75)
jiazai(dst4)
dst5=cv2.bilateralFilter(src,9,75,75)
jiazai(dst5)