【IP101】图像滤波技术详解:从均值滤波到高斯滤波的完整指南

🌟 图像滤波魔法指南

🎨 在图像处理的世界里,滤波就像是给图片"美颜"的魔法工具。让我们一起来探索这些神奇的滤波术吧!

📑 目录

  • 1. 均值滤波:图像的"磨皮"大法
  • 2. 中值滤波:去除"斑点"的绝招
  • 3. 高斯滤波:高端"美颜"利器
  • 4. 均值池化:图像"瘦身"术
  • 5. 最大池化:提取"精华"大法

1. 均值滤波:图像的"磨皮"大法

1.1 理论基础 🤓

均值滤波就像是给图片做面部护理,通过计算周围像素的平均值来"抚平"图像中的瑕疵。其数学表达式为:

g ( x , y ) = 1 M × N ∑ i = 0 M − 1 ∑ j = 0 N − 1 f ( x + i , y + j ) g(x,y) = \frac{1}{M \times N} \sum_{i=0}^{M-1} \sum_{j=0}^{N-1} f(x+i, y+j) g(x,y)=M×N1i=0M1j=0N1f(x+i,y+j)

其中:

  • f ( x , y ) f(x,y) f(x,y) 是输入图像
  • g ( x , y ) g(x,y) g(x,y) 是输出图像
  • M × N M \times N M×N 是滤波窗口大小

1.2 代码实战 💻

def mean_filter(img, kernel_size=3):"""均值滤波:图像界的"磨皮"大师"""pad = kernel_size // 2h, w = img.shapeimg_pad = np.pad(img, ((pad, pad), (pad, pad)), 'edge')out = np.zeros((h, w))# 使用SIMD优化的实现for i in range(h):for j in range(w):out[i, j] = np.mean(img_pad[i:i+kernel_size, j:j+kernel_size])return out.astype(np.uint8)

1.3 实战小贴士 🌟

  • 窗口大小越大,"磨皮"效果越明显(但也越模糊)
  • 适合处理高斯噪声(那些讨厌的"毛刺")
  • 边缘会变得模糊(就像涂粉底涂过头了)

2. 中值滤波:去除"斑点"的绝招

2.1 理论基础 🧮

中值滤波就像是一个"挑剔"的评委,它会把所有像素值排排队,然后选择最中间的那个。特别擅长去除那些讨厌的椒盐噪声!

g ( x , y ) = median { f ( x + i , y + j ) ∣ ( i , j ) ∈ W } g(x,y) = \text{median}\{f(x+i, y+j) | (i,j) \in W\} g(x,y)=median{f(x+i,y+j)(i,j)W}

其中 W W W 是滤波窗口。

2.2 代码实战 💻

def median_filter(img, kernel_size=3):"""中值滤波:图像界的"去斑"专家"""pad = kernel_size // 2h, w = img.shapeimg_pad = np.pad(img, ((pad, pad), (pad, pad)), 'edge')out = np.zeros((h, w))# 使用快速选择算法优化for i in range(h):for j in range(w):out[i, j] = np.median(img_pad[i:i+kernel_size, j:j+kernel_size])return out.astype(np.uint8)

2.3 实战小贴士 🎯

  • 完美克制椒盐噪声(就像消除青春痘一样)
  • 保持边缘清晰(不会把轮廓涂花)
  • 计算量比均值滤波大(毕竟要排序)

3. 高斯滤波:高端"美颜"利器

3.1 理论基础 📚

高斯滤波是滤波界的"高富帅",它用高斯函数作为权重,距离中心越远的像素影响越小。其核函数为:

G ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x,y) = \frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}} G(x,y)=2πσ21e2σ2x2+y2

3.2 代码实战 💻

def gaussian_filter(img, kernel_size=3, sigma=1.0):"""高斯滤波:图像界的"精致美颜""""# 生成高斯核(就像调配完美的护肤品)kernel = np.fromfunction(lambda x, y: (1/(2*np.pi*sigma**2)) *np.exp(-((x-kernel_size//2)**2 + (y-kernel_size//2)**2)/(2*sigma**2)),(kernel_size, kernel_size))kernel = kernel / kernel.sum()# 应用滤波(使用SIMD加速)return cv2.filter2D(img, -1, kernel)

3.3 实战小贴士 🎨

  • σ \sigma σ 越大,磨皮效果越明显
  • 边缘保持效果好(不会把五官磨没了)
  • 计算量适中(性价比很高)

4. 均值池化:图像"瘦身"术

4.1 理论基础 📐

均值池化就像是给图片做"减重"手术,把一块区域的像素平均一下,图片就"瘦"了!

g ( x , y ) = 1 n 2 ∑ i = 0 n − 1 ∑ j = 0 n − 1 f ( n x + i , n y + j ) g(x,y) = \frac{1}{n^2}\sum_{i=0}^{n-1}\sum_{j=0}^{n-1}f(nx+i, ny+j) g(x,y)=n21i=0n1j=0n1f(nx+i,ny+j)

4.2 代码实战 💻

def mean_pooling(img, pool_size=2):"""均值池化:图像界的"减重"专家"""h, w = img.shapenew_h, new_w = h // pool_size, w // pool_sizereturn cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_AREA)

5. 最大池化:提取"精华"大法

5.1 理论基础 🎯

最大池化就像是"优胜劣汰",只保留区域内最显著的特征。在深度学习中特别受欢迎!

g ( x , y ) = max ⁡ ( i , j ) ∈ W f ( x + i , y + j ) g(x,y) = \max_{(i,j) \in W} f(x+i, y+j) g(x,y)=(i,j)Wmaxf(x+i,y+j)

5.2 代码实战 💻

def max_pooling(img, pool_size=2):"""最大池化:图像界的"优胜劣汰""""h, w = img.shapenew_h, new_w = h // pool_size, w // pool_sizeout = np.zeros((new_h, new_w))# 使用向量化操作加速for i in range(new_h):for j in range(new_w):out[i, j] = np.max(img[i*pool_size:(i+1)*pool_size,j*pool_size:(j+1)*pool_size])return out.astype(np.uint8)

🎯 实战练习

  1. 实现一个"美颜全家桶":结合多种滤波方法
  2. 对比不同参数下的高斯滤波效果
  3. 实现一个自适应的中值滤波
  4. 挑战:实现一个带边缘保持的均值滤波

📚 延伸阅读

  1. OpenCV 滤波宝典
  2. 滤波算法速查手册

记住:滤波就像化妆,要恰到好处。过度使用会让图片"失真",适度使用才能让图片更"自然"美丽! 🎨✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LINE FRIENDS 正式与 Walrus 合作,全新 AI 驱动的游戏即将上线

风靡全球的 LINE FRIENDS 角色即将以“minini”迷你造型登陆 Walrus,虽然尺寸更小,但承诺带来“大”动作。IPX(LINE FRIENDS 背后的公司)打造了《minini universe: ROOM》游戏,这是一款基于其 minini 系列角色的多链游…

2025年信息素养大赛C++算法创意实践挑战赛初赛样题及答案解析(小学组)

一、选择题 1、下列代码&#xff0c;能够输出 hello world 的是_____ A. cout (hello world) B. cout << hello world C. cout:hello world D. cout << "hello world"; 答案&#xff1a;D 解析&#xff1a;cout输出的文本内容要用双引号引起来 2、…

[c语言日寄]检查环形链表

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…

黄雀在后:外卖大战新变局,淘宝+饿了么开启电商大零售时代

当所有人以为美团和京东的“口水战”硝烟渐散&#xff0c;外卖大战告一段落时&#xff0c;“螳螂捕蝉&#xff0c;黄雀在后”&#xff0c;淘宝闪购联合饿了么“闪现”外卖战场&#xff0c;外卖烽火再度燃起。 4 月30日&#xff0c;淘宝天猫旗下即时零售业务“小时达”正式升级…

如何在uni-app中自定义输入框placeholder的样式

在开发uni-app应用时&#xff0c;我们经常需要自定义输入框&#xff08;<input>&#xff09;的样式以匹配应用的整体设计。默认情况下&#xff0c;uni-app的输入框提供了一些基本的样式选项&#xff0c;但有时候我们需要更细致地控制输入框的每个部分&#xff0c;例如pla…

使用Node编写轻量级后端快速入门

使用Node编写轻量级后端快速入门 node 要作为轻量级后端需要下载一些对应模块可以参考下面命令。你可以借助 npm&#xff08;Node Package Manager&#xff09;来下载它们。 模块下载 express&#xff1a;这是一个广受欢迎的 Node.js Web 应用框架&#xff0c;能用于构建 Web…

从Markdown到专业文档:如何用Python打造高效格式转换工具

在技术写作、学术研究和企业报告领域,Markdown因其简洁高效的特性广受开发者喜爱。但当需要输出正式文档时,Word和PDF格式仍是行业标准。传统解决方案往往存在样式丢失、代码排版混乱、批量处理困难等痛点。本文将揭秘如何用Python构建一个支持多主题、保留代码高亮、自动生成…

【docker学习笔记】如何删除镜像启动默认命令

一些镜像会在它打镜像时&#xff0c;加入一些默认的启动命令&#xff0c;可以通过docker inspect \<image id\>来查看Entrypoint。如下图&#xff0c;docker run启动时&#xff0c;会默认执行 "python3 -m vllm.entrypoints.openai.api_server" 如果不想执行&…

任意无人机手柄链接Unity-100元的凤凰SM600手柄接入Unity Input System‌

网上教程真少&#xff01;奋发图强自力更生&#xff01;2025.5.1 目前有用的链接&#xff1a; unity如何添加自定义HID设备&#xff0c;自己开发的手柄如何支持unity。 - 哔哩哔哩 HID Support | Input System | 1.0.2 官方教程 https://zhuanlan.zhihu.com/p/503209742 分…

2024睿抗CAIP-编程技能赛-本科组(省赛)题解

蓝桥杯拿了个省三&#xff0c;天梯没进1队&#xff0c;睿抗是我最后的机会 RC-u4 章鱼图的判断 题目描述 对于无向图 G ( V , E ) G(V,E) G(V,E)&#xff0c;我们定义章鱼图为&#xff1a; 有且仅有一个简单环&#xff08;即没有重复顶点的环&#xff09;&#xff0c;且所…

Java 泛型参数问题:‘ResponseData.this‘ cannot be referenced from a static contex

问题与处理策略 问题描述 Data AllArgsConstructor NoArgsConstructor public class ResponseData<T> {private Integer code;private String msg;private T data;public static final int CODE_SUCCESS 2001;public static final int CODE_FAIL 3001;public static …

用TCP实现服务器与客户端的交互

目录 一、TCP的特点 二、API介绍 1.ServerSocket 2.Socket 三、实现服务器 四、实现客户端 五、测试解决bug 1.客户端发送了数据之后&#xff0c;并没有响应 2.clientSocket没有执行close()操作 3.尝试使用多个客户端同时连接服务器 六、优化 1.短时间有大量客户端访…

鸟笼效应——AI与思维模型【84】

一、定义 鸟笼效应思维模型指的是人们在偶然获得一件原本不需要的物品后,会为了这件物品的配套或使用需求,进而继续添加更多与之相关但自己原本可能并不需要的东西,仿佛被这个“鸟笼”牵着走,最终陷入一种惯性消费或行为模式的现象。简单来说,就是人们在心理上会有一种自…

加密解密记录

一、RSA 加密解密 密钥对生成 1.前端加密解密 &#xff08;1&#xff09;.vue页面引入 npm install jsencrypt&#xff08;2&#xff09;工具 jsencrypt.js import JSEncrypt from jsencrypt/bin/jsencrypt.min// 密钥对生成 http://web.chacuo.net/netrsakeypairconst p…

浅析 MegEngine 对 DTR 的实现与改进

分享笔者在学习 MegEngine 对 DTR 的实现时的笔记。关于 DTR 可以参考&#xff1a;【翻译】DTR_ICLR 2021 文章目录 MegEngine 架构设计MegEngine 的动态图部分Imperative RuntimeImperative 与 MegDNN / MegBrain 的关系静态图运行时管家 —— MegBrain动态图接口 —— Impera…

micro-app前端微服务原理解析

一、核心设计思想 基于 WebComponents 的组件化渲染 micro-app 借鉴 WebComponents 的 CustomElement 和 ShadowDom 特性&#xff0c;将子应用封装为类似 WebComponent 的自定义标签&#xff08;如 <micro-app>&#xff09;。通过 ShadowDom 的天然隔离机制&#xff0c;实…

CMake中强制启用option定义变量的方法

在CMake中&#xff0c;若要在另一个CMake文件中强制启用由option()定义的变量&#xff0c;可使用set(... FORCE)覆盖缓存变量。具体步骤如下&#xff1a; 使用set命令强制覆盖缓存&#xff1a; 在需要强制启用选项的CMake文件中&#xff0c;使用set命令并指定CACHE和FORCE参数。…

C++漫溯键值的长河:map set

文章目录 1.关联式容器2.set2.1 find2.2 lower_bound、upper_bound 3.multiset3.1 count3.2 equal_range 4.map4.1 insert4.2 operate->4.3 operate[ ]4.4 map的应用实践&#xff1a;随机链表的复制 5.multimap希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动…

汽车用品商城小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的汽车用品商城小程序源码&#xff0c;从技术架构来看&#xff0c;ThinkPHP作为后端框架&#xff0c;提供了稳定且高效的开发基础&#xff0c;能够处理复杂的业务逻辑和数据交互。FastAdmin则进一步简化了后台管理系统的开发流程&#xff0c;提…

力扣hot100——114.二叉树展开为链表

基于 Morris 遍历思想 将左子树插到右子树的位置&#xff0c;将原来的右子树插到左子树的最右结点&#xff0c;遍历右结点重复以上步骤&#xff0c;直至右结点为空。 class Solution { public:void flatten(TreeNode* root) {if(rootnullptr) return;while(root){if(!root-&g…