自选一张图片,利用高斯滤波进行滤波,调整滤波器方差参数,观察输出变化
自选一张图片,利用高斯滤波进行滤波,调整滤波器方差参数,观察输出变化,并解释原因。
import cv2
img = cv2.imread('image/dogsp1.jpeg')
#滤波核大小为5*5,sigmaX和sigmaY为0,通过ksize.width和ksize.height计算得到
res0=cv2.GaussianBlur(img, (5,5), 0, 0)
#改变滤波核的大小
res1=cv2.GaussianBlur(img, (3,3), 0, 0)
#改变sigmaX的大小
res2=cv2.GaussianBlur(img, (5,5), 10, 0)
#改变sigmaY的大小
res3=cv2.GaussianBlur(img, (5,5), 0, 10)
cv2.imshow('ori', img)
cv2.imshow('res0', res0)
cv2.imshow('res1', res1)
cv2.imshow('res2', res2)
cv2.imshow('res3', res3)
cv2.waitKey(0)
cv2.destroyAllWindows()
(1)在核大小固定的情况下,sigma值越大,权值分布越平缓。因此,邻域各个点的值对输出值的影响越大,最终结果造成图像越模糊。
(2)在核大小固定的情况下,sigma值越小,权值分布越突起。因此,邻域各个点的值对输出值的影响越小,图像变化也越小。假如中心点权值为1,其他点权值为0,那么最终结果是图像没有任何变化。
(3)sigma固定时,核越大图像越模糊。
(4)sigma固定时,核越小图像变化越小。
自选一张图片,分别添加椒盐噪声和高斯噪声。
import numpy as np
import random
import cv2
# 添加椒盐噪声
# prob:噪声比例
def sp_noise(image,prob):
'''
添加椒盐噪声
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
# 添加高斯噪声
# mean : 均值
# var : 方差
def gasuss_noise(image, mean=0, var=0.001):
image = np.array(image/255, dtype=float)
noise = np.random.normal(mean, var ** 0.5, image.shape)
out = image + noise
if out.min() < 0:
low_clip = -1.
else:
low_clip = 0.
out = np.clip(out, low_clip, 1.0)
out = np.uint8(out*255)
return out
img=cv2.imread('image/view.jpg')
sp=sp_noise(img,0.02)
gas=gasuss_noise(img)
cv2.imshow('sp',sp)
cv2.imshow('gas', gas)
cv2.waitKey(0)
cv2.destroyAllWindows()