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

AI2周前发布 beixibaobao
11 0 0

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

第六章 图像平滑处理


文章目录

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

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

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


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

想象你用手机拍了一张夜景照片,放大后发现有很多 彩色小点(噪点);
或者扫描一张老报纸,纸上出现很多 黑白杂点

图像平滑 = 给图像“磨皮”或“柔化”
目的:抑制噪声、模糊细节、使图像更平滑

但注意:平滑 ≠ 越模糊越好
我们要在“去噪”和“保留细节”之间找平衡。


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

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

🎯 核心思想
滤波器通过 邻域像素加权平均 来替代中心像素,从而“平均掉”异常值。


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

3.1 均值滤波(Mean / Box Filter)

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

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

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


3.2 高斯滤波(Gaussian Blur)

原理:使用高斯函数作为权重,中心像素权重最大,越远权重越小。
👉 既能去噪,又能较好保留边缘!

  • 最常用、最推荐的通用去噪方法
  • 参数少,效果稳定
🔧 函数:cv2.GaussianBlur(src, ksize, sigmaX)
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)
median = cv2.medianBlur(img, 5)  # ksize 是整数(如 3, 5, 7)

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


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

椒盐噪声

高斯/均匀噪声

含噪声图像

噪声类型?

中值滤波 cv2.medianBlur

是否需保留边缘?

高斯滤波 cv2.GaussianBlur

均值滤波 cv2.blur

输出平滑图像


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

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. 高级技巧:自适应高斯滤波(按区域调整强度)

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

# 简易自适应思路:边缘处用小核,非边缘用大核
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》

© 版权声明

相关文章