(一)OpenCV——噪声去除(降噪)

高斯滤波器(针对高斯噪声)

高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。常见的高斯噪声包括起伏噪声、宇宙噪声、热噪声和散粒噪声等等。

高斯滤波(Gaussian filter) 包含许多种,包括低通、带通和高通等,我们通常图像上说的高斯滤波,指的是 高斯模糊(Gaussian Blur) ,是一种 高斯低通滤波 ,其过滤调图像高频成分(图像细节部分),保留图像低频成分(图像平滑区域),所以对图像进行 ‘高斯模糊’ 后,图像会变得模糊。

高斯模糊对于抑制 高斯噪声 (服从正态分布的噪声) 非常有效。

高斯滤波是一种常用的图像去噪方法,它通过在图像上进行卷积操作来实现。

高斯滤波的计算过程:

高斯函数

在计算每个像素时,都把当前中心点看作坐标原点,可以使得均值 μ = 0 ,简化高斯函数的公式:

其中:

  • (x,y) 是核中某点相对于中心点的坐标

  • σ 是标准差(控制平滑程度)

高斯核的生成

高斯滤波的重要两步就是先找到高斯核然后再进行卷积

生成示例(3×3高斯核,σ=1)

import numpy as npdef gaussian_kernel(size, sigma=1):kernel = np.fromfunction(lambda x, y: (1/(2*np.pi*sigma**2)) * np.exp(-((x-(size-1)/2)**2 + (y-(size-1)/2)**2)/(2*sigma**2)),(size, size))return kernel / np.sum(kernel)  # 归一化kernel = gaussian_kernel(3)
print(kernel)

输出结果:

[[0.07511361 0.1238414  0.07511361][0.1238414  0.20417996 0.1238414 ][0.07511361 0.1238414  0.07511361]]

卷积计算

高斯滤波的卷积计算步骤如下:

  1. 核中心对准:将高斯核中心对准图像的每个像素

  2. 对应相乘:核覆盖区域的像素值与核权重逐点相乘

  3. 求和:将所有乘积结果相加

  4. 替换中心像素:用求和结果替换原中心像素值


计算示例(3×3区域):

图像局部区域I:
[100 120 110]
[ 90 100 115]
[ 95 105 108]高斯核:
[[0.07511361 0.1238414  0.07511361][0.1238414  0.20417996 0.1238414 ][0.07511361 0.1238414  0.07511361]]计算后的结果:
[0.075 0.124 0.075]
[0.124 0.204 0.124]
[0.075 0.124 0.075]计算过程:
新中心值 = 100*0.075 + 120*0.124 + 110*0.075 +90*0.124 + 100*0.204 + 115*0.124 +95*0.075 + 105*0.124 + 108*0.075≈ 103.3

给原图加上高斯噪声,并绘制加噪后的像素值分布图

经过高斯滤波处理后的图像

 

归一化

归一化(Normalization)在图像滤波和卷积运算中是一个关键步骤,它确保滤波操作不会改变图像的整体亮度水平。

归一化的基本定义

归一化指的是将滤波器(卷积核)的所有权重值进行缩放,使得它们的总和等于1。数学表达式为:

归一化核 = 原始核 / ∑(原始核所有元素)

为什么需要归一化? 

保持图像亮度恒定

未经归一化:卷积后图像整体会变亮或变暗

kernel = np.array([[1, 1, 1],[1, 1, 1],[1, 1, 1]])  # 总和=9
# 应用该核会使每个像素值变为原来的9倍

归一化后: 

normalized_kernel = kernel / 9  # 总和=1

不需要归一化的特殊情况 

某些滤波器故意不归一化

  • 边缘检测算子(如Sobel、Laplacian)
sobel_x = np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]])  # 总和=0
  • 锐化滤波器

  • 这些滤波器需要保留灰度变化信息

中值滤波器(针对椒盐噪声)

中值滤波(Median Filter)是一种非线性滤波方法,主要用于去除图像中的椒盐噪声(Salt-and-Pepper Noise)同时较好地保留图像边缘。它的计算过程与线性滤波器(如高斯滤波)完全不同。

基本计算步骤

对于一个像素点,中值滤波的计算过程如下:

  1. 定义滤波窗口:选择一个奇数尺寸的邻域窗口(如3×3、5×5等)

  2. 提取窗口内像素值:取出该窗口覆盖的所有像素值

  3. 排序像素值:将这些像素值按从小到大(或从大到小)排序

  4. 取中值:选择排序后的中间值作为该像素点的新值

  5. 替换原像素:用这个中值替换原图像中对应位置的像素值

具体计算示例

假设我们有一个3×3的图像区域和3×3的中值滤波窗口:

原始图像区域(3×3):

[120, 125, 130,115, 255, 120,  ← 中心像素255可能是噪声(椒盐噪声)110, 105, 140]

计算过程:

  1. 提取所有9个像素值:[120, 125, 130, 115, 255, 120, 110, 105, 140]

  2. 排序:[105, 110, 115, 120, 120, 125, 130, 140, 255]

  3. 取中值(第5个值):120

  4. 用120替换原中心像素255

中值滤波的特点

  1. 非线性处理:不能表示为核卷积

  2. 去噪效果:特别适合去除椒盐噪声

  3. 边缘保留:比均值滤波更好地保留边缘

  4. 计算复杂度:比线性滤波高,因为涉及排序操作

  5. 窗口大小:通常使用奇数尺寸(3×3, 5×5等)

给图像加入椒盐噪声,并去噪

 均值滤波器(简单平滑)

均值滤波器(Mean Filter),也称为简单平滑滤波器箱式滤波器(Box Filter),是最基础的线性滤波器之一。

基本原理

均值滤波通过用邻域像素的平均值代替中心像素值来实现图像平滑:

  • 线性操作:可以表示为卷积运算

  • 均匀权重:滤波窗口内所有像素权重相同

  • 平滑效果:减少图像噪声和细节

计算过程

对于一个N×N的均值滤波器:

  1. 定义滤波窗口:选择滤波器尺寸(如3×3、5×5等)

  2. 遍历图像:对每个像素应用滤波窗口

  3. 计算平均值:计算窗口内所有像素的算术平均值

  4. 替换中心像素:用平均值替换原中心像素值、

数学表达式:

新像素值 = (1/N²) × Σ(窗口内所有像素值)

具体示例

考虑一个3×3的图像区域:

[50, 60, 70]
[40, 255, 80]  ← 中心像素255可能是噪声
[30, 20, 90]

计算过程:

  1. 提取所有9个像素值:[50, 60, 70, 40, 255, 80, 30, 20, 90]

  2. 计算平均值:(50+60+70+40+255+80+30+20+90)/9 = 85

  3. 用85替换原中心像素255

应用场景

  1. 快速平滑:需要简单快速平滑处理时

  2. 预处理:作为更复杂处理的预处理步骤

  3. 均匀区域处理:处理纹理较均匀的图像区域

高斯滤波、均值滤波与中值滤波的全面对比

基本性质对比

特性高斯滤波均值滤波中值滤波
滤波器类型线性滤波器线性滤波器非线性滤波器
计算复杂度中等(可分离优化)高(需要排序)
权重分配中心权重高,边缘权重低均匀权重无权重概念
归一化要求需要需要不需要

去噪效果对比

噪声类型高斯滤波表现均值滤波表现中值滤波表现
高斯噪声效果最好效果较好效果一般
椒盐噪声效果较差效果差效果最好
脉冲噪声效果差效果差效果极佳

边缘保持能力

边缘特性高斯滤波均值滤波中值滤波
边缘模糊程度中等(σ越大越模糊)严重最小
锐利边缘保持较好优秀
细节保留中等

实际应用对比

高斯滤波最佳场景

  • 需要平滑但保留一定边缘

  • 预处理步骤(如Canny边缘检测前)

  • 光学系统产生的自然模糊建模

均值滤波适用场景

  • 快速简单平滑需求

  • 计算资源有限的场景

  • 均匀区域的噪声去除

中值滤波不可替代场景

  • 椒盐噪声去除(旧照片修复)

  • 需要保留锐利边缘(医学影像)

  • 脉冲噪声环境(工业检测)

参考文章:

https://blog.csdn.net/a435262767/article/details/107115249

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

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

相关文章

百度开源文心 4.5 系列开源大模型 GitCode 本地化部署,硅基流动:文心 vs. DeepSeek vs. Qwen 3.0 深度测评

百度开源文心 4.5 系列开源大模型 GitCode 本地化部署,硅基流动:文心 vs. DeepSeek vs. Qwen 3.0 深度测评 文章目录百度开源文心 4.5 系列开源大模型 GitCode 本地化部署,硅基流动:文心 vs. DeepSeek vs. Qwen 3.0 深度测评背景百…

「日拱一码」022 机器学习——数据划分

目录 基于单次随机划分的方法 普通单次随机划分(train_test_split) 分层单次随机划分(使用 train_test_split 的 stratify 参数) 基于多次随机划分的方法 普通多次随机划分(ShuffleSplit) 分层多次随机划分(StratifiedShuffleSplit…

lora网关

所需配置的引脚,SPI传输,PG13复位(输出引脚,推挽输出),PE2忙碌(输入引脚,浮空输入)PE6PE5输出。若利用延时处理按键消抖,hal库里用systick中断实现延时&#…

5G IMS注册关键一步:UE如何通过ePCO获取P-CSCF地址

看似简单的P-CSCF地址传递,背后是5G核心网控制面与用户面的精密协作。ePCO作为高效的信令载体,承载着IMS业务触达的第一把钥匙。 在5G网络中建立IMS PDN连接时,UE(用户设备)获取P-CSCF(Proxy-Call Session Control Function)地址是IMS业务(如VoLTE、VoNR)成功注册和运…

JVM方法区的运行时常量区到底存储哪些数据?

JDK8以后,运行时常量池逻辑上属于方法区;但: 其中的字符串常量池实际位置移至到了java堆;其中一些符号引用也存储到了元空间;字符串常量池,元空间,运行时常量区的具体关系请看这篇博客&#xf…

Go defer(二):从汇编的角度理解延迟调用的实现

Go的延迟调用机制会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。之前的文章( Go defer(一):延迟调用的使用及其底层实现原理详解 )详细介绍了defer的使用以…

Android 12系统源码_分屏模式(一)从最近任务触发分屏模式

前言 打开MainActivity,然后进入最近任务触发分屏,可以成功进入分屏模式。 本篇文章我们来具体梳理一下这个过程的源码调用流程。 一 launcher3阶段 1.1 源码 //packages/apps/Launcher3/quickstep/src/com/android/quickstep/views/TaskView.java publi…

Flask 入门教程:用 Python 快速搭建你的第一个 Web 应用

文章目录前言一、什么是 Flask?📌 Flask 的优势1. 轻量灵活2. 易于上手3. 可扩展性强4. 自由度高5. 社区活跃,资料丰富Flask 主要用来做什么?二、Flask快速入门1.创建一个Flask项目2.开启debug,修改host,端…

实习第一个小需求样式问题总结

Vue2 vxe-table Element UI 表头下拉详情实现总结一、核心功能实现表头下拉按钮交互初始尝试 expand-change 事件无法满足需求&#xff0c;改用 vxe-table 的 toggle-row-expand 事件&#xff1a;<vxe-table toggle-row-expand"handleExpandChange"><temp…

Linux中LVM逻辑卷扩容

在Linux系统中对根目录所在的LVM逻辑卷进行扩容&#xff0c;需要依次完成 物理卷扩容 ➔ 卷组扩容 ➔ 逻辑卷扩容 ➔ 文件系统扩容 四个步骤。以下是详细操作流程&#xff1a;一、确认当前磁盘和LVM状态# 1. 查看磁盘空间使用情况 df -h /# 2. 查看块设备及LVM层级关系 lsblk# …

微软365 PDF导出功能存在本地文件包含漏洞,可泄露敏感服务器数据

微软365的"导出为PDF"功能近期被发现存在严重的本地文件包含(Local File Inclusion, LFI)漏洞&#xff0c;攻击者可利用该漏洞获取服务器端的敏感数据&#xff0c;包括配置文件、数据库凭证和应用程序源代码。该漏洞由安全研究员Gianluca Baldi发现并报告给微软&…

台球 PCOL:极致物理还原的网页斯诺克引擎(附源码深度解析)

> 无需下载,打开浏览器即可体验专业级斯诺克!本文将揭秘网页版台球游戏的物理引擎与渲染核心技术 在游戏开发领域,台球物理模拟一直被视为**刚体动力学皇冠上的明珠**。今天我们要解析的**台球 PCOL**(Pure Canvas Online Billiards)正是一款突破性的网页版斯诺克游戏…

springboot-2.3.3.RELEASE升级2.7.16,swagger2.9.2升级3.0.0过程

一、pom文件版本修改<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.16</version><relativePath/> </parent>如果用到了“spring-boot-starter…

Python-正则表达式-信息提取-滑动窗口-数据分发-文件加载及分析器-浏览器分析-学习笔记

序 欠4前年的一份笔记 &#xff0c;献给今后的自己。 正则表达式 概述 正则表达式&#xff0c;Regular Expression&#xff0c;缩写为regex、regexp、RE等。 正则表达式是文本处理极为重要的技术&#xff0c;用它可以对字符串按照某种规则进行检索、替换。 1970年代&…

一文入门神经网络:神经网络概念初识

神经网络的世界远比你想象得更丰富多元。从基础架构到前沿融合模型&#xff0c;我为你梳理了当前最值得关注的神经网络类型&#xff0c;不仅包括那些“教科书级”的经典模型&#xff0c;也覆盖了正在改变行业格局的新兴架构。以下是系统分类与核心特点总结&#xff1a;一、基础…

线上事故处理记录

线上事故处理记录 一、MySQL 导致的服务器 CPU 飙升 有一天&#xff0c;突然收到了服务器 CPU 飙升的告警信息&#xff0c;打开普罗米修斯查看 CPU 的使用情况&#xff0c;发现 CPU 确实飙升了&#xff0c;下面开始去进行问题定位了。 1. 首先连接到对应的服务器&#xff0c;然…

ParaCAD 笔记 png 图纸标注数据集

ParaCAD-Dataset git lfs install git clone https://www.modelscope.cn/datasets/yuwenbonnie/ParaCAD-Dataset.git https://github.com/ParaCAD/ 不止100g 下个最小的 没有三视图

C#使用Semantic Kernel实现Embedding功能

1、背景 C#开发中&#xff0c;可以通过Semantic Kernel实现本地模型的调用和实现。 本地的Ollama的版本如下&#xff1a;安装的Package如下&#xff1a;2、代码实现 // See https://aka.ms/new-console-template for more information using Microsoft.Extensions.AI; using Mi…

转转APP逆向

APP版本 11.15.0 接口分析 # URL https://app.zhuanzhuan.com/zz/transfer/search# header cookie xxx x-zz-monitoring-metrics feMetricAntiCheatLevelV1 zztk user-agent Zhuan/11.15.0 (11015000) Dalvik/2.1.0 (Linux; U; Android 10; Pixel 3 Build/QQ3A.200805.001) z…

注解与反射的完美配合:Java中的声明式编程实践

注解与反射的完美配合&#xff1a;Java中的声明式编程实践 目录 引言 核心概念 工作机制 实战示例 传统方式的痛点 注解反射的优势 实际应用场景 最佳实践 总结 引言 在现代Java开发中&#xff0c;我们经常看到这样的代码&#xff1a; Range(min 1, max 50)priva…