1. Perona-Malik方程

之前所使用的线性扩散图像滤波会对整幅图像“一视同仁”,不管是边缘纹理还是其他结构都会等同于噪声一起滤除。这会使图像过于平滑而且丢失很多高频信息。如果我们使用非线性扩散的方法,即:传导系数会随着图像的局部特征改变而改变,例如在图像平滑区域传导系数自适应增大可以更好的滤除噪声,在图像的边缘纹理区域系数自适应减小可以更好的保存图像边缘。

首先,PM扩散方程为:它的来源是将梯度的模值信息融合到传输系数中,并带入公式(5)可得:

其中

为梯度的模值:
为边缘函数,或者边缘停止函数。常用的边缘函数比如:

这里K是选定的常数,作用是控制g的下降速率。下图为p=1的条件下K=10, 20的下降曲线。

由于在图像的边缘中梯度的模值

取得极大值,而优化公式整体是求极小值的,为了避免在优化公式中引入负号,因此要引入一个单调递减而且是非负的边缘函数
,它可以保证在
取得极大值时,
取得局部极小值。它最早在图像分割和边缘检测问题中被提出,由于该函数的性质是可以将方程的解向着梯度变大的方向移动,最终停止在图像的边缘上,因此也被称为边缘停止函数。

2. P-M方程行为分析

首先将P-M方程简化为一维的情况分析:

其中

的下角标表示对某个变量求导。
称之为

影响函数。将(11)式中的g(-)函数带入可得:

下面是

的函数曲线图:
  1. 当p=1时,

    从最大值1单调递减到0,而且始终保持正值,因此这种情况下的(12)式总保持正向扩散。
  2. 当p=2时,
    这个不等式说明在梯度较小的图像平滑区域,即:
    时,导数大于0为正向扩散。在梯度较大的边缘纹理区域,导数小于0为反向扩散。反向扩散的含义是:杂质将从浓度低的地方流向浓度高的地方,这意味着图像边缘的锐化。

在后面二维P-M方程的分析中,可以得出结论:当选用合适的边缘函数g时,P-M方程可以自适应的实现图像去噪和边缘增强的效果。

3. P-M方程的病态性质

数学研究表示(1)式给出的初值的P-M方程极有可能是病态的。如果定义下面这个能量泛函:

其中

是一个非负函数而且在0处取得的值为0。那么依据变分原理,最小化该能量泛函对应的梯度下降流为:

如果将

改写为:
,那么(5)式就和(1)式完全一致。也就是说P-M方程可以看做是(4)式能量泛函的梯度下降流。其边缘函数g由(4)式中的
函数决定。再与式(3)做比较可得函数的
的导数就是前面所定义的

4. P-M方程的正则化

一般来说,病态问题都是一个方程对应着多个解,因此需要用正则化的方法使它变成一个适定问题(well-posed)。有研究者提出一种新的改进方案为:

其中

表示方差为
的Gaussian函数,(7)式称之为正则化的P-M方程,或者叫CLMC模型。

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方程(各向同性非线性扩散实现图像滤波)相关推荐

  1. 结合实例与代码谈数字图像处理都研究什么?

    图像处理(以及机器视觉)在学校里是一个很大的研究方向,很多研究生.博士生都在导师的带领下从事着这方面的研究.另外,就工作而言,也确实有很多这方面的岗位和机会虚位以待.而且这种情势也越来越凸显.那么图像 ...

  2. 图像同态滤波的Butterworth方程(Butterworth equations for homomorphic Filtering of images)

    论文实现代码见本人github MyHomomorphicFilter MyHomomorphicFilter 中文翻译 题目图像同态滤波的Butterworth方程Butterworth equat ...

  3. 【机器学习】数值分析02——任意方程求根

    任意方程求根 全文目录 (博客园)机器学习 (Github)MachineLearning Math 1.简介 方程和函数是代数数学中最为重要的内容之一,从初中直到大学,我们都在研究着方程与函数,甚至 ...

  4. 基于python的ansys_基于Python与ANSYS的达芬方程计算程序

    盛庆轲 梁海琴 摘要:达芬方程作为典型的非线性振动方程,可以直观地用来说明与线性振动的区别.分别采用有限元程序ANSYS和编程语言Python对达芬方程进行求解.针对ANSYS界面操作效率低.数据后处 ...

  5. duffing matlab,duffing方程matlab

    1.Van der Pol 方程的两种解法:1) 采用ode45命令 2)Runge-Kutta方法 2.Duffing 方程的求解(Runge-Kutta方法,计算步长 h=0.005,计算时间t0 ...

  6. 基于SIMPLE的Navier-Stokes方程解算器matlab代码

    1 简介 随着时代的不断发展,数字图像已经成了人们生活中必不可少的一部分,图像处理也就显得尤为重要.在图像的形成过程中,由于系统或者其他随机因素,最终得到的图像往往含有不同程度的噪声,为了能够更好地利 ...

  7. 浅水方程 c语言,浅水方程求解的难点

    从数学形式上看,浅水方程属于非线性双曲型偏微分方程组,通常由满足质量守恒的连续方程以及满足动量守恒的动量方程构成,还可以包括满足能量守恒的能量方程.浅水方程建立在具有物理意义的物理量守恒基础上,也可以 ...

  8. 现代控制理论(一) 状态空间方程

    文章目录 状态方程和输出方程 基本的状态空间方程 线性非线性时变时不变 系统的能控能观 状态方程的解 无输入线性时不变 转移矩阵 拉普拉斯求转移矩阵 有输入线性时不变 控制什么? 输入u1,u2,u3 ...

  9. 计算机视觉中的变分方法-扩散(Diffusion)

    最近在看一个计算机视觉中的变分方法系列的视频,是德国慕尼黑工大出的,讲课老师是LSD-SLAM的作者Daniel Cremers,老师讲得很清楚,看了还是很有收获的.我已经变成Cremers大神的脑残 ...

最新文章

  1. 服务器邮箱备份文件在哪里,如何轻松将数据文件备份到电子邮箱?
  2. 网络测试与分析工具简介
  3. 使用jquery的getJSON从服务器端获得数据
  4. 金山办公或将陷入低增长,再去哪里找客户?
  5. 关于数据访问模式(三)—— Data Accessor模式
  6. VTK:KDTree时序用法实战
  7. BZOJ 1176: [Balkan2007]Mokia
  8. 南开调整研究生奖助,博士生最高超10万,硕士生6万,可能已经超过他们毕业后能拿的工资!...
  9. 博弈论:别人的想法(文末送书!)
  10. 浅谈:飞秋 程序设计之网络通信
  11. 【华为云技术分享】【测试微课堂】DevOps敏捷测试之道
  12. sails mysql_sails项目创建与常用基础操作总结
  13. 王者荣耀不同服务器能显示微信好友吗,王者荣耀怎么看微信好友在那个区
  14. ATAC-seq以及相关技术(DNase-seq,MNase-seq,NOMe-seq)的发展
  15. MATLAB通信系统建模
  16. 智能硬件开发怎么做?机智云全套自助式开发工具助力高效开发
  17. my1.exec()==QDialog::Accepted
  18. Leetcode 击碎气球的最大分数
  19. 人工智能点点通-AI开发工具介绍-钱兴会-专题视频课程
  20. openid php steam,Steam OpenID签名验证

热门文章

  1. http 长连接 短连接
  2. 时光机穿梭---管理修改
  3. 前后端分离WebStorm自动部署到tomcat服务器
  4. 工厂三兄弟之简单工厂模式
  5. 【Java】HashMap的数据结构、源码解析 - 公开课笔记
  6. dart系列之:HTML的专属领域,除了javascript之外,dart也可以
  7. Scala教程之:scala的参数
  8. Leet Code OJ 189. Rotate Array [Difficulty: Easy]
  9. flex与java间用json传输数据,如何在Java中使用flexjson通过@JSON注释控制序列化?
  10. druid监控配置及sql注入防火墙配置