人工智能之视觉领域 计算机视觉 第六章 图像平滑处理

人工智能之视觉领域 计算机视觉

第六章 图像平滑处理


文章目录

  • [人工智能之视觉领域 计算机视觉](#人工智能之视觉领域 计算机视觉)
  • 前言:图像平滑处理(去噪)
    • [1. 通俗理解:什么是图像平滑?](#1. 通俗理解:什么是图像平滑?)
    • [2. 常见噪声类型与对应策略](#2. 常见噪声类型与对应策略)
    • [3. 三大平滑滤波方法详解](#3. 三大平滑滤波方法详解)
      • [3.1 均值滤波(Mean / Box Filter)](#3.1 均值滤波(Mean / Box Filter))
        • [🔧 函数:`cv2.blur(src, ksize)`](#🔧 函数:cv2.blur(src, ksize))
      • [3.2 高斯滤波(Gaussian Blur)](#3.2 高斯滤波(Gaussian Blur))
        • [🔧 函数:`cv2.GaussianBlur(src, ksize, sigmaX)`](#🔧 函数:cv2.GaussianBlur(src, ksize, sigmaX))
      • [3.3 中值滤波(Median Blur)](#3.3 中值滤波(Median Blur))
        • [🔧 函数:`cv2.medianBlur(src, ksize)`](#🔧 函数:cv2.medianBlur(src, ksize))
    • [4. 三种滤波效果对比(Mermaid 流程图)](#4. 三种滤波效果对比(Mermaid 流程图))
    • [5. 完整代码实战:去噪效果对比](#5. 完整代码实战:去噪效果对比)
    • [6. 补充:何时使用哪种滤波?](#6. 补充:何时使用哪种滤波?)
    • [7. 高级技巧:自适应高斯滤波(按区域调整强度)](#7. 高级技巧:自适应高斯滤波(按区域调整强度))
    • [8. 常见误区提醒](#8. 常见误区提醒)
    • [✅ 本章总结](#✅ 本章总结)
  • 资料关注

前言:图像平滑处理(去噪)

学习目标:理解"图像噪声"的来源与类型,掌握三种主流平滑滤波方法(均值、高斯、中值),能根据噪声特点选择合适的去噪策略,为后续边缘检测、特征提取等任务提供干净图像。


1. 通俗理解:什么是图像平滑?

想象你用手机拍了一张夜景照片,放大后发现有很多 彩色小点 (噪点);

或者扫描一张老报纸,纸上出现很多 黑白杂点

图像平滑 = 给图像"磨皮"或"柔化"

目的:抑制噪声、模糊细节、使图像更平滑

但注意:平滑 ≠ 越模糊越好

我们要在"去噪"和"保留细节"之间找平衡。


2. 常见噪声类型与对应策略

噪声类型 视觉表现 成因 推荐滤波方法
高斯噪声 随机分布的微小亮度变化(像雾) 传感器热噪声、电子干扰 高斯滤波
椒盐噪声 随机出现的纯黑/纯白像素点 信号传输错误、坏像素 中值滤波
均匀噪声 像素值在固定范围内随机波动 量化误差 均值或高斯滤波

🎯 核心思想

滤波器通过 邻域像素加权平均 来替代中心像素,从而"平均掉"异常值。


3. 三大平滑滤波方法详解

3.1 均值滤波(Mean / Box Filter)

原理 :用一个方形窗口(如 5×5),对窗口内所有像素取算术平均值,替换中心像素。

  • 简单粗暴,计算快
  • 缺点:严重模糊边缘和细节
🔧 函数:cv2.blur(src, ksize)
python 复制代码
blurred = cv2.blur(img, (5, 5))  # 5x5 均值核

ksize:核大小(必须是正奇数,如 3, 5, 7)


3.2 高斯滤波(Gaussian Blur)

原理 :使用高斯函数 作为权重,中心像素权重最大,越远权重越小。

👉 既能去噪,又能较好保留边缘!

  • 最常用、最推荐的通用去噪方法
  • 参数少,效果稳定
🔧 函数:cv2.GaussianBlur(src, ksize, sigmaX)
python 复制代码
gaussian = cv2.GaussianBlur(img, (5, 5), 0)
参数 说明
ksize 核大小(如 (5,5),必须为正奇数)
sigmaX X 方向的标准差• 设为 0 → 自动根据 ksize 计算• 值越大 → 模糊越强

💡 经验法则

  • 轻微去噪:ksize=(3,3)
  • 中等去噪:ksize=(5,5)
  • 强去噪:ksize=(7,7) 或增大 sigmaX

3.3 中值滤波(Median Blur)

原理 :将窗口内所有像素排序,取中位数 作为新值。

👉 对椒盐噪声(孤立的极亮/极暗点)效果极佳!

  • 不产生新像素值(只从原图选)
  • 能有效去除"斑点",同时保留边缘
🔧 函数:cv2.medianBlur(src, ksize)
python 复制代码
median = cv2.medianBlur(img, 5)  # ksize 是整数(如 3, 5, 7)

⚠️ 注意:ksize单个整数(因为核是正方形),且必须 ≥ 3


4. 三种滤波效果对比(Mermaid 流程图)

椒盐噪声
高斯/均匀噪声


含噪声图像
噪声类型?
中值滤波 cv2.medianBlur
是否需保留边缘?
高斯滤波 cv2.GaussianBlur
均值滤波 cv2.blur
输出平滑图像


5. 完整代码实战:去噪效果对比

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt

# 1. 创建或读取带噪声的图像
def add_salt_pepper_noise(image, prob=0.02):
    """添加椒盐噪声"""
    output = image.copy()
    thres = 1 - prob
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            rdn = np.random.rand()
            if rdn < prob:
                output[i][j] = 0  # 椒(黑)
            elif rdn > thres:
                output[i][j] = 255  # 盐(白)
    return output

# 读取图像(或创建测试图)
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
if img is None:
    # 若无图,创建一个渐变图
    img = np.zeros((300, 300), dtype=np.uint8)
    for i in range(300):
        img[i, :] = i // 3  # 垂直渐变

# 添加椒盐噪声
noisy = add_salt_pepper_noise(img)

# 2. 应用三种滤波
blur_mean = cv2.blur(noisy, (5, 5))
blur_gauss = cv2.GaussianBlur(noisy, (5, 5), 0)
blur_median = cv2.medianBlur(noisy, 5)

# 3. 使用 matplotlib 显示(灰度图)
images = [img, noisy, blur_mean, blur_gauss, blur_median]
titles = ['Original', 'Noisy (Salt & Pepper)', 
          'Mean Blur', 'Gaussian Blur', 'Median Blur']

plt.figure(figsize=(15, 6))
for i in range(len(images)):
    plt.subplot(2, 3, i+1)
    plt.imshow(images[i], cmap='gray')
    plt.title(titles[i])
    plt.axis('off')
plt.tight_layout()
plt.show()

# 4. 保存结果
cv2.imwrite('denoised_mean.jpg', blur_mean)
cv2.imwrite('denoised_gauss.jpg', blur_gauss)
cv2.imwrite('denoised_median.jpg', blur_median)

运行效果预期

  • 均值滤波:整体模糊,噪点减少但边缘发虚
  • 高斯滤波:较自然,噪点减弱,边缘尚可
  • 中值滤波:椒盐点几乎消失,边缘清晰锐利!

6. 补充:何时使用哪种滤波?

场景 推荐方法 理由
人脸美颜(轻微磨皮) 高斯滤波 (3,3) 保留五官轮廓,柔化皮肤
去除扫描文档上的黑点 中值滤波 k=3 消除孤立噪点,文字不变形
预处理用于边缘检测 高斯滤波 (5,5) 先去噪再检测,避免假边缘
快速实时视频去噪 均值滤波 (3,3) 计算最快,适合性能受限场景

7. 高级技巧:自适应高斯滤波(按区域调整强度)

对于复杂图像,可结合边缘检测,只在平滑区域强滤波,边缘区域弱滤波

python 复制代码
# 简易自适应思路:边缘处用小核,非边缘用大核
edges = cv2.Canny(img, 50, 150)
smooth = cv2.GaussianBlur(img, (7, 7), 0)

# 边缘区域保留原图,非边缘用平滑图
result = np.where(edges == 255, img, smooth)

这是"双边滤波(Bilateral Filter)"的思想雏形,OpenCV 也提供 cv2.bilateralFilter(),但计算较慢。


8. 常见误区提醒

误区 正确认知
"滤波核越大越好" 过大会导致严重模糊,丢失关键信息
"中值滤波能去所有噪声" 对高斯噪声效果一般,仅擅长椒盐噪声
"平滑后图像更'清晰'" 平滑 = 模糊!清晰度下降,但信噪比提升
"彩色图不能直接滤波" 可以!OpenCV 会自动对每个通道分别处理

✅ 本章总结

滤波方法 核心思想 优点 缺点 适用噪声
均值滤波 邻域平均 快速简单 模糊严重 均匀噪声
高斯滤波 加权平均(中心权重高) 保边去噪 对椒盐噪声弱 高斯噪声
中值滤波 取中位数 消除椒盐点、保边 计算稍慢 椒盐噪声

🌟 现在可以

  • 给一张噪点多的照片"一键磨皮"
  • 为 OCR 或目标检测提供干净输入
  • 根据噪声类型,选择最合适的"去噪武器"!

资料关注

咚咚王

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
睡醒了叭1 小时前
coze-工作流-JSON数据处理
人工智能·aigc
阿杰学AI1 小时前
AI核心知识107—大语言模型之 Prompt Engineer(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·aigc·prompt engineer·提示词工程师
阿林来了1 小时前
Flutter三方库适配OpenHarmony【flutter_speech】— 语音识别引擎创建
人工智能·flutter·语音识别·harmonyos
密瓜智能1 小时前
2025 年 HAMi 年度回顾 | 从 GPU 调度器到云原生 AI 基础设施的中流砥柱
人工智能·云原生
咚咚王者2 小时前
人工智能之视觉领域 计算机视觉 第七章 图像形态学操作
人工智能·计算机视觉
weixin_468466852 小时前
PyTorch导出ONNX格式分割模型及在C#中调用预测
人工智能·pytorch·深度学习·c#·跨平台·onnx·语义分割
AI英德西牛仔2 小时前
AIword排版
人工智能
阿林来了2 小时前
Flutter三方库适配OpenHarmony【flutter_speech】— 语音识别启动与参数配置
人工智能·flutter·语音识别·harmonyos
软件算法开发2 小时前
基于火烈鸟搜索算法的LSTM网络模型(FSA-LSTM)的一维时间序列预测matlab仿真
人工智能·rnn·matlab·lstm·一维时间序列预测·火烈鸟搜索算法·fsa-lstm