图像平滑(opencv_python学习)

2D卷积(图像过滤)

2D卷积是一种对图像进行滤波的方法,一般来说,卷积操作可以实现平滑、锐化、边缘检测等不同的图像处理效果,具体取决于卷积核的设计。
在OpenCV中,可以使用cv2.filter2D函数将一个内核与图像进行卷积。

可以使用各种低通滤波器(LPF),高通滤波器(HPF)等对图像进行滤波。
LPF有助于消除噪声,使图像模糊等。HPF滤波器有助于在图像中找到边缘。

# 定义5x5平均滤波器内核
kernel = np.ones((5, 5), np.float32) / 25

# 进行卷积操作
filtered_img = cv2.filter2D(img, -1, kernel)

其中参数-1表示输出图像与输入图像具有相同的深度。

模糊后的图像:
在这里插入图片描述

图像模糊(图像平滑)

均值模糊

均值模糊(Mean Blur):使用一个归一化的卷积核来对图像进行平均滤波,将每个像素周围的像素值取平均。这种模糊技术可以有效地减少高频噪声,但可能会导致图像失去细节。

cv2.blur(src, ksize[, dst[, anchor[, borderType]]])
cv2.boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]])
  • cv2.blur(src, ksize[, dst[, anchor[, borderType]]]):使用一个归一化的卷积核对图像进行平均滤波,并返回结果图像。ksize参数指定了卷积核的大小,anchor参数表示锚点的位置,borderType参数指定了边界像素的处理方式。
  • cv2.boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]]):使用一个非归一化的卷积核对图像进行平均滤波,并返回结果图像。ddepth参数表示输出图像的深度,ksize参数指定了卷积核的大小,anchor参数表示锚点的位置,normalize参数表示是否对卷积核进行归一化,borderType参数指定了边界像素的处理方式。

如果不想使用标准化的框式过滤器,请使用cv.boxFilter()。将参数 normalize = False 传递给函数。

高斯模糊

高斯模糊和均值模糊是两种常用的图像模糊技术,它们在平滑图像的过程中有一些区别。

核函数的不同:

  • 高斯模糊使用高斯函数作为核函数,该函数以中心点为最高点,逐渐减小至边缘,并形成一个连续的曲线。高斯函数在空间域和频率域都是平滑的。
  • 均值模糊使用均匀权重的矩形函数作为核函数,即将卷积核的每个像素的权重设置为相等值。

模糊效果的不同:

  • 高斯模糊产生的效果比较自然,可以减小图像中各像素之间的差异,同时能够保留更多的细节信息。
  • 均值模糊会对图像进行整体的平均处理,可能导致图像的细节丢失,特别是在处理噪声时,可能会产生较差的去噪效果。

处理速度的不同:

  • 由于高斯模糊使用了连续的高斯函数,计算复杂度较高,因此相对而言,高斯模糊的处理速度可能较慢。
  • 均值模糊使用简单的均匀权重的核函数,计算复杂度较低,因此处理速度可能更快。

使用 cv2.GaussianBlur() 函数实现高斯模糊,使用函数 cv.getGaussianKernel() 创建高斯内核

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

具体参数说明如下:

  • src:输入图像。
  • ksize:卷积核的大小。它可以是一个二维的奇数值矩阵,如(3, 3)、(5, 5),表示高斯核的尺寸。
  • sigmaX:X方向上的高斯核标准差。
  • dst(可选):输出结果图像,与输入图像具有相同的大小和数据类型。
  • sigmaY(可选):Y方向上的高斯核标准差,如果未指定,则默认与sigmaX相等。
  • borderType(可选):边界像素的处理方式。

使用cv2.GaussianBlur()函数可以对图像进行高斯模糊处理,并根据给定的标准差(sigmaX和sigmaY)调整模糊效果的程度。较大的标准差将导致更大程度的模糊。

中值模糊

OpenCV中的cv.medianBlur()函数,它用于进行中值模糊处理。中值模糊是一种常用的图像滤波算法,用于去除椒盐噪声。

blur = cv.medianBlur(src, ksize)

该函数接受两个参数:

  • src是输入图像。
  • ksize表示中值模糊的内核大小,即内核的宽度和高度。这里要求ksize为正奇数整数,例如1、3、5等。较大的ksize会产生更强烈的模糊效果。

双边模糊

OpenCV中的cv.bilateralFilter()函数,它是一种能够同时去噪并保持边缘清晰锐利的滤波器。相较于其他滤波器而言,cv.bilateralFilter()的速度较慢。

传统的高斯滤波器仅考虑像素周围的邻域,并计算其高斯加权平均值。高斯滤波器仅是空间函数,即仅考虑附近像素,而不关注像素之间的差异。这导致了边缘模糊,这并不是我们所期望的结果。

而双边滤波器在空间中也采用高斯滤波器,在像素差异方面增加了一个高斯函数作为补充。空间高斯函数确保只有附近像素被模糊,而强度差的高斯函数确保只有与中心像素相似的像素被模糊。由于边缘处像素强度变化较大,因此可以保留边缘。

filtered_image = cv.bilateralFilter(src, d, sigma_color, sigma_space)

该函数接受四个参数:

  • src是输入图像。
  • d是过滤器的直径,也称为领域直径。它决定了在空间中有多少像素被考虑在内。
  • sigma_color是颜色空间的标准差,该参数影响对颜色相似度的权重。较大的值将导致更多的颜色被视为相似,从而增加模糊范围。
  • sigma_space是空间域的标准差,该参数影响对空间相似度的权重。较大的值将导致更多的像素被视为相似,从而增加模糊范围。

四种模糊的对比

  • 均值滤波器:
  1. 应用场景:主要用于去除图像中的高频噪声,例如椒盐噪声或高斯噪声。
  2. 原理:将像素点周围邻域内的像素值取平均值,从而实现去噪。
  3. 效果:能够有效消除噪声,但在滤波过程中会造成图像模糊。
  • 中值滤波器:
  1. 应用场景:适用于去除图像中的椒盐噪声或脉冲噪声。
  2. 原理:将像素点周围邻域内的像素值排序,并取中间值作为滤波结果。
  3. 效果:能够有效去除噪声,同时相对于均值滤波器来说,中值滤波器能够更好地保持图像细节。
  • 高斯滤波器:
  1. 应用场景:广泛应用于图像模糊、降噪和平滑处理。
  2. 原理:通过对像素点周围邻域内的像素进行加权平均,使得离中心像素距离近的像素具有更大的权重。
  3. 效果:能够有效平滑图像,消除噪声,同时相对于均值滤波器来说,高斯滤波器能够更好地保持图像细节。
  • 双边滤波器:
  1. 应用场景:适用于同时去噪和保持边缘清晰锐利的情况,特别是在保留边缘细节方面具有优势。
  2. 原理:结合空间域和像素强度的高斯滤波,通过同时考虑像素之间的空间距离和像素值差异来进行滤波。
  3. 效果:能够较好地去除噪声,同时保持图像的边缘锐利。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜡笔小新配吉良吉影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值