高斯平均是加权平均的一种特例,它根据高斯分布来确定各个模板的系数。
高斯平均模板的分解,因为高斯平均常使用较大的模板,所以会需要很大的计算量,所以,可将一个
2-D
的高斯平均模板分解为两个顺序使用的
1-D高斯平均模板来达到减少计算量的目的。例如:
替换之后的计算量从O(n^2)变为O(2n),模板越大,效果越明显。
代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
#加椒盐噪声的函数
def saltPepper(image, salt, pepper):
height = image.shape[0]
width = image.shape[1]
pertotal = salt + pepper #总噪声占比
noiseImage = image.copy()
noiseNum = int(pertotal * height * width)
for i in range(noiseNum):
rows = np.random.randint(0, height-1)
cols = np.random.randint(0,width-1)
if(np.random.randint(0,100)<salt*100):
noiseImage[rows,cols] = 255
else:
noiseImage[rows,cols] = 0
return noiseImage
#显示函数
def showImages(images):
for i in range(len(images)):
img = images[i]
title = "("+str(i+1)+")"
#行,列,索引
plt.subplot(2, 3, i+1)
plt.imshow(img, cmap="gray")
plt.title(title,fontsize=10)
plt.xticks([])
plt.yticks([])
plt.show()
#主函数
if __name__ == "__main__":
image = cv2.imread("image.jpg")
imageNoise = saltPepper(image, 0.15, 0.15)
gauImage = cv2.GaussianBlur(imageNoise, (11,11),0)
images = [image, imageNoise, gauImage]
showImages(images)
说明:
-
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
src——输入图像
ksize——高斯模板大小
sigmaX——在X方向上的高斯模板标准偏移
borderType——像素外推方法