import cv2
import math
import numpy as np
from skimage import io#针对Gabor滤波
from skimage import data,filters,color#针对Gabor滤波
import matplotlib.pyplot as plt
def psnr(img1,img2):#psnr峰值信噪比
mse=np.mean((img1/255-img2/255)**2)#mse均方误差
if mse<1.0e-10:
return 100
return 20*math.log10(1 / math.sqrt(mse))
#读取图片
img = cv2.imread('C:/Users/tc/Desktop/NEU-DET/picture/scratches_300.jpg')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
####################双边滤波####################
result1 = cv2.bilateralFilter(img, d=0, sigmaColor=100, sigmaSpace=15)
psnr1=round(psnr(img,result1),2)
####################高斯滤波####################
result2 = cv2.GaussianBlur(img, (3,3), 0)
psnr2=round(psnr(img,result2),2)
####################中值滤波####################
result3 = cv2.medianBlur(img, 3)
psnr3=round(psnr(img,result3),2)
####################均值滤波####################
result4 = cv2.blur(img, (2,2))
psnr4=round(psnr(img,result4),2)
####################均值偏移滤波####################
result5 = cv2.pyrMeanShiftFiltering(img, sp=15, sr=20)
#sp:空间窗的半径(The spatial window radius);
#sr:色彩窗的半径(The color window radius)
psnr5=round(psnr(img,result5),2)
"""
####################Gabor滤波####################
img=color.rgb2gray(img)
real, imag = filters.gabor(img,frequency=0.6)#对图片进行Gabor滤波
#其中real是现实的滤波效果,imag是理想的滤波效果,
#frequency是滤波的频率,一般情况下该值越大,得到的边缘条纹越小且少,值越大边缘条纹越粗且多。
psnr6=round(psnr(img,imag),2)
"""
#name_list = ['双边滤波', '高斯滤波', '中值滤波', '均值滤波','均值偏移滤波']
num_list = [psnr1,psnr2,psnr3,psnr4,psnr5]
#print("PSNR:双边滤波,高斯滤波,中值滤波,均值滤波,均值偏移滤波")
print(num_list)
plt.show()