Files
digital-image-processing/8/2/thresholdAverFilter.py
T
2024-05-23 10:50:05 +08:00

58 lines
1.8 KiB
Python

# 阈值邻域平滑滤波和均值滤波
import matplotlib.pyplot as plt
import cv2
import numpy as np
import random
# from ImageAddNoise import *
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负
# 添加高斯噪声
def addGaussianNoise(src,mu,sigma):
NoiseImg=src.copy()
NoiseImg=NoiseImg/NoiseImg.max()
rows,cols=NoiseImg.shape[:2]
for i in range(rows):
for j in range(cols):
#python里使用random.gauss函数加高斯噪声
NoiseImg[i,j]=NoiseImg[i,j]+random.gauss(mu,sigma)
# NoiseImg[i,j]=NoiseImg[i,j]+np.random.normal(mu,sigma)
if NoiseImg[i,j]< 0:
NoiseImg[i,j]=0
elif NoiseImg[i,j]>1:
NoiseImg[i,j]=1
NoiseImg=np.uint8(NoiseImg*255)
return NoiseImg
img = cv2.imread(r"..\img\train1.jpg",0)
row,col=img.shape
ImgGuassNoise = addGaussianNoise(img,0,0.1) #添加0均值,0.2方差的高斯分布噪声
imgAver=cv2.blur(ImgGuassNoise,(5,5))
imgThresh=np.zeros((row,col))
T=20
for i in range(row):
for j in range(col):
if np.abs(ImgGuassNoise[i,j]-imgAver[i,j])>T:
imgThresh[i,j]=imgAver[i,j]
else:
imgThresh[i,j]=ImgGuassNoise[i,j]
plt.figure(figsize=(10,6))
plt.subplot(221)
plt.imshow(img,cmap='gray')
plt.title("原图")
plt.axis('off') #不显示坐标轴
plt.subplot(222)
plt.imshow(ImgGuassNoise,cmap='gray')
plt.title("加高斯噪声图像")
plt.axis('off') #不显示坐标轴
plt.subplot(223)
plt.imshow(imgAver,cmap='gray')
plt.title("7x7均值滤波")
plt.axis('off') #不显示坐标轴
plt.subplot(224)
plt.imshow(imgThresh,cmap='gray')
plt.title("阈值邻域平滑滤波")
plt.axis('off') #不显示坐标轴
plt.show()
plt.savefig("ch03-29-thresh.jpg")