当前位置: 首页 > news >正文

图像滤波---各项异性扩散滤波使用笔记及代码

图像滤波---各项异性扩散滤波使用笔记及代码

  • 一、文章内容介绍
  • 二、各项异性扩散滤波和各项同性滤波
    • 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+λ(cNxyDN(It)+cSxyDS(It)+cExyDE(It)+cWxyDW(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,y1)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(x1,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=eK2DN(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=eK2DS(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=eK2DE(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=eK2DW(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=eK21x2,当 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。小数数据类型&#xff1…...

如何更新至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#为任意组件开发登录功能的记录

非常简单,直接给出代码: 数据库操作类 这个无需多言就是简单的包含了数据操作的内容,允许你在这一个类中写完关于本地数据库或者云数据库操作的逻辑,与登录逻辑分开哦。 注意,如果你的软件要给别人运行使用&#xf…...

AI免费UI页面生成

https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考:https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似,右侧展示效果和代码 https://pagen.so/...

龙虎榜——20250610

上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

PHP和Node.js哪个更爽?

先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

如何为服务器生成TLS证书

TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...