实现option上下移动_Perona-Malik方程(各向同性非线性扩散实现图像滤波)
1. Perona-Malik方程
之前所使用的线性扩散图像滤波会对整幅图像“一视同仁”,不管是边缘纹理还是其他结构都会等同于噪声一起滤除。这会使图像过于平滑而且丢失很多高频信息。如果我们使用非线性扩散的方法,即:传导系数会随着图像的局部特征改变而改变,例如在图像平滑区域传导系数自适应增大可以更好的滤除噪声,在图像的边缘纹理区域系数自适应减小可以更好的保存图像边缘。
首先,PM扩散方程为:它的来源是将梯度的模值信息融合到传输系数中,并带入公式(5)可得:
其中
这里K是选定的常数,作用是控制g的下降速率。下图为p=1的条件下K=10, 20的下降曲线。
由于在图像的边缘中梯度的模值
2. P-M方程行为分析
首先将P-M方程简化为一维的情况分析:
其中
影响函数。将(11)式中的g(-)函数带入可得:
下面是
- 当p=1时,
从最大值1单调递减到0,而且始终保持正值,因此这种情况下的(12)式总保持正向扩散。
- 当p=2时,
这个不等式说明在梯度较小的图像平滑区域,即:时,导数大于0为正向扩散。在梯度较大的边缘纹理区域,导数小于0为反向扩散。反向扩散的含义是:杂质将从浓度低的地方流向浓度高的地方,这意味着图像边缘的锐化。
在后面二维P-M方程的分析中,可以得出结论:当选用合适的边缘函数g时,P-M方程可以自适应的实现图像去噪和边缘增强的效果。
3. P-M方程的病态性质
数学研究表示(1)式给出的初值的P-M方程极有可能是病态的。如果定义下面这个能量泛函:
其中
如果将
4. P-M方程的正则化
一般来说,病态问题都是一个方程对应着多个解,因此需要用正则化的方法使它变成一个适定问题(well-posed)。有研究者提出一种新的改进方案为:
其中
5.P-M方程求解代码
搬运自:
数字图像处理,基于PM和Catte模型各向异性扩散的C++实现_EbowTang的练习场-CSDN博客blog.csdn.net
公式分析参考:
各向异性扩散PM模型原理与C++实现_cyh706510441的专栏-CSDN博客blog.csdn.net
function diff_im = anisodiff2D(im, num_iter, delta_t, kappa, option)
%ANISODIFF2D 经典PM模型的各向异性扩散
% DIFF_IM = ANISODIFF2D(IM, NUM_ITER, DELTA_T, KAPPA, OPTION)
% 该函数执行灰度图像上的各向异性扩散(经典PM模型),被认为是一个二维的网络结构的8个相邻节点的扩散传导。
%
% 参数描述:
% IM - 灰度图 (MxN).
% NUM_ITER - 迭代次数
% DELTA_T - 积分常数 (0 <= delta_t <= 1/7).通常情况下,由于数值稳定性,此参数设置为它的最大值。
% KAPPA - 控制传导的梯度模阈值。控制平滑。
% OPTION - 传导系数函数选择(Perona & Malik提出):
% 1 - c(x,y,t) = exp(-(nablaI/kappa).^2),
% privileges high-contrast edges over low-contrast ones.
% 2 - c(x,y,t) = 1./(1 + (nablaI/kappa).^2),
% privileges wide regions over smaller ones.
%
% 输出描述:
% DIFF_IM - 具有最大尺度空间参数的(扩散)图像。
%
% 使用例子:
% -------------
% s = phantom(512) + randn(512);
% num_iter = 15;
% delta_t = 1/7;%越大越平滑
% kappa = 30;%越大越平滑
% option = 2;
% ad = anisodiff2D(s,num_iter,delta_t,kappa,option);
% figure, subplot 121, imshow(s,[]), subplot 122, imshow(ad,[]);% 转换输入图像类型为double.
im = double(im);% PDE(偏微分方程)的初始条件。
diff_im = im;% 中心像素距离。
dx = 1;
dy = 1;
dd = sqrt(2);% 二维卷积掩模-8个方向上的梯度差分。
hN = [0 1 0; 0 -1 0; 0 0 0];
hS = [0 0 0; 0 -1 0; 0 1 0];
hE = [0 0 0; 0 -1 1; 0 0 0];
hW = [0 0 0; 1 -1 0; 0 0 0];
hNE = [0 0 1; 0 -1 0; 0 0 0];
hSE = [0 0 0; 0 -1 0; 0 0 1];
hSW = [0 0 0; 0 -1 0; 1 0 0];
hNW = [1 0 0; 0 -1 0; 0 0 0];% 各向异性扩散
for t = 1:num_iter% 8个方向梯度差分. [imfilter(.,.,'conv') 也可以使用 conv2(.,.,'same')]nablaN = imfilter(diff_im,hN,'conv');nablaS = imfilter(diff_im,hS,'conv'); nablaW = imfilter(diff_im,hW,'conv');nablaE = imfilter(diff_im,hE,'conv'); nablaNE = imfilter(diff_im,hNE,'conv');nablaSE = imfilter(diff_im,hSE,'conv'); nablaSW = imfilter(diff_im,hSW,'conv');nablaNW = imfilter(diff_im,hNW,'conv'); % 扩散函数if option == 1cN = exp(-(nablaN/kappa).^2);cS = exp(-(nablaS/kappa).^2);cW = exp(-(nablaW/kappa).^2);cE = exp(-(nablaE/kappa).^2);cNE = exp(-(nablaNE/kappa).^2);cSE = exp(-(nablaSE/kappa).^2);cSW = exp(-(nablaSW/kappa).^2);cNW = exp(-(nablaNW/kappa).^2);elseif option == 2cN = 1./(1 + (nablaN/kappa).^2);cS = 1./(1 + (nablaS/kappa).^2);cW = 1./(1 + (nablaW/kappa).^2);cE = 1./(1 + (nablaE/kappa).^2);cNE = 1./(1 + (nablaNE/kappa).^2);cSE = 1./(1 + (nablaSE/kappa).^2);cSW = 1./(1 + (nablaSW/kappa).^2);cNW = 1./(1 + (nablaNW/kappa).^2);end% 离散偏微分方程的解决方案diff_im = diff_im + ...delta_t*(...(1/(dy^2))*cN.*nablaN + (1/(dy^2))*cS.*nablaS + ...(1/(dx^2))*cW.*nablaW + (1/(dx^2))*cE.*nablaE + ...(1/(dd^2))*cNE.*nablaNE + (1/(dd^2))*cSE.*nablaSE + ...(1/(dd^2))*cSW.*nablaSW + (1/(dd^2))*cNW.*nablaNW );% 迭代的警告fprintf('rIteration %dn',t);
end
实现option上下移动_Perona-Malik方程(各向同性非线性扩散实现图像滤波)相关推荐
- 结合实例与代码谈数字图像处理都研究什么?
图像处理(以及机器视觉)在学校里是一个很大的研究方向,很多研究生.博士生都在导师的带领下从事着这方面的研究.另外,就工作而言,也确实有很多这方面的岗位和机会虚位以待.而且这种情势也越来越凸显.那么图像 ...
- 图像同态滤波的Butterworth方程(Butterworth equations for homomorphic Filtering of images)
论文实现代码见本人github MyHomomorphicFilter MyHomomorphicFilter 中文翻译 题目图像同态滤波的Butterworth方程Butterworth equat ...
- 【机器学习】数值分析02——任意方程求根
任意方程求根 全文目录 (博客园)机器学习 (Github)MachineLearning Math 1.简介 方程和函数是代数数学中最为重要的内容之一,从初中直到大学,我们都在研究着方程与函数,甚至 ...
- 基于python的ansys_基于Python与ANSYS的达芬方程计算程序
盛庆轲 梁海琴 摘要:达芬方程作为典型的非线性振动方程,可以直观地用来说明与线性振动的区别.分别采用有限元程序ANSYS和编程语言Python对达芬方程进行求解.针对ANSYS界面操作效率低.数据后处 ...
- duffing matlab,duffing方程matlab
1.Van der Pol 方程的两种解法:1) 采用ode45命令 2)Runge-Kutta方法 2.Duffing 方程的求解(Runge-Kutta方法,计算步长 h=0.005,计算时间t0 ...
- 基于SIMPLE的Navier-Stokes方程解算器matlab代码
1 简介 随着时代的不断发展,数字图像已经成了人们生活中必不可少的一部分,图像处理也就显得尤为重要.在图像的形成过程中,由于系统或者其他随机因素,最终得到的图像往往含有不同程度的噪声,为了能够更好地利 ...
- 浅水方程 c语言,浅水方程求解的难点
从数学形式上看,浅水方程属于非线性双曲型偏微分方程组,通常由满足质量守恒的连续方程以及满足动量守恒的动量方程构成,还可以包括满足能量守恒的能量方程.浅水方程建立在具有物理意义的物理量守恒基础上,也可以 ...
- 现代控制理论(一) 状态空间方程
文章目录 状态方程和输出方程 基本的状态空间方程 线性非线性时变时不变 系统的能控能观 状态方程的解 无输入线性时不变 转移矩阵 拉普拉斯求转移矩阵 有输入线性时不变 控制什么? 输入u1,u2,u3 ...
- 计算机视觉中的变分方法-扩散(Diffusion)
最近在看一个计算机视觉中的变分方法系列的视频,是德国慕尼黑工大出的,讲课老师是LSD-SLAM的作者Daniel Cremers,老师讲得很清楚,看了还是很有收获的.我已经变成Cremers大神的脑残 ...
最新文章
- 服务器邮箱备份文件在哪里,如何轻松将数据文件备份到电子邮箱?
- 网络测试与分析工具简介
- 使用jquery的getJSON从服务器端获得数据
- 金山办公或将陷入低增长,再去哪里找客户?
- 关于数据访问模式(三)—— Data Accessor模式
- VTK:KDTree时序用法实战
- BZOJ 1176: [Balkan2007]Mokia
- 南开调整研究生奖助,博士生最高超10万,硕士生6万,可能已经超过他们毕业后能拿的工资!...
- 博弈论:别人的想法(文末送书!)
- 浅谈:飞秋 程序设计之网络通信
- 【华为云技术分享】【测试微课堂】DevOps敏捷测试之道
- sails mysql_sails项目创建与常用基础操作总结
- 王者荣耀不同服务器能显示微信好友吗,王者荣耀怎么看微信好友在那个区
- ATAC-seq以及相关技术(DNase-seq,MNase-seq,NOMe-seq)的发展
- MATLAB通信系统建模
- 智能硬件开发怎么做?机智云全套自助式开发工具助力高效开发
- my1.exec()==QDialog::Accepted
- Leetcode 击碎气球的最大分数
- 人工智能点点通-AI开发工具介绍-钱兴会-专题视频课程
- openid php steam,Steam OpenID签名验证
热门文章
- http 长连接 短连接
- 时光机穿梭---管理修改
- 前后端分离WebStorm自动部署到tomcat服务器
- 工厂三兄弟之简单工厂模式
- 【Java】HashMap的数据结构、源码解析 - 公开课笔记
- dart系列之:HTML的专属领域,除了javascript之外,dart也可以
- Scala教程之:scala的参数
- Leet Code OJ 189. Rotate Array [Difficulty: Easy]
- flex与java间用json传输数据,如何在Java中使用flexjson通过@JSON注释控制序列化?
- druid监控配置及sql注入防火墙配置