【图像去噪的扩散滤波】图像线性扩散滤波、边缘增强线性和非线性各向异性滤波(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架构真题(五十)
供应链中信息流覆盖了供应商、制造商和分销商,信息流分为需求信息流和供应信息流,()属于需求信息流,()属于供应信息流。 库存记录生产计划商品入库单提货发运单 客户订单采购合同完工报告单销售…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

