当前位置: 首页 > 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/...

2024新动态:低代码开发占领新常态市场

随着技术的不断进步和数字化转型的加速,企业对于快速开发和部署应用程序的需求日益增长。2024年,低代码开发平台已经成为新常态市场的重要力量,它通过简化应用程序的开发过程,让非技术背景的业务用户也能参与到软件开发中来&#…...

【SQL 用大白话描述事务并发 可能会遇到的问题】及解决策略

在SQL数据库中,当多个事务同时进行时,可能会出现并发事务问题。这些问题通常包括以下几种: 首先,我们要清楚一点,这些问题都是与事务的四大特性之一的隔离性有关。并且通常发生在并发事务场景中。 脏读(Dirty Read): 脏读发生在一个事务读取了另一个事务未提交的数据。…...

nginx安装及vue项目部署

安装及简单配置 在usr/local下建好nginx文件夹,下载好nginx-1.26.2.tar.gz压缩文件.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel pcre-devel gcc、gcc-c # 主要用来进行编译相关使用 openssl、ope…...

第十三周:机器学习笔记

第十三周周报 摘要Abstract一、机器学习——Transformer(上)1. Sequence to Sequence(Seq 2 Seq,序列到序列模型) 的应用2. Transformer的结构2.1 Transformer encoder(Transformer 编码器) 二、Pytorch学习1. 网络模型…...

HarmonyOS学习(十三)——数据管理(二) 关系型数据库

文章目录 1、基本概念2、运行机制3、默认配置与限制4、接口说明5、实战:开发“账本”5.1、创建RdbStore5.2、创建数据库5.3、增加数据5.4、删除数据5.5、修改数据5.6、查询数据5.7、备份数据库5.8、恢复数据库5.9、删除数据库 官方文档地址: 通过关系型…...

【工具变量】科技金融试点城市DID数据集(2000-2023年)

时间跨度:2000-2023年数据范围:286个地级市包含指标: year city treat post DID(treat*post) 样例数据: 包含内容: 全部内容下载链接: 参考文献-pdf格式:https://…...

import torch import torchIllegal instruction的可能解决方法

It is numpy 1.19.5 issue. You can fix it by installing previous minor version. pip3 install numpy1.19.4 参考自:Illegal instruction (core dumped) - Jetson & Embedded Systems / Jetson TX2 - NVIDIA Developer Forums...

[SDX35+WCN6856]SDX35 + WCN6856 WiFi导致系统crash问题分析及解决方案

SDX35 SDX35介绍 SDX35设备是一种多模调制解调器芯片,支持 4G/5G sub-6 技术。它是一个4nm芯片专为实现卓越的性能和能效而设计。它包括一个 1.9 GHz Cortex-A7 应用处理器。 SDX35主要特性 ■ 3GPP Rel. 17 with 5G Reduced Capability (RedCap) support. Backward compati…...

力扣题解2376

大家好,欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述(困难): 统计特殊整数 如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一个 正 整数 n ,请你返回区间 …...

浅谈计算机视觉的学习路径1

计算机视觉(Computer Vision, CV)是人工智能领域的一个重要分支,它的目标是使计算机能够像人类一样理解和处理图像和视频数据。 面向想要从事该方向的大学生,笔者这里给出以下是关于计算机视觉的学习路径建议: 简要了解…...