【图像去噪的扩散滤波】图像线性扩散滤波、边缘增强线性和非线性各向异性滤波(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
📚2 运行结果
2.1 non_aniso
2.2 inhomo_iso
2.3 heat_imp
2.4 heat_explicit
🎉3 参考文献
🌈4 Matlab代码实现
💥1 概述
【图像去噪的扩散滤波】图像线性扩散滤波、边缘增强线性和非线性各向异性滤波
各种基于扩散的图像滤波方法:
1.使用热方程的线性扩散滤波 - 使用隐式和显式欧拉方法求解。
2. 边缘增强线性各向异性扩散滤波。
3. 边缘增强非线性各向异性扩散滤波。
在图像处理领域,去除图像中的噪点和提升细节是非常重要的任务。为此,发展了各种基于扩散的图像滤波方法,旨在改善图像质量和增强图像特征。以下是其中几种常见的滤波方法:
1. 线性扩散滤波:使用热方程模型来进行线性扩散滤波。这种方法可以使用隐式和显式欧拉方法来求解,以改善图像的平滑度和减少噪声。线性扩散滤波能够通过自适应地调整邻域像素的亮度值,实现图像的去噪和平滑。
2. 边缘增强线性各向异性扩散滤波:这种方法结合了线性扩散滤波和各向异性过滤的思想,在保持图像平滑的同时突出了图像中的边缘特征。通过对邻域像素的梯度进行加权处理,边缘增强线性各向异性扩散滤波能够有效地提升图像的边缘细节,使图像更加清晰和锐利。
3. 边缘增强非线性各向异性扩散滤波:与线性滤波相比,非线性滤波方法在处理图像时更加灵活和精确。边缘增强非线性各向异性扩散滤波通过考虑像素之间的非线性关系,使得处理后的图像在细节和边缘保留方面更具优势。这种方法能够在去除噪点的同时保持图像的细节和纹理信息。
这些基于扩散的图像滤波方法为图像去噪和增强提供了强大的工具。根据不同的应用需求和图像特征,选择合适的滤波方法能够显著改善图像质量,并提高图像的可视化效果。无论是在科学研究、医学影像还是图形设计领域,这些滤波方法都发挥着重要作用,为用户带来更好的图像处理体验。
📚2 运行结果
2.1 non_aniso
2.2 inhomo_iso
2.3 heat_imp
2.4 heat_explicit
部分代码:
% set up finite difference parameters
alpha =.5;
k = 1;
h = 1;lambda = (alpha^2)*(k/(h^2));[m n] = size(w);
%stick image into a vector
w_vec = reshape(w,n*n,1);
w_old = w;
w_new = w;%smooth the image
im_smth = filter_function(w,1);
im_smth = im_smth';
% required for g() calculation
[dx_im_smth dy_im_smth] = gradient(im_smth);
gr_im_smth = dx_im_smth.^2 + dy_im_smth.^2;[mmm nnn] = size(gr_im_smth);
% g() calculation
for i=1:mmmfor j=1:nnng(i,j) = 1/(1+(gr_im_smth(i,j)/32));end
end
%g = g';
jj=1;[im_sx im_sy] = gradient(im_smth);
% diffusion tensor D is preconputed here
D = zeros(n*n,2,2);
for i=1:n*nrow = ceil(i/n);col = i - (row-1) * n;% if((col > 1) && (col < n) && (row > 1) && (row < n))% choose eigenvector parallel and perpendicular to gradienteigen_vec = [im_sx(row,col) im_sy(row,col); im_sy(row,col) -im_sx(row,col) ];%choose eigenvalueseigen_vec(:,1) = eigen_vec(:,1) ./ norm(eigen_vec(:,1));eigen_vec(:,2) = eigen_vec(:,2) ./ norm(eigen_vec(:,2));eigen_val = [g(row,col) 0;0 1];% form diffusion tensorD(i,:,:) = eigen_vec * eigen_val * (eigen_vec'); % end
endfigure;
for k=1:400 % for each iterationfor i=1:n*n % solve using Jacobi iterations schemerow = ceil(i/n); %compute what row this pixel belongs to in original imagecol = i - (row-1) * n; % compute cols similarly%different if conditions handles pixels at different location in%the image as depending on their location they may or may not have%all their neighbor pixels which will be required for finite%differencesif((col > 1) && (col < n) && (row > 1) && (row < n))s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));w_new(i) = (-s + w_old(i))/(1 + lambda * (2 * D(i,1,1) + 2 * D(i,2,2) - D(i,1,2) - D(i,2,1)));elseif((row == 1) && (col > 1) && (col < n))s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));%s = -(lambda) * (w_old(i+1) + w_old(i-1) + w_old(i+n));w_new(i) = (-s + w_old(i))/(1+4*lambda);elseif((row == n) && (col > 1) && (col < n))s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...(D(i,2,2) * w_old(i-n)));%s = -(lambda) * (w_old(i+1) + w_old(i-1) + w_old(i-n));w_new(i) = (-s + w_old(i))/(1+4*lambda);elseif((col == 1) && (row > 1) && (row < n))s = -lambda * (((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));%s = -(lambda) * (w_old(i+1) + w_old(i+n) + w_old(i-n));w_new(i) = (-s + w_old(i))/(1+4*lambda);elseif((col == n) && (row > 1) && (row < n))s = -lambda * ((D(i,1,1) * w_old(i-1)) + ...(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n)))); %s = -(lambda) * (w_old(i-1) + w_old(i+n) + w_old(i-n));w_new(i) = (-s + w_old(i))/(1+4*lambda);elseif((col==1) && (row==1))
% set up finite difference parameters
alpha =.5;
k = 1;
h = 1;
lambda = (alpha^2)*(k/(h^2));
[m n] = size(w);
%stick image into a vector
w_vec = reshape(w,n*n,1);
w_old = w;
w_new = w;
%smooth the image
im_smth = filter_function(w,1);
im_smth = im_smth';
% required for g() calculation
[dx_im_smth dy_im_smth] = gradient(im_smth);
gr_im_smth = dx_im_smth.^2 + dy_im_smth.^2;
[mmm nnn] = size(gr_im_smth);
% g() calculation
for i=1:mmm
for j=1:nnn
g(i,j) = 1/(1+(gr_im_smth(i,j)/32));
end
end
%g = g';
jj=1;
[im_sx im_sy] = gradient(im_smth);
% diffusion tensor D is preconputed here
D = zeros(n*n,2,2);
for i=1:n*n
row = ceil(i/n);
col = i - (row-1) * n;
% if((col > 1) && (col < n) && (row > 1) && (row < n))
% choose eigenvector parallel and perpendicular to gradient
eigen_vec = [im_sx(row,col) im_sy(row,col); im_sy(row,col) -im_sx(row,col) ];
%choose eigenvalues
eigen_vec(:,1) = eigen_vec(:,1) ./ norm(eigen_vec(:,1));
eigen_vec(:,2) = eigen_vec(:,2) ./ norm(eigen_vec(:,2));
eigen_val = [g(row,col) 0;0 1];
% form diffusion tensor
D(i,:,:) = eigen_vec * eigen_val * (eigen_vec');
% end
end
figure;
for k=1:400 % for each iteration
for i=1:n*n % solve using Jacobi iterations scheme
row = ceil(i/n); %compute what row this pixel belongs to in original image
col = i - (row-1) * n; % compute cols similarly
%different if conditions handles pixels at different location in
%the image as depending on their location they may or may not have
%all their neighbor pixels which will be required for finite
%differences
if((col > 1) && (col < n) && (row > 1) && (row < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));
w_new(i) = (-s + w_old(i))/(1 + lambda * (2 * D(i,1,1) + 2 * D(i,2,2) - D(i,1,2) - D(i,2,1)));
elseif((row == 1) && (col > 1) && (col < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));
%s = -(lambda) * (w_old(i+1) + w_old(i-1) + w_old(i+n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((row == n) && (col > 1) && (col < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
(D(i,2,2) * w_old(i-n)));
%s = -(lambda) * (w_old(i+1) + w_old(i-1) + w_old(i-n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((col == 1) && (row > 1) && (row < n))
s = -lambda * (((D(i,1,1) - D(i,1,2) - D(i,2,1)) * (w_old(i+1))) + ...
(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))) + ((D(i,1,2) + D(i,2,1)) * w_old(i+n+1)));
%s = -(lambda) * (w_old(i+1) + w_old(i+n) + w_old(i-n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((col == n) && (row > 1) && (row < n))
s = -lambda * ((D(i,1,1) * w_old(i-1)) + ...
(D(i,2,2) * w_old(i-n)) + ((D(i,2,2) - D(i,1,2) - D(i,2,1)) * (w_old(i+n))));
%s = -(lambda) * (w_old(i-1) + w_old(i+n) + w_old(i-n));
w_new(i) = (-s + w_old(i))/(1+4*lambda);
elseif((col==1) && (row==1))
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]张建伟,王译禾,陈允杰.基于非线性扩散滤波结构信息的图像去噪方法[J].计算机工程与设计, 2016, 37(11):8.DOI:10.16208/j.issn1000-7024.2016.11.021.
[2]文武,苗放.复数域非线性扩散滤波在图像处理中的应用[J].微电子学与计算机, 2012.DOI:CNKI:SUN:WXYJ.0.2012-06-015.
[3]傅艳莉,李超,陈浩,等.各向异性扩散滤波远探测声波测井图像降噪方法[J].应用声学, 2022, 41(4):10.
[4]许韬.非线性扩散图像混合滤波去噪方法研究[J].计算机仿真, 2020, 037(012):460-464.
[5]李志伟,冯象初.维纳滤波和非线性扩散相结合的图像去噪[J].电子科技, 2007(9):4.DOI:10.3969/j.issn.1007-7820.2007.09.016.
🌈4 Matlab代码实现
相关文章:

【图像去噪的扩散滤波】图像线性扩散滤波、边缘增强线性和非线性各向异性滤波(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

4、在docker容器内的tomcat 中发布项目
1、查看本地是否有tomcat镜像,如果不存在则去下载 docker images 2、查看本地是否有tomcat容器,如存在跳过第3步 docker ps 3、创建tomcat容器 此容器用于复制tomcat的配置文件,配置文件复制后需删除此容器,如果已经存在跳过此步…...

数学建模——人工神经网络模型
一、人工神经网络简介 1、神经网络起源与应用 1943年心理学家McCulloch和数学家Pitts提出神经元生物数学模型(M-P模型),后来人工神经网络(Artifical Neural Network,ANN)是在生物神经网络(Biological Neural Network,BNN)基础上发展起来的&a…...
java合成多个pdf为一个pdf
pom文件 <dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version></dependency>主文件 import com.lowagie.text.Document; import com.lowagie.text.pdf.PdfCopy; import com.lo…...

“高级Vue状态管理 - Vuex的魅力与应用“
目录 引言1. Vuex的简介1.1 什么是Vuex?1.2 Vuex的核心概念 2. Vuex的值获取与改变(综合案例)3. Vuex的异步请求总结 引言 在现代Web开发中,前端应用变得越来越复杂。随着应用规模的扩大和数据流的复杂性增加,有效地管理应用的状态成为了一项…...
Vue整合
基础配置: 1.创建:cmd 中 输入 create vue vue_name 启动命令:npm run serve 2.当node_modules(依赖)丢失时通过 npm install 下载 【根据:package-lock.json下载】 3.下载路由 npm i vue-router3.5.2 -S main.js导入 // np…...

探秘PMP和六西格玛的不同:哪一个能为你的职业生涯加分?
今天,我们将带你深入了解一项相对冷门但价值不菲的证书——六西格玛黑带。 可能你曾听说过PMP,但相比之下,六西格玛黑带的资源分享似乎较少,考试内容却更为广泛深入。这里,让我为你详细解析这一考试,带你进…...
大数据学习(3)-hive分区表与分桶表
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博>主哦&#x…...
JS 原生实现触底加载
创建一个容器来存储列表项。 监听滚动事件,当滚动接近底部时触发加载更多操作。 加载更多数据后,将新数据附加到容器中。 以下是一个简单的示例: <!DOCTYPE html> <html><head><style>#scroll-container {heigh…...

结构体,位段!
目录 1.什么是位段? 别急!在下面第二点我和大家介绍。 2.位段的内存怎么分配? 还有一种情况就是两种类型夹杂在一起的位段 3.位段的跨平台问题 4.位段能干嘛?(应用) 5.位段的注意事项 1.什么是位段&…...

当10年程序员是什么体验?存款几位数?
最近网上一个话题吸引了许多人的讨论,当10年程序员,是一种什么体验? 都说程序员的高收入和工作年限应该成正比,真的是这样吗?工作10年的程序员,工资应该是什么水平?不少网友纷纷“现身说法”..…...

ExoPlayer架构详解与源码分析(4)——整体架构
系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…...
rust文件读写
std::fs模块提供了结构体File,它表示一个文件。 一、打开文件 结构体File提供了open()函数 open()以只读模式打开文件,如果文件不存在,则会抛出一个错误。如果文件不可读,那么也会抛出一个错误。 范例 fn main() {let file s…...
腾讯云我的世界mc服务器配置选择和价格表
开Minecraft我的世界服务器配置怎么选择?10人以内玩2核4G就够用了,开我的世界服务器选择轻量应用服务器就够了,腾讯云轻量应用服务器2核2G3M带宽轻量服务器一年95元,活动:txyfwq.com/go/tencent 轻量CPU采用至强白金处…...

基于安卓android微信小程序的旅游系统
项目介绍 随着人民生活水平的提高,旅游业已经越来越大众化,而旅游业的核心是信息,不论是对旅游管理部门、对旅游企业,或是对旅游者而言,有效的获取旅游信息,都显得特别重要.自助定制游将使旅游相关信息管理工作规范化、信息化、程序化,提供旅游景点、旅游线路,旅游新闻等服务本…...

文本编辑器去除PDF水印
用文本编辑器打开pdf,搜索水印的特殊文字,全部替换。 另外一个水印字母间有空格。 替换完后保存。 重新打开pdf:...

kubernetes负载感知调度
背景 kubernetes 的原生调度器只能通过资源请求来调度 pod,这很容易造成一系列负载不均的问题, 并且很多情况下业务方都是超额申请资源,因此在原生调度器时代我们针对业务的特性以及评估等级来设置 Requests/Limit 比例来提升资源利用效率。…...

Lock使用及效率分析(C#)
针对无Lock、Lock、ReadWriterLock、ReadWriterLockSlim四种方式,测试在连续写的情况下,读取的效率(原子操作Interlocked由于使用针对int,double等修改的地方特别多,而且使用范围受限,所以本文章没有测试) …...

安卓三防平板在行业应用中有哪些优势
在工业维修和检测中,安卓三防平板的应用也十分广泛。它可以搭载各种专业软件和工具,帮助工人们进行设备故障排查和维护,降低了维修成本和停机时间。 一、产品卖点: 1. 防水性能:该手持平板采用了防水设计,…...

2015架构真题(五十)
供应链中信息流覆盖了供应商、制造商和分销商,信息流分为需求信息流和供应信息流,()属于需求信息流,()属于供应信息流。 库存记录生产计划商品入库单提货发运单 客户订单采购合同完工报告单销售…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...