图像滤波---各项异性扩散滤波使用笔记及代码
图像滤波---各项异性扩散滤波使用笔记及代码
- 一、文章内容介绍
- 二、各项异性扩散滤波和各项同性滤波
- 1、各项同性滤波
- 2、各项异性扩散滤波
- 3、各项异性和各项同性的对比
- 三、各项异性扩散滤波的原理介绍
- 四、各项异性扩散滤波公式
- 五、公式中的参数使用说明
- 1、扩散速率 λ \lambda λ
- (1)参数说明
- (2)效果展示
- (3)调节指南
- 2、扩散敏感度 K K K
- (1)参数说明
- (2)效果展示
- (3)调节指南
- 六、完整MATLAB代码
一、文章内容介绍
1、文章首先介绍各项异性扩散滤波以及各项同性滤波
2、接着简要的说明各项异性滤波算法的原理和功能
3、然后对各项异性滤波算法的几个参数的作用及调试进行详解
4、最后附上各项异性滤波matlab的代码
二、各项异性扩散滤波和各项同性滤波
1、各项同性滤波
在做图像处理时,我们接触到很多滤波算法,耳熟能详的有高斯滤波、均值滤波以及中值滤波。这些滤波
算法中,对于每一个像素点,算法都一视同仁,或使用相同的系数,或使用相同的邻域规则来对像素值进行处理。这些算法不考虑该像素的梯度方向,一视同仁,处理效果在各个方向上是一样的,对于整幅图像的处理是均匀的,图像的平滑不会因梯度而有所偏向,这样的滤波叫各项同性滤波(Isotropic Filtering)。
2、各项异性扩散滤波
与各项同性扩散滤波相对的即是各项异性扩散滤波(Anisotropic Filtering),各项异性扩散滤波是一种保边滤波器,在不同的梯度方向上,像素值做不同程度的改变,区分出图像的边缘信息,在去除噪声的同时保留边缘。
各项异性扩散叫P-M扩散,论文原文:Scale-space and edge detection using anisotropic diffusion。
3、各项异性和各项同性的对比
各项同性滤波处理是均匀的,不考虑方向,适合于简单的去噪和模糊处理。
各项异性滤波处理是方向依赖的,能够更好地保留边缘和细节,适合于复杂的图像去噪,尤其是在需要保留边缘信息的情况下。
三、各项异性扩散滤波的原理介绍
各项异性扩散滤波的本质是根据图像的梯度信息来调控扩散系数。
各项异性指物体的全部或者部分物理、化学性质随方向的不同而有所变化的特性。对于整张图像,将其看做一个热量场,将每个像素看做一个热流,对于边缘像素,我们不想让其平滑掉,所以边缘的邻域像素,热流的扩散要很弱,除此之外,其他的地方,顺着梯度的方向进行扩散,扩散过的图像区域就会变得平滑,如此在保留边缘的同时,平滑了噪声区域。
四、各项异性扩散滤波公式
滤波公式如下:
I t + 1 = I t + λ ∗ ( c N x y ∗ D N ( I t ) + c S x y ∗ D S ( I t ) + c E x y ∗ D E ( I t ) + c W x y ∗ D W ( I t ) ) I_{t+1}=I_t+\lambda*(cN_{xy}*D_N(I_t)+cS_{xy}*D_S(I_t)+cE_{xy}*D_E(I_t)+cW_{xy}*D_W(I_t)) It+1=It+λ∗(cNxy∗DN(It)+cSxy∗DS(It)+cExy∗DE(It)+cWxy∗DW(It))
其中I表示图像,x,y表示像素位置,t代表迭代次数, λ \lambda λ表示扩散速率。 D N D_N DN、 D S D_S DS、 D E D_E DE、 D W D_W DW分别表示南、北、西、东,即上下左右四个方向的梯度,梯度计算如下:
D N ( I t ) = I t ( x , y − 1 ) − I t ( x , y ) D_N(I_t)=I_t(x,y-1)-I_t(x,y) DN(It)=It(x,y−1)−It(x,y) D S ( I t ) = I t ( x , y + 1 ) − I t ( x , y ) D_S(I_t)=I_t(x,y+1)-I_t(x,y) DS(It)=It(x,y+1)−It(x,y) D E ( I t ) = I t ( x − 1 , y ) − I t ( x , y ) D_E(I_t)=I_t(x-1,y)-I_t(x,y) DE(It)=It(x−1,y)−It(x,y) D W ( I t ) = I t ( x + 1 , y ) − I t ( x , y ) D_W(I_t)=I_t(x+1,y)-I_t(x,y) DW(It)=It(x+1,y)−It(x,y)
Nxy、Sxy、Exy、Wxy分别表示对应方向上的扩散系数,扩散系数公式如下:
c N x y = e − D N ( I t ) 2 K 2 cN_{xy}=e^{- \frac{{D_N(I_t)}^2}{K^2}} cNxy=e−K2DN(It)2 c S x y = e − D S ( I t ) 2 K 2 cS_{xy}=e^{- \frac{{D_S(I_t)}^2}{K^2}} cSxy=e−K2DS(It)2 c E x y = e − D E ( I t ) 2 K 2 cE_{xy}=e^{- \frac{{D_E(I_t)}^2}{K^2}} cExy=e−K2DE(It)2 c W x y = e − D W ( I t ) 2 K 2 cW_{xy}=e^{- \frac{{D_W(I_t)}^2}{K^2}} cWxy=e−K2DW(It)2
其中 K K K表示对应方向的扩散灵敏度。
五、公式中的参数使用说明
1、扩散速率 λ \lambda λ
(1)参数说明
从公式中显而易见, λ \lambda λ控制每次迭代中像素值的变化量。
理论上, λ \lambda λ较大每个像素的扩散速度会比较快,因为每次像素值改变的增量会比较大,会导致图像的细节丢失。
(2)效果展示
在N(迭代次数)和K固定的情况下, λ \lambda λ从0.1~0.9的去噪效果图,0.1时细节保留最完整,0.3时细节丢失严重,0.5 ~0.7细节丢失程度依次增加。

(3)调节指南
从效果图分析,调解时,固定另外两个变量,从0.1开始逐步增加或减少,步长可设置为0.05、0.1、0.2,观察图像的去噪效果和细节保留情况,找到最佳的平衡点,比如,上述图像的滤波,平衡点应在0.1 ~0.3之间。
2、扩散敏感度 K K K
(1)参数说明
从公式看, K K K是指数函数 e e e的一个参数,函数形式为 y = e − 1 K 2 ∗ x 2 y=e^{-{\frac{1}{K^2}*x^2}} y=e−K21∗x2,当 1 K 2 = 0.5 \frac{1}{K^2} = 0.5 K21=0.5时,函数图像如下:

当 1 K 2 = 2 \frac{1}{K^2} = 2 K21=2时,函数图像如下:

从两幅图像来看, K K K越大,曲线变换越平缓,表明系数对梯度的响应越不敏感,各项异性的程度就越低,图像应该就越模糊。
(2)效果展示
固定 λ = 0.12 \lambda=0.12 λ=0.12,N=20时, K K K从10增加到40,从图上看, K K K越大,平滑的越厉害,细节丢失越严重。

(3)调节指南
对于 K K K,通常可以选择从10开始调节,增加或减少,每次步长5、10、15、20尝试。
如果图像中细节多噪声少,K的值应该小一些,否则就大一些。
六、完整MATLAB代码
运行环境为Windows10和Matlab2023a
run.m
clc
clear
%读取图像
img = imread('lisaGrayNoise.bmp');
%设置系数
lambda = 0.12;
K = 40;
N = 20;
%执行各项异性扩散滤波
imgADF = ImageADF(img,lambda,K,N);
figure;
imshow(img);
title('原图');
figure;
imshow(imgADF);
title('各向异性扩散滤波结果K=40');
ImageADF.m
function imgADF = ImageADF(img,lambda,K,N)
[m, n] = size(img);
imgADF = zeros(m, n);
img = double(img);
for t = 1 : Nfor i = 2 : m-1for j = 2 : n-1NI = img(i-1, j) - img(i, j);SI = img(i+1, j) - img(i, j);EI = img(i, j-1) - img(i, j);WI = img(i, j+1) - img(i, j);cN = exp(-NI^2/K^2);cS = exp(-SI^2/K^2);cE = exp(-EI^2/K^2);cW = exp(-WI^2/K^2);imgADF(i, j) = img(i, j) + lambda*(NI*cN + SI*cS + EI*cE + WI*cW);endendimg = imgADF;
end
imgADF = img;
imgADF = uint8(imgADF);
end
相关文章:
图像滤波---各项异性扩散滤波使用笔记及代码
图像滤波---各项异性扩散滤波使用笔记及代码 一、文章内容介绍二、各项异性扩散滤波和各项同性滤波1、各项同性滤波2、各项异性扩散滤波3、各项异性和各项同性的对比 三、各项异性扩散滤波的原理介绍四、各项异性扩散滤波公式五、公式中的参数使用说明1、扩散速率 λ \lambda λ…...
用Go语言构建健壮的并发系统:深入理解错误传播与处理
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在当今的软件开发中,构建并发和分布式系统已经成为常态。然而,在这些系统中,错误的发生频率高且定位困难。如果我们能够深入考虑错误如何在系统中传播,以及最终如何呈现给用户,那么我们就能为自己、团队和用…...
掌握C#中的动态规划技术
C# 中的动态规划(Dynamic Programming, DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划通常用于优化问题,特别是那些具有重叠子问题和最优子结构性质的问题…...
C语言进阶【5】---数据在内存中的存储【2】(小数存储很难吗?)
本章概述 本章引要练习 浮点数的存储浮点数的取出小补充题目解析彩蛋时刻!!! 本章引要 常见的浮点数:3.1415,1E10等。其中,1E10是科学计数法的形式,它也就等于1*10^10。小数数据类型࿱…...
如何更新至CDS-Beta下载ERA5数据
数据下载网站 api 更新 api setup 更新api 2024年9月26日起老版的CDS将被停用,会搬迁到CDS-beta上。 创建一个新的CDS-beta账户,也可以使用之前的ECMWF账户。https://cds-beta.climate.copernicus.eu/vi ~/.cdsapirc ,登陆https://cds-bet…...
SQL编程题复习(24/9/20)
练习题 x25 10-120 统计每个班级期末成绩的最高分(Max),显示班级名称、期末最高成绩10-121 显示没有班导师的班级名称、院系名称10-122 将电子信息1班(班级编号:08)的班主任编号改为李丽清老师的编号(PTA题目表述错误&…...
react crash course 2024 (1)理论概念
state的作用 react hooks 而无需写一个class jsx 样式用 spa...
有关JS下隐藏的敏感信息
免责声明:本文仅做分享! 目录 JavaScript 介绍 核心组成 工具 FindSomething ** 浏览器检查 ** LinkFinder URLfinder ** SuperSearchPlus ** ffuf ParasCollector waymore Packer Fuzzer JS逆向 应用: 小结: Ja…...
Kafka 基于SASL/SCRAM动态认证部署,kafka加账号密码登录部署
文章目录 前言下载 kafka安装启动zookeeper添加账号密码 启动kafka修改kafka配置文件增加jaas授权文件修改启动文件,启动kafka检查是否部署成功 offset explore 连接 前言 其实挺简单的几个配置文件,问大模型一直没说到点上,绕晕了。SASL/SC…...
富格林:积攒经验阻挠欺诈套路
富格林指出,现货黄金这些年可谓是表现出色,相信上车现货黄金的投资者,都或多或少分得一杯满意的羹。不过话又说回来,不是所有投资者都可以轻松在现货黄金中获利,尤其是对投资小白而言,如果没有积累知识阻挠…...
51单片机-红外遥控器(NEC标准)-实验(红外遥控及调速电机)
作者:Whappy 时间:2024.9.20 总结一下!基础实验到这儿里就圆满结束,历经25天,将51单片机学完并亲自手敲代码近5000行,在手敲代码过程中,明显感觉的看和敲,明显就是不同的感觉&…...
云手机的便捷性和安全性体现在哪?
随着5G技术的迅速发展,云手机在游戏、电商以及新媒体营销等领域中的应用日益广泛。它不仅能够显著降低成本、提升效率,还随着边缘计算和云技术的进步,展现出无限的增长潜力。 云手机的便捷性体现在哪里? 云手机的便捷性毋庸置疑。…...
漫谈由标准输入\输出\错误输出引发的思考
标准输入|输出|错误输出 在Unix\Linux体系中,一个进程通常自带有标准输入、标准输出、标准错误输出等三个文件描述符。 如果从对称的观点来看,它确实长的有点奇怪,但它背后隐藏了什么样的知识和道理呢? 从图灵机模型谈起 以前…...
利用 IDEA 快速管理 k8s 集群
简介 前置条件: minikube 已安装,JetBrains k8s 官方插件已安装,Helm 已安装,kubectl 已安装 打开插件面板 检查可执行文件 添加配置文件 添加集群 验证...
【自然语言处理】实验三:新冠病毒的FAQ问答系统
目录 前言 1.新建data_process.py 1.1导入包并定义功能模块1用来读取问题和答案FAQ的文件 1.2功能模块2:进行问题/问题列表处理(正则化,分词) 1.3功能模块3:处理输入的问题 1.4功能模块4:计算输入问题与问题…...
「C++系列」文件和流
【人工智能教程】,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站:【人工智能教程】 文章目录 一、文件和流1. 文件操作① 打开文件② 读写文件 2. 流操作 二、应…...
视频美颜SDK核心功能解析:打造高效直播美颜工具方案详解
随着直播行业的迅猛发展,用户对于直播画质和个人形象的要求越来越高。视频美颜SDK作为一项关键技术,已经成为各大直播平台和短视频应用的重要组成部分。通过实时美颜技术,用户能够在直播过程中呈现出更加理想的形象,从而提升直播体…...
深入解析:高性能 SSE 服务器的设计与实现
在当今的实时 Web 应用中,服务器发送事件(Server-Sent Events,SSE)技术扮演着越来越重要的角色。今天,我们将深入探讨一个用 Go 语言实现的高性能 SSE 服务器的设计和实现细节。这个服务器不仅能够处理大量并发连接&am…...
C#为任意组件开发登录功能的记录
非常简单,直接给出代码: 数据库操作类 这个无需多言就是简单的包含了数据操作的内容,允许你在这一个类中写完关于本地数据库或者云数据库操作的逻辑,与登录逻辑分开哦。 注意,如果你的软件要给别人运行使用…...
AI免费UI页面生成
https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考:https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似,右侧展示效果和代码 https://pagen.so/...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
