均值滤波算法 概念+原理+实现 掌握100种计算机视觉技术算法系列 获取10000+计算机视觉技术PDF

1 阅读1分钟

均值滤波算法 概念+原理+实现 掌握100种计算机视觉技术算法系列 获取10000+计算机视觉技术PDF

前言 概念 原理 步骤 效果 生成测试图片实现 均值滤波算法 总结

前言

图像噪声是数字图像处理中常见的问题,它会影响图像的视觉质量和后续处理效果。均值滤波作为一种经典的线性平滑滤波器,因其算法简单、易于实现且能有效去除高斯噪声等优点,在图像降噪领域得到广泛应用。博客作者微信公众号(计算机视觉技术)集中收录了100种计算机视觉技术算法,每一种算法都具体介绍了概念、原理、步骤、运行效果,以及完整的源码实现,您可以据此系统全面掌握计算机视觉技术算法。

本任务围绕均值滤波算法展开,首先从理论上阐述了均值滤波的概念、原理和实现步骤,然后通过Python语言完整实现了该算法。为了验证算法的有效性,我们还设计了一个测试图像生成程序,用于创建带有高斯噪声的测试图像,并通过对比原始图像与滤波后图像来直观展示算法的去噪效果。

关注微信公众号"计算机视觉技术”,系统掌握100种计算机视觉技术算法。 微信公众号提供获取10000+计算机视觉技术最新技术PDF的URL链接和获取PDF的脚本工具。实际体验亲测稳定可靠。

计算机视觉技术算法 概念+原理+实现

微信视频号:计算机视觉技术

微信公众号:计算机视觉技术

概念

均值滤波是一种线性平滑滤波器,用于图像降噪和模糊处理。它通过取邻域像素的平均值来替换中心像素值,从而减少图像中的噪声。

原理

核心思想:图像中相邻像素具有相似性,噪声是随机分布的
数学表达:用滤波窗口内所有像素的算术平均值作为中心像素的新值
频域特性:低通滤波器,平滑高频细节(如噪声),保留低频成分(如渐变区域)

步骤

  • 定义滤波窗口:选择一个n×n的窗口(如3×3、5×5)
  • 滑动窗口:将窗口在图像上逐像素移动
  • 计算均值:对窗口内所有像素值求和并除以像素总数
  • 赋值:将计算结果赋给中心像素
  • 遍历全图:重复步骤2-4,处理整幅图像(边缘需特殊处理)

特点
优点:计算简单、易于实现、有效去除高斯噪声
缺点:会模糊图像边缘,对细节信息有损失

效果

运行效果图片

微信公众号:计算机视觉技术 均值滤波算法运行效果

生成测试图片

生成测试图片。

本程序生成用于测试均值滤波算法的带噪声图像。程序创建彩色图像,生成RGB三通道的渐变背景,并在图像中添加圆形和矩形等几何形状。程序向图像添加了高斯噪声。最终将处理后的图像保存为butianyun_computer_vision_input.png文件,可直接作为均值滤波算法的输入图像。通过OpenCV和NumPy实现图像创建、渐变生成、形状绘制和噪声添加功能。

"""

生成带噪声的测试图像

功能描述:

本程序用于创建一个带有几何形状和高斯噪声的测试图像,

可用于测试图像处理算法(如均值滤波)的去噪效果。

主要功能:

1. 创建300x300的彩色图像

2. 生成RGB渐变背景

3. 添加圆形和矩形几何形状

4. 添加高斯噪声(标准差=30)

5. 保存为PNG格式的测试图像

输出文件:

- butianyun_computer_vision_input.png: 带噪声的测试图像

依赖库:

- OpenCV (cv2): 图像创建和保存

- NumPy: 数值计算和噪声生成

使用方法:

python 生成测试图片.py

"""

############################################################

# 微信公众号:计算机视觉技术

# 微信视频号:计算机视觉技术

############################################################

import cv2

import numpy as np

def create_test_image():

"""创建一个带噪声的测试图像"""

# 创建一个300x300的彩色图像

height, width = 300, 300

image = np.zeros((height, width, 3), dtype=np.uint8)

# 创建渐变背景

for i in range(height):

for j in range(width):

image[i, j, 0] = int(255 * i / height) # R

image[i, j, 1] = int(255 * j / width) # G

image[i, j, 2] = int(255 * (i + j) / (height + width)) # B

# 添加一些几何形状

cv2.circle(image, (100, 100), 50, (255, 0, 0), -1)

cv2.rectangle(image, (180, 180), (250, 250), (0, 0, 255), -1)

# 添加高斯噪声

noise = np.random.normal(0, 30, image.shape).astype(np.uint8)

noisy_image = cv2.add(image, noise)

# 保存图像

output_path = 'butianyun_computer_vision_input.png'

cv2.imwrite(output_path, noisy_image)

print(f"测试图像已创建: {output_path}")

if __name__ == "__main__":

create_test_image()

实现均值滤波算法

实现均值滤波算法。
本程序实现了均值滤波算法,用于图像降噪和平滑处理。程序读取输入图像butianyun_computer_vision_input.png,通过自定义mean_filter函数对图像应用3×3窗口的均值滤波。算法采用边界填充方式处理边缘像素,遍历图像每个像素计算邻域窗口的平均值并替换原像素值,有效去除随机噪声。处理后的图像保存为butianyun_computer_vision_output.png,同时使用Matplotlib生成并保存输入输出对比图butianyun_computer_vision.png。

"""

均值滤波算法实现

功能描述:

本程序实现了均值滤波算法,用于图像降噪和平滑处理。

均值滤波是一种线性平滑滤波器,通过取邻域像素的平均值

来替换中心像素值,从而有效去除图像中的随机噪声。

主要功能:

1. 读取输入图像

2. 应用均值滤波处理(默认3x3窗口)

3. 保存处理后的图像

4. 生成输入/输出对比图并保存

依赖库:

- OpenCV (cv2): 图像读取和保存

- NumPy: 数值计算

- Matplotlib: 图像显示和对比图生成

使用方法:

python 均值滤波算法.py

"""

############################################################

# 微信公众号:计算机视觉技术

# 微信视频号:计算机视觉技术

############################################################

import cv2

import numpy as np

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'Arial Unicode MS']

plt.rcParams['axes.unicode_minus'] = False

def mean_filter(image, kernel_size=3):

"""

均值滤波算法实现

参数:

image: 输入图像 (灰度图或彩色图)

kernel_size: 滤波窗口大小,默认为3x3

返回:

filtered_image: 滤波后的图像

"""

# 获取图像尺寸

height, width = image.shape[:2]

# 创建输出图像

filtered_image = np.zeros_like(image, dtype=np.float32)

# 计算边界填充量

pad = kernel_size // 2

# 对图像进行边界填充(使用边缘像素)

padded_image = cv2.copyMakeBorder(image, pad, pad, pad, pad, cv2.BORDER_REPLICATE)

# 遍历图像每个像素

for i in range(height):

for j in range(width):

# 提取窗口

window = padded_image[i:i+kernel_size, j:j+kernel_size]

# 计算窗口均值

if len(image.shape) == 2: # 灰度图

mean_value = np.mean(window)

else: # 彩色图

mean_value = np.mean(window, axis=(0, 1))

# 赋值

filtered_image[i, j] = mean_value

# 转换为uint8格式

filtered_image = np.clip(filtered_image, 0, 255).astype(np.uint8)

return filtered_image

def main():

# 输入输出路径

input_path = 'butianyun_computer_vision_input.png'

output_path = 'butianyun_computer_vision_output.png'

# 读取图像

image = cv2.imread(input_path)

if image is None:

print(f"错误:无法读取图像 {input_path}")

return

# 转换为RGB格式用于显示(OpenCV默认是BGR)

image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 应用均值滤波 (使用3x3窗口)

filtered_image = mean_filter(image_rgb, kernel_size=3)

# 保存处理后的图像(转换回BGR格式)

filtered_image_bgr = cv2.cvtColor(filtered_image, cv2.COLOR_RGB2BGR)

cv2.imwrite(output_path, filtered_image_bgr)

print(f"均值滤波完成,结果已保存到: {output_path}")

# 在一个窗口中同时显示输入和输出图像

plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)

plt.imshow(image_rgb)

plt.title('输入图像')

plt.axis('off')

plt.subplot(1, 2, 2)

plt.imshow(filtered_image)

plt.title('均值滤波后图像 (3x3)')

plt.axis('off')

plt.tight_layout()

# 保存对比图

comparison_path = r'butianyun_computer_vision.png'

plt.savefig(comparison_path, dpi=150, bbox_inches='tight')

print(f"对比图已保存到: {comparison_path}")

plt.show()

if __name__ == "__main__":

main()

总结

通过本次实践,我们成功实现了基于Python和OpenCV的均值滤波算法,并完成了以下工作:

首先,深入理解了均值滤波的原理:通过取滤波窗口内所有像素的算术平均值来替换中心像素,这是一种低通滤波器,能够有效平滑高频噪声成分。

其次,实现了完整的均值滤波算法,包括边界处理(使用边缘像素复制填充)、支持灰度图和彩色图像、可自定义滤波窗口大小等功能。

再次,设计了测试图像生成程序,创建包含渐变背景和几何形状的测试图像,并添加高斯噪声,为算法验证提供了标准测试数据。

最后,实现了可视化对比功能,将输入图像和输出图像并排显示并保存为对比图,直观展示了均值滤波的去噪效果。实验结果表明,均值滤波能有效降低图像噪声,但同时也造成了一定的图像细节模糊,这是该算法的固有特性。

计算机视觉技术算法 概念+原理+实现

微信视频号:计算机视觉技术

微信公众号:计算机视觉技术

关注微信公众号"计算机视觉技术”,系统掌握100种计算机视觉技术算法。

01均值滤波算法
02高斯滤波算法
03中值滤波算法
04双边滤波算法
05引导滤波算法
06直方图均衡化算法
07自适应直方图均衡化算法
08限制对比度自适应直方图均衡化算法
09伽马校正算法
10对数变换算法
11线性变换算法
12高斯噪声去除算法
13直方图匹配算法
14椒盐噪声去除算法
15脉冲噪声滤波算法
16图像灰度化算法
17形态学腐蚀算法
18形态学膨胀算法
19色彩量化算法
20颜色空间转换算法
21形态学开运算算法
22形态学闭运算算法
23顶帽变换算法
24底帽变换算法
25图像旋转算法
26图像缩放算法
27图像裁剪算法
28图像镜像翻转算法
29图像金字塔构建算法
30图像去雾暗通道先验算法
31FAST角点检测算法
32ORB特征提取与描述算法
33Shi-Tomasi角点检测算法
34SIFT特征提取与描述算法
35SURF特征提取与描述算法
36Harris角点检测算法
37BRISK特征提取与描述算法
38BRIEF特征描述算法
39FREAK特征描述算法
40Sobel边缘检测算法
41Prewitt边缘检测算法
42Roberts边缘检测算法
43Canny边缘检测算法
44Laplacian边缘检测算法
45LOG边缘检测算法
46方向梯度直方图特征提取算法
47局部二值模式特征提取算法
48中心对称局部二值模式特征提取算法
49局部相位量化特征提取算法
50形态学骨架提取算法
51尺度不变特征变换算法
52离散余弦变换特征提取算法
53最大稳定极值区域检测算法
54极值稳定区域检测算法
55简单线性迭代聚类算法
56选择性搜索区域推荐算法
57密集特征提取算法
58傅里叶变换特征提取算法
59Gabor滤波器特征提取算法
60阈值分割全局阈值算法
61阈值分割迭代阈值算法
62阈值分割最大类间方差算法
63区域生长分割算法
64区域分裂与合并分割算法
65分水岭分割算法
66活动轮廓模型分割算法
67基于图割的图像分割算法
68水平集图像分割算法
69梯度矢量流活动轮廓分割算法
70K-Means聚类图像分割算法
71模糊C均值聚类图像分割算法
72谱聚类图像分割算法
73均值漂移图像分割算法
74条件随机场图像分割算法
75马尔可夫随机场图像分割算法
76实例分割掩码生成算法
77超像素分割SLIC算法
78滑动窗口目标检测算法
79积分图目标检测算法
80级联分类器目标检测算法
81交并比计算算法
82非极大值抑制算法
83卡尔曼滤波目标跟踪算法
84粒子滤波目标跟踪算法
85均值漂移目标跟踪算法
86连续自适应均值漂移目标跟踪算法
87相关滤波目标跟踪算法
88核相关滤波目标跟踪算法
89判别相关滤波目标跟踪算法
90多目标跟踪匈牙利匹配算法
91多目标跟踪余弦距离匹配算法
92基于特征的图像配准算法
93基于区域的图像配准算法
94RANSAC图像配准算法
95同态滤波算法
96多尺度Retinex增强算法
97PCA主成分分析算法
98线段检测LSD算法
99光流法目标追踪算法
100圆形检测概率霍夫变换算法

关注微信公众号"计算机视觉技术”,系统掌握100种计算机视觉技术算法。 微信公众号提供获取10000+计算机视觉技术最新技术PDF的URL链接和获取PDF的脚本工具。实际体验亲测稳定可靠。

100种算法,每一种算法都具体介绍了概念、原理、步骤、运行效果,以及完整的源码实现,您可以据此系统全面掌握计算机视觉技术算法。

如果您认为这篇技术博客对您有一点帮助,请一定点赞+评论+收藏+转发。您的支持是作者创作更多更好的技术博客的动力。