news 2026/3/26 15:30:19

在大模型班学算法笔记记录-图像平滑(低通滤波)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在大模型班学算法笔记记录-图像平滑(低通滤波)

核心概念梳理

1. 低通滤波的核心作用

低通滤波允许图像中低频信息(大面积、平缓的像素变化,如主体轮廓)通过,抑制高频信息(小范围、剧烈的像素变化,如噪声、细节),最终实现:

  • 平滑图像、去除噪声;
  • 不可避免造成图像模糊,但核心特征(如轮廓)会保留;
  • 本质是卷积操作(中值/双边滤波为非线性,除外)。

2. 卷积基础

卷积是“局部扫描+区域感知”的核心操作,步骤:

  1. 卷积核(Kernel):正方形矩阵(通常为奇数,如3×3、5×5),是滤波的“权重模板”;
  2. 步长(Stride, s):卷积核在原图上滑动的像素步距,默认s=1,s=2时图像尺寸会减半;
  3. 填充(Padding, p):当卷积核滑到图像边缘时,若像素不足则补0(或补边),避免输出图像尺寸缩小;
  4. 计算规则:卷积核覆盖的像素区域,与核内权重做点积求和(线性滤波),逐行逐列滑动。

3. 输出图像尺寸计算公式

输入图像尺寸:H×W(高×宽),卷积核尺寸:k×k,步长s,填充p,则输出尺寸:

输出高 H' = ((H - k) + 2×p) // s + 1 输出宽 W' = ((W - k) + 2×p) // s + 1

示例:输入640×480,核5×5,步长1,填充2(补0)→ 输出仍为640×480(无尺寸损失);步长2→输出320×240。

4. 卷积核尺寸的参数规则

滤波类型ksize参数形式原因
均值/高斯/方框元组(如(5,3))支持非正方形核(如5行3列),需明确高×宽
中值滤波单个整数(如5)仅支持正方形核,简化参数避免冗余

六大低通滤波

前置准备:环境与基础代码

import cv2 import numpy as np import matplotlib.pyplot as plt # 读取图像(工程上优先处理灰度图) img = cv2.imread("test.jpg") # 彩色图:BGR格式 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转灰度图(核心处理对象) # 图像显示辅助函数 def show_imgs(imgs, titles, rows=1, cols=2): plt.figure(figsize=(12, 6)) for i in range(len(imgs)): plt.subplot(rows, cols, i+1) plt.imshow(imgs[i], cmap="gray" if len(imgs[i].shape)==2 else None) plt.title(titles[i]) plt.axis("off") plt.show()

1. 均值滤波

原理

线性滤波,卷积核内所有像素取算术平均值作为输出像素值,核内权重均等。

特点

  • 去噪效果一般,模糊程度较明显;
  • 适合去除均匀分布的弱噪声。
    代码
# 均值滤波:ksize=(5,5)(5×5核),步长默认1,填充默认适配核尺寸 blur_gray = cv2.blur(gray, ksize=(5,5)) show_imgs([gray, blur_gray], ["原图(灰度)", "均值滤波(5×5)"])

2. 方框滤波

原理

均值滤波的“变种”,可选择是否对核内像素归一化(除以核面积):

  • 归一化(默认):等价于均值滤波;
  • 不归一化:像素值易溢出(超过255),仅特殊场景使用。
    代码
# 归一化方框滤波(等价均值滤波) box_norm = cv2.boxFilter(gray, -1, (5,5), normalize=True) # 不归一化方框滤波(演示用,实际少用) box_unnorm = cv2.boxFilter(gray, -1, (5,5), normalize=False) show_imgs([gray, box_norm, box_unnorm//10], ["原图", "归一化方框滤波", "不归一化(缩放后)"])

3. 高斯滤波

原理

线性滤波,卷积核权重符合高斯分布(中心像素权重最高,向边缘递减),更贴合人眼视觉特性。

特点

  • 去噪效果优于均值滤波,模糊程度更柔和;
  • 工程上最常用,常循环多次增强效果;
  • 需要指定sigmaX(X方向标准差),sigmaY默认等于sigmaX(越大,滤波越平滑)。
    代码(工程常用:循环高斯滤波)
# 单次高斯滤波:(5,5)核,sigmaX=1.5 gauss1 = cv2.GaussianBlur(gray, (5,5), sigmaX=1.5) # 循环3次高斯滤波(工程常用,比单次大核更自然) gauss3 = gray.copy() for _ in range(3): gauss3 = cv2.GaussianBlur(gauss3, (5,5), sigmaX=1.5) show_imgs([gray, gauss1, gauss3], ["原图", "单次高斯滤波", "3次循环高斯滤波"])

4. 中值滤波

原理

非线性滤波,取卷积核内所有像素的中值作为输出像素值,对“孤立噪声”(如椒盐噪声)效果极佳。

特点

  • 核尺寸为单个整数(仅支持正方形);
  • 去椒盐噪声远优于线性滤波,且边缘保留更好;
  • 适合:相机噪点、图像传输中的椒盐噪声场景。
    代码
# 模拟添加椒盐噪声 np.random.seed(0) noise = np.random.choice([0, 255], size=gray.shape, p=[0.98, 0.02]) gray_noise = np.where(noise==255, 255, gray) # 加盐噪声 # 中值滤波去椒盐噪声 median = cv2.medianBlur(gray_noise, 5) # ksize=5(5×5核) show_imgs([gray, gray_noise, median], ["原图", "加椒盐噪声", "中值滤波(5×5)"])

5. 双边滤波

原理

非线性滤波,兼顾空间距离像素值相似度

  • 空间距离:近的像素权重高(类似高斯);
  • 像素值相似度:与中心像素值接近的权重高;
    特点
  • 唯一能“去噪+保边缘”的低通滤波;
  • 参数较多:d(核直径)、sigmaColor(色彩标准差,越大,允许越宽的像素值范围)、sigmaSpace(空间标准差);
  • 缺点:计算量较大,实时性要求高的场景慎用。
    代码
# 双边滤波:d=9(核直径),sigmaColor=75,sigmaSpace=75 bilateral = cv2.bilateralFilter(gray, d=9, sigmaColor=75, sigmaSpace=75) # 对比:高斯滤波(边缘模糊)vs 双边滤波(边缘保留) gauss = cv2.GaussianBlur(gray, (9,9), sigmaX=5) show_imgs([gray, gauss, bilateral], ["原图", "高斯滤波(边缘模糊)", "双边滤波(保边缘)"])

工程实践核心要点

1. 图像格式选择

优先处理灰度图

  • 彩色图可先转灰度(cv2.COLOR_BGR2GRAY),减少计算量;
  • 若需保留色彩,可分B/G/R通道分别滤波后合并。

2. 滤波选型规则

场景首选滤波补充说明
普通随机噪声高斯滤波(循环)核5×5,循环2-3次
椒盐噪声/孤立亮点中值滤波核3×3/5×5,根据噪声大小调整
需保留边缘的去噪双边滤波牺牲速度换效果
快速简单去噪(无要求)均值滤波仅临时测试/低要求场景

3. 调参技巧

  • 核尺寸:从3×3开始,逐步增大(越大越模糊,但去噪越强);
  • 高斯滤波:sigmaX建议1.0~3.0(过大会丢失关键细节);
  • 循环滤波:优先“小核+多次循环”,而非“大核+单次”(模糊更自然)。

4. 避坑点

  • 中值滤波核尺寸过大(如9×9)会导致图像“卡通化”,丢失细节;
  • 高斯滤波sigmaX=0时,OpenCV会自动按核尺寸计算(不推荐,显式指定更可控);
  • 方框滤波不归一化时,需手动缩放像素值(避免溢出为255)。

总结

低通滤波的核心是“trade-off(取舍)”:去噪越强,模糊越明显。工程上需结合业务场景(如监控图像去噪、证件照磨皮、工业检测去噪)选择滤波类型,优先用高斯/中值滤波,配合灰度图+小核循环的方式,既能保证效果,又能控制计算成本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/20 16:32:07

GeoTools:解锁地理空间数据的Java全能工具箱

GeoTools:解锁地理空间数据的Java全能工具箱 【免费下载链接】geotools Official GeoTools repository 项目地址: https://gitcode.com/gh_mirrors/ge/geotools 在当今数据驱动的世界中,地理空间信息已成为决策制定的关键要素。GeoTools作为一个成…

作者头像 李华
网站建设 2026/3/13 0:13:56

5、深入理解 iptables 防火墙:配置、激活与测试

深入理解 iptables 防火墙:配置、激活与测试 1. 网络地址转换(NAT) 在构建 iptables 策略时,网络地址转换(NAT)是关键的最后一步。其主要目的是将不可路由的内部地址(如 192.168.10.0/24)转换为可路由的外部地址(如 71.157.X.X)。这一转换适用于外部客户端对内部 W…

作者头像 李华
网站建设 2026/3/25 6:57:04

Llama-Factory如何保障多用户并发训练的稳定性?

Llama-Factory如何保障多用户并发训练的稳定性? 在大模型时代,越来越多团队希望基于LLaMA、Qwen等主流架构定制专属语言模型。然而现实往往并不理想:一个研究人员刚启动微调任务,另一个用户的训练就因显存溢出而崩溃;不…

作者头像 李华
网站建设 2026/3/21 20:14:20

28、Linux网络服务与Samba配置全解析

Linux网络服务与Samba配置全解析 1. 网络信息服务(NIS)相关操作 在完成NIS配置的部分步骤后,还需进行一些验证操作。首先,点击“Open Port in Firewall”复选框,然后点击“Finish”。接着,为确保NIS服务器正在运行,可在终端中输入 ypwhich 并按下回车键,查看显示信…

作者头像 李华
网站建设 2026/3/16 6:44:43

C++ Primer 中文版:初学者终极完整学习指南

想要快速掌握C编程语言?这份高清带目录的《C Primer》中文版电子书是您的理想选择!作为最受推崇的C入门书籍,它以其系统性和实用性成为无数编程学习者的首选C学习资源。 【免费下载链接】CPrimer中文版-高清带目录 C Primer 中文版 - 高清带目…

作者头像 李华
网站建设 2026/3/24 4:10:17

32、深入探究openSUSE Linux系统的性能调优与问题解决

深入探究openSUSE Linux系统的性能调优与问题解决 1. 系统监控与初步操作 首先,登录运行GNOME的openSUSE Linux机器。在终端中输入 gnome-system-monitor 并按下回车键,随后花费几分钟时间查看各个选项卡,尤其关注每个进程所使用的内存量。完成后,关闭终端窗口并关闭虚…

作者头像 李华