在进行均值滤波和方框滤波时,其邻域内每个像素的权重是相等的。在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算邻域内各个像素值不同权重的和。

4.1 原理介绍

在高斯滤波中,卷积核中的值不再都是1。如下图所示

在实际使用中,高斯滤波使用的可能是不同大小的卷积核,核的宽度和高度可以不相同,但是它们都必须是奇数,可以根据使用需求选定合适的卷积核。每一种尺寸的卷积核都可以有多种不同形式的权重比例。在实际计算中,卷积核是归一化处理的,严格来讲,使用没有进行归一化处理的卷积核进行滤波,得到的结果往往是错误的。

4.2 函数语法

在OpenCV中,实现高斯滤波的函数是cv2.GaussianBlur(),该函数的语法格式是:

dst=cv2.GaussianBlur(src,ksize,sigmaX,sigmaY,borderType)

● dst是返回值,表示进行高斯滤波后得到的处理结果。

● src 是需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道 独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F中的一 种。

● ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中其邻域图像的高度和宽 度。需要注意,滤波核的值必须是奇数。

● sigmaX 是卷积核在水平方向上(X 轴方向)的标准差,其控制的是权重比例。

● sigmaY是卷积核在垂直方向上(Y轴方向)的标准差。如果将该值设置为0,则只采用sigmaX的值

如果sigmaX和sigmaY都是0,则通过ksize.width和ksize.height计算得到。其中:

sigmaX=0.3×[(ksize.width-1)×0.5-1] +0.8

sigmaY=0.3×[(ksize.height-1)×0.5-1]+0.8

● borderType是边界样式,该值决定了以何种方式处理边界。一般情况下,不需要考虑该值,直接采用默认值即可。 在该函数中,sigmaY和borderType是可选参数。sigmaX是必选参数,但是可以将该参数设置为0,让函数自己去计算sigmaX的具体值。

函数cv2.GaussianBlur()的常用形式为:
dst=cv2.GaussianBlur(src,ksize,0,0)

4.3 程序示例

import cv2  as cv
import numpy as np
def cv_show(name, img):
    cv.imshow(name, img)
    cv.waitKey(0)
    cv.destroyAllWindows()
*对图像添加高斯噪声
def add_gauss_noise(image, mean=0, val=0.01):
    size = image.shape
    # 对图像归一化处理
    image = image / 255
    gauss = np.random.normal(mean, val**0.05, size)
    image = image + gauss
    return image
img = cv.imread('D:\\dlam.jpg')
if img is None:
    print('Failed to read the image')
img1 = add_gauss_noise(img)
cv_show('img1', img1)
img2 = cv.GaussianBlur(img1, (3, 3), 1, 2)
cv_show('img2', img2)

原图如下:

添加高斯噪声:

 高斯滤波结果:

        高斯滤波对高斯噪声消除效果较好。

在进行均值滤波和方框滤波时,其邻域内每个像素的权重是相等的。在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算邻域内各个像素值不同权重的和。4.1 原理介绍在高斯滤波中,卷积核中的值不再都是1。如下图所示在实际使用中,高斯滤波使用的可能是不同大小的卷积核,核的宽度和高度可以不相同,但是它们都必须是奇数,可以根据使用需求选定合适的卷积核。每一种尺寸的卷积核都可以有多种不同形式的权重比例。在实际计算中,卷积核是归一化处理的... GaussianBlur()函数用高斯滤波器(GaussianFilter)对图像进行平滑处理。 该函数将源图像与指定的高斯内核进行卷积,同时也支持in-place滤波。 API说明 C++ API:
Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm 在进行均值滤波和方框滤波时,其邻域内每个像素的权重是相等的。在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算邻域内各个像素值不同权重的和。 7.3.1 基本原理 在高斯滤波中,卷积核中的值不再都是1。例如,一个3×3的卷积核可能如下图所示: 在图7中,针对最左...
高斯滤波是一种线性平滑滤波 高斯滤波是对整幅图像进行加权平均的过程,每一个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。 基于二维高斯函数,构建权重矩阵,进而构建高斯核
高斯滤波(Gauss Filter)是线性滤波中的一种。在OpenCV图像滤波处理中,高斯滤波用于平滑图像,或者说是图像模糊处理,因此高斯滤波是低通的。其广泛的应用在图像处理的减噪过程中,尤其是被高斯噪声所污染的图像上。 高斯滤波的基本思想是: 图像上的每一个像素点的值,都由其本身和邻域内其他像素点的值经过加权平均后得到。其具体操作是,用一个核(又称为卷积核、掩模、矩阵)扫描图像中每一个像素点,将
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 语法:cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)-> dst ——src输入图像。 ——dst输出图像的大小和类型与src相同。 ——ksize高斯内核大小。 ksize.width和ksize.height可以不同,但​​它们都必须为正数和奇数,也可以为零,然后根据sigmaX和sigmaY计算得出。 ——sigmaX X方向上的高斯核标准偏差。 from matplotlib import pyplot as plt img = cv.imread('test.jpg') img = cv.cvtColor(img,cv.COLOR_BGR2RGB) blur = cv.GaussianBlur(img,(7,7),7) plt.subplot(121),plt.imshow(img),plt.title('original') plt.xticks([]),plt.ytic.
ksize:高斯卷积核的大小,注意 : 卷积核的宽度和高度都应为奇数,且可以不同 sigmaX: 水平方向的标准差 sigmaY: 垂直方向的标准差,默认值为0,表示与sigmaX相同 borderType:填充边界类型 import cv2 as cv from matplotlib import pyplot as
可以使用numpy中的卷积函数实现高斯滤波。 首先,我们需要创建一个高斯核,可以使用scipy中的`scipy.ndimage.gaussian_filter`函数生成一个高斯核,该函数的参数sigma控制高斯核的大小。 然后,我们使用numpy中的`numpy.convolve`函数对图像进行卷积操作,这可以通过将图像和高斯核转换为一维数组来实现。 下面是一个示例代码实现高斯滤波: import numpy as np import cv2 def gaussian_kernel(size, sigma): kernel = np.zeros((size, size)) center = size // 2 for i in range(size): for j in range(size): x = i - center y = j - center kernel[i, j] = np.exp(-(x**2 + y**2) / (2 * sigma**2)) return kernel / (2 * np.pi * sigma**2) def gaussian_filter(image, kernel_size, sigma): kernel = gaussian_kernel(kernel_size, sigma) filtered = np.zeros_like(image) for i in range(image.shape[2]): filtered[:, :, i] = np.convolve(image[:, :, i].flatten(), kernel.flatten(), mode='same').reshape(image.shape[:2]) return filtered.astype(np.uint8) # 读取图像 image = cv2.imread('image.png') # 使用自定义高斯滤波函数进行滤波 filtered = gaussian_filter(image, kernel_size=5, sigma=1) # 显示滤波结果 cv2.imshow('Filtered Image', filtered) cv2.waitKey(0) cv2.destroyAllWindows() 这个示例代码中,`gaussian_kernel`函数用于生成高斯核,`gaussian_filter`函数用于对图像进行高斯滤波。在`gaussian_filter`函数中,我们对每个通道单独进行卷积操作,然后将结果合并成一个三维数组。最后将滤波结果转换为`uint8`类型并显示。
cqutlqxjy: 为什么我python对于这个函数的描述跟你的描述不一样啊,我是python 3.6.3,对于cv2.filter2D的描述是 filter2D(src,ddepth,kernel[,dst[,anchor[,delta[,borderType]]]] ) ->dst, 可以问一下吗 1.参数后面的[是什么意思,如果表示数组,为什么borderType会加4个],是格式写法吗还是 2.参数还是不一样的,例如我的python描述中参数有dst在括号里 Opencv之图像滤波:2.均值滤波(cv2.blur) ayitime: 椒盐噪声用中值滤波更恰当一些 Opencv之图像滤波:5.中值滤波(cv2.medianBlur) Dandelion956: 我开头还输了import numpy as np才跑通