几种滤波算法的适用场景(学习笔记)

本文介绍了图像处理中常用的滤波算法,如均值滤波、中值滤波、高斯滤波和双边滤波,以及它们各自适用的场景。均值滤波适用于去除噪声但可能导致细节模糊,中值滤波擅长去除椒盐噪声,高斯滤波平滑图像同时保留细节,双边滤波则在平滑和边缘保留间取得平衡。此外,还提到了Laplacian、Sobel、Roberts、Prewitt和Canny等边缘检测滤波器。文章通过OpenCV库展示了这些滤波效果的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在图像处理中,常用的滤波算法有均值滤波、中值滤波、高斯滤波和双边滤波。它们各自适用于不同的应用场景。

  1. 均值滤波:适用于去除图像中的噪声。均值滤波通过计算像素周围邻域的平均值来平滑图像,可以有效地减少高频噪声。然而,均值滤波会导致图像细节的模糊,因此在需要保留图像细节的情况下不适用。

  2. 中值滤波:适用于去除椒盐噪声等孤立噪声。中值滤波通过计算像素周围邻域的中值来平滑图像,可以有效地去除孤立噪声点,而不会对图像细节产生模糊。因此,中值滤波常用于去除椒盐噪声等噪声类型。

  3. 高斯滤波:适用于平滑图像并保留图像细节。高斯滤波通过计算像素周围邻域的加权平均值来平滑图像,其中权重由高斯函数确定。高斯滤波可以有效地平滑图像,同时保留图像的边缘和细节。因此,高斯滤波常用于图像平滑、去除高频噪声以及边缘检测前的预处理。

  4. 双边滤波:适用于平滑图像并保留边缘。双边滤波通过考虑像素的空间距离和像素值之间的相似性来平滑图像。它可以有效地平滑图像,同时保留图像的边缘和细节。因此,双边滤波常用于图像降噪、图像增强以及边缘保留滤波等应用。

  5. Laplacian滤波:适用于边缘检测。Laplacian滤波通过计算像素周围邻域的二阶导数来检测图像中的边缘。它可以提取出图像中的高频信息,用于边缘检测和图像锐化。

  6. Sobel滤波:适用于边缘检测。Sobel滤波通过计算像素周围邻域的一阶导数来检测图像中的边缘。它可以提取出图像中的梯度信息,用于边缘检测和图像锐化。

  7. Roberts滤波:适用于边缘检测。Roberts滤波通过计算像素周围邻域的一阶导数来检测图像中的边缘。它可以提取出图像中的梯度信息,用于边缘检测和图像锐化。

  8. Prewitt滤波:适用于边缘检测。Prewitt滤波通过计算像素周围邻域的一阶导数来检测图像中的边缘。它可以提取出图像中的梯度信息,用于边缘检测和图像锐化。

  9. Canny滤波:适用于边缘检测。Canny滤波是一种多阶段的边缘检测算法,它通过计算像素周围邻域的梯度和非极大值抑制来检测图像中的边缘。Canny滤波可以提取出细节清晰、连续的边缘。

在选择何种滤波算法时,需要根据具体的应用场景和需求来决定。

如果需要去除高频噪声,可以选择均值滤波或高斯滤波;

如果需要去除孤立噪声点,可以选择中值滤波;

如果需要平滑图像并保留细节,可以选择高斯滤波或双边滤波。

如果需要进行边缘检测,可以选择Laplacian滤波、Sobel滤波、Roberts滤波、Prewitt滤波或Canny滤波。

具体根据算法的计算复杂度和实时性要求进行选择。

 

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图像
image = cv2.imread('C:\\Users\\BZ\\Desktop\\99.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# cv2.imshow('Filtered Images', image)

# cv2.waitKey(0)
# cv2.destroyAllWindows()
# 均值滤波
mean_filtered = cv2.blur(image, (5, 5))

# 中值滤波
median_filtered = cv2.medianBlur(image, 5)

# 高斯滤波
gaussian_filtered = cv2.GaussianBlur(image, (5, 5), 0)

# 双边滤波
bilateral_filtered = cv2.bilateralFilter(image, 9, 75, 75)

# Laplacian滤波
laplacian_filtered = cv2.Laplacian(image, cv2.CV_64F)

# Sobel滤波
sobel_x_filtered = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y_filtered = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
sobel_filtered = cv2.addWeighted(sobel_x_filtered, 0.5, sobel_y_filtered, 0.5, 0)

# Roberts滤波
roberts_x_filtered = cv2.filter2D(image, -1, np.array([[1, 0], [0, -1]]))
roberts_y_filtered = cv2.filter2D(image, -1, np.array([[0, 1], [-1, 0]]))
roberts_filtered = cv2.addWeighted(roberts_x_filtered, 0.5, roberts_y_filtered, 0.5, 0)

# Prewitt滤波
prewitt_x_filtered = cv2.filter2D(image, -1, np.array([[1, 0, -1], [1, 0, -1], [1, 0, -1]]))
prewitt_y_filtered = cv2.filter2D(image, -1, np.array([[1, 1, 1], [0, 0, 0], [-1, -1, -1]]))
prewitt_filtered = cv2.addWeighted(prewitt_x_filtered, 0.5, prewitt_y_filtered, 0.5, 0)

# Canny滤波
canny_filtered = cv2.Canny(image, 100, 200)

# 创建一个2x5的子图
fig, axs = plt.subplots(2, 5, figsize=(15, 6))

# 在子图中显示滤波结果图片
axs[0, 0].imshow(image, cmap=None)
# axs[0, 0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
axs[0, 0].set_title('Original Image')

axs[0, 1].imshow(mean_filtered)
axs[0, 1].set_title('Mean Filtered Image')

axs[0, 2].imshow(median_filtered)
axs[0, 2].set_title('Median Filtered Image')

axs[0, 3].imshow(gaussian_filtered)
axs[0, 3].set_title('Gaussian Filtered Image')

axs[0, 4].imshow(bilateral_filtered)
axs[0, 4].set_title('Bilateral Filtered Image')

axs[1, 0].imshow(laplacian_filtered)
axs[1, 0].set_title('Laplacian Filtered Image')

axs[1, 1].imshow(sobel_filtered)
axs[1, 1].set_title('Sobel Filtered Image')

axs[1, 2].imshow(roberts_filtered)
axs[1, 2].set_title('Roberts Filtered Image')

axs[1, 3].imshow(prewitt_filtered)
axs[1, 3].set_title('Prewitt Filtered Image')

axs[1, 4].imshow(canny_filtered)
axs[1, 4].set_title('Canny Filtered Image')

# 隐藏子图的坐标轴
for ax in axs.flat:
    ax.axis('off')

# 调整子图之间的间距
plt.tight_layout()

# 显示图像
plt.show()

1. 主要工作: 基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比: a) 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. b) 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。 c) 高斯滤波是一种线性平滑滤波适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。 2. 代码功能: 实现中值滤波、均值滤波以及高斯滤波,并对图像进行输出 3. 结果分析 a) 图像经过中值滤波后,高斯噪声没有被完全去除,椒盐噪声几乎被完全去除效果较好。经过均值滤波后不管是高斯噪声还是椒盐噪声大部分都没有被去除,只是稍微模糊化。经过高斯滤波后,高斯噪声和椒盐噪声几乎被很大程度的模糊化,原图好像被加上了一层蒙版。 【注】若添加图片分辨率过高会发出警报,如果可以正常输出则可以忽视。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值