高斯滤波
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。
模拟人眼,关注中心区域。
参数:
- x,y是卷积参数坐标
- 标准差σ
σ越小,关注区域越集中
cv2.GussianBlur()函数
语法:GaussianBlur(src,ksize,sigmaX [,dst [,sigmaY [,borderType]]])-> dst
——src输入图像;图像可以具有任意数量的通道,这些通道可以独立处理,但深度应为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。
——dst输出图像的大小和类型与src相同。
——ksize高斯内核大小。 ksize.width和ksize.height可以不同,但它们都必须为正数和奇数,也可以为零,然后根据sigma计算得出。
——sigmaX X方向上的高斯核标准偏差。
——sigmaY Y方向上的高斯核标准差;如果sigmaY为零,则将其设置为等于sigmaX;如果两个sigmas为零,则分别从ksize.width和ksize.height计算得出;为了完全控制结果,而不管将来可能对所有这些语义进行的修改,建议指定所有ksize,sigmaX和sigmaY。
blur_1 = cv2.GaussianBlur(img,(5,5),0) #(5, 5)表示高斯矩阵的长与宽都是5,标准差取0
高斯金字塔(缩放)
图像金字塔化:先进行图像平滑,再进行降采样,根据降采样率,得到一系列尺寸逐渐减小的图像。
操作:n次(高斯卷积→2倍降采样)→n层金字塔
目的:捕捉不同尺寸的物体
本质:信号的多尺度表示法
直接降采样会损失信息
完整代码如下
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('opencv.png',0) #直接读为灰度图像
for i in range(2000): #添加点噪声
temp_x = np.random.randint(0,img.shape[0])
temp_y = np.random.randint(0,img.shape[1])
img[temp_x][temp_y] = 255
blur_1 = cv2.GaussianBlur(img,(5,5),0)
blur_2 = cv2.medianBlur(img,5)
plt.subplot(1,3,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgr
plt.subplot(1,3,2),plt.imshow(blur_1,'gray')
plt.subplot(1,3,3),plt.imshow(blur_2,'gray')
plt.show()