1.高斯模糊的介绍
高斯模糊实质上就是一种均值模糊,只是高斯模糊是按照加权平均的,距离越近的点权重越大,距离越远的点权重越小。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
高斯模糊的原理:
高斯分布的标准差σ。标准差代表着数据的离散程度,如果σ较小,那么生成的模板的中心系数较大,而周围的系数较小,这样对图像的平滑效果就不是很明显;反之,σ较大,则生成的模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显
2.高斯噪声
import cv2 as cv
import numpy as np
def clamp(pv):
if pv > 255:
return 255
if pv < 0:
return 0
else:
return pv
def gaussian_noise(image):
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])
cv.namedWindow("noise image",cv.WINDOW_NORMAL)
cv.imshow("noise image",image)
src = cv.imread(r"C:\pics\samples\data\lena.jpg")
cv.namedWindow("input image",cv.WINDOW_NORMAL)
cv.imshow("input image",src)
gaussian_noise(src)
cv.waitKey(0)
cv.destoryAllWindows()
numpy包里的random模块用于生成随机数,random模块里的normal函数表示的是生成高斯随机数。
normal函数默认原型:normal(loc=0.0, scale=1.0, size=None)。
loc参数表示高斯分布的中心点。
scale参数表示高斯分布的标准差σ。
size参数表示产生随机数的个数。size取值可以为(m,n,k),表示绘制mnk个样本。
3.高斯模糊
import cv2 as cv
src = cv.imread(r"C:\pics\samples\data\lena.jpg")
src = cv.imread(r"C:\pics\samples\data\lena.jpg")
cv.namedWindow("input image",cv.WINDOW_NORMAL)
cv.imshow("input image",src)
dst = cv.GaussianBlur(src,(15,15),0)
cv.namedWindow("gaussianBlur_image",cv.WINDOW_NORMAL)
cv.imshow("gaussianBlur_image",dst)
cv.waitKey(0)
cv.destroyAllWindows()
高斯模糊GaussianBlur函数原型:GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) -> dst
src参数表示待处理的输入图像。
ksize参数表示高斯滤波器模板大小。 ksize.width和ksize.height可以不同,但它们都必须是正数和奇数。或者,它们可以是零,即(0, 0),然后从σ计算出来。
sigmaX参数表示 X方向上的高斯内核标准差。
sigmaY参数表示 Y方向上的高斯内核标准差。 如果sigmaY为零,则设置为等于sigmaX,如果两个sigma均为零,则分别从ksize.width和ksize.height计算得到。
补:若ksize不为(0, 0),则按照ksize计算,后面的sigmaX没有意义。若ksize为(0, 0),则根据后面的sigmaX计算ksize