各向异性扩散滤波器(anisotropic diffusion filter)

各向异性扩散,也叫做P–M扩散,在图像处理和计算机视觉中广泛用于保持图像细节特征的同时减少噪声。

定义

有灰度图像I(x,y),其各向异性扩散方程如下

?I?t=div(c(x,y,t)?I)=?c?I+c(x,y,t)ΔI

其中Δ是Laplacian算子 ,?是梯度算子,div是散度,c(x,y,t)是扩散系数。控制着扩散速率,通常选取的图像梯度函数,这样在扩散时保护到图像边缘信息。这些由Perona和Malik在90年代初发现,他们提出两种扩散系数方程,也就是有名的P-M方程:

c(||?I||)=e?(||?I||/K)2

c(||?I||)=11+(||?I||K)2

常数项K用来控制对边缘的灵敏度,通常经验选取或者用图像噪声相关的函数来表示。

原理

令M表示一副图像的光滑程度,那么上面的扩散方程可以用梯度下降方程最小化如下能量函数E:M→R来表示

E[I]=12∫Ωg(||?I(x)||2)dx

这里g:R→R是一个实数函数,稍后看到它本质上就是扩散系数。

对两边求其梯度,得到下式子

?EI=?div(g′(||?I(x)||2)?I)

然后我们就可以使用梯度下降方程去降低图像的梯度,即平滑图像。

?I?t=??EI=div(g′(||?I(x)||)?I)

令c=g′我们就得到了各向异性扩散方程。

好了,原理就解释到这么多了。若是想了解更多,可以看文章后面给出的更多阅读部分。

代码

% ANISODIFF - Anisotropic diffusion.
%
% Usage:
%  diff = anisodiff(im, niter, kappa, lambda, option)
%
% Arguments:
%         im     - input image
%         niter  - number of iterations.
%         kappa  - conduction coefficient 20-100 ?
%         lambda - max value of .25 for stability
%         option - 1 Perona Malik diffusion equation No 1
%                  2 Perona Malik diffusion equation No 2
%
% Returns:
%         diff   - diffused image.
%
% kappa controls conduction as a function of gradient.  If kappa is low
% small intensity gradients are able to block conduction and hence diffusion
% across step edges.  A large value reduces the influence of intensity
% gradients on conduction.
%
% lambda controls speed of diffusion (you usually want it at a maximum of
% 0.25)
%
% Diffusion equation 1 favours high contrast edges over low contrast ones.
% Diffusion equation 2 favours wide regions over smaller ones.

% Reference:
% P. Perona and J. Malik.
% Scale-space and edge detection using ansotropic diffusion.
% IEEE Transactions on Pattern Analysis and Machine Intelligence,
% 12(7):629-639, July 1990.
%
% Peter Kovesi
% School of Computer Science & Software Engineering
% The University of Western Australia
% pk @ csse uwa edu au
% http://www.csse.uwa.edu.au
%
% June 2000  original version.
% March 2002 corrected diffusion eqn No 2.

function diff = anisodiff(im, niter, kappa, lambda, option)

if ndims(im)==3
  error(‘Anisodiff only operates on 2D grey-scale images‘);
end

im = double(im);
[rows,cols] = size(im);
diff = im;

for i = 1:niter
%  fprintf(‘\rIteration %d‘,i);

  % Construct diffl which is the same as diff but
  % has an extra padding of zeros around it.
  diffl = zeros(rows+2, cols+2);
  diffl(2:rows+1, 2:cols+1) = diff;

  % North, South, East and West differences
  deltaN = diffl(1:rows,2:cols+1)   - diff;
  deltaS = diffl(3:rows+2,2:cols+1) - diff;
  deltaE = diffl(2:rows+1,3:cols+2) - diff;
  deltaW = diffl(2:rows+1,1:cols)   - diff;

  % Conduction

  if option == 1
    cN = exp(-(deltaN/kappa).^2);
    cS = exp(-(deltaS/kappa).^2);
    cE = exp(-(deltaE/kappa).^2);
    cW = exp(-(deltaW/kappa).^2);
  elseif option == 2
    cN = 1./(1 + (deltaN/kappa).^2);
    cS = 1./(1 + (deltaS/kappa).^2);
    cE = 1./(1 + (deltaE/kappa).^2);
    cW = 1./(1 + (deltaW/kappa).^2);
  end

  diff = diff + lambda*(cN.*deltaN + cS.*deltaS + cE.*deltaE + cW.*deltaW);

%  Uncomment the following to see a progression of images
%  subplot(ceil(sqrt(niter)),ceil(sqrt(niter)), i)
%  imagesc(diff), colormap(gray), axis image

end
%fprintf(‘\n‘);

用途

感知边缘的滤波器在计算摄影学领域用途广泛,主要用于以下几个方面,仅举几例。

  • 细节增强
  • HDR色调映射
  • 风格化
  • 铅笔画
  • 联合滤波
  • 灰度图像彩色化等

效果

测试代码

 I = imread(‘lena.jpg‘);
 out = anisodiff(I,20,20,0.15,1);
 imshow(out/255);

参考阅读

WiKi百科英文

在图像处理中,散度 div 具体的作用是什么?

Scale-Space and Edge Detection Using Anisotropic Diffusion

转载请保留以下信息

作者 日期 联系方式
风吹夏天 2015年6月6日 [email protected]
时间: 2024-08-01 14:23:11

各向异性扩散滤波器(anisotropic diffusion filter)的相关文章

各项异性扩散(Anisotropic diffusion)

各向异性扩散,也叫做P–M扩散,在图像处理和计算机视觉中广泛用于保持图像细节特征的同时减少噪声. 定义 有灰度图像I(x,y),其各向异性扩散方程如下 ?I?t=div(c(x,y,t)?I)=?c?I+c(x,y,t)ΔI 其中Δ是Laplacian算子 ,?是梯度算子,div是散度,c(x,y,t)是扩散系数.控制着扩散速率,通常选取的图像梯度函数,这样在扩散时保护到图像边缘信息.这些由Perona和Malik在90年代初发现,他们提出两种扩散系数方程,也就是有名的P-M方程: c(||?I

各向异性扩散PM模型原理与C++实现

本文介绍了各向异性扩散PM模型,并给出了C++代码实现. 一.PM模型原理 其中,                                                      二.C++代码实现 MATLAB代码可参考:http://www.csse.uwa.edu.au/~pk/research/matlabfns/Spatial/anisodiff.m http://www.mathworks.com/matlabcentral/fileexchange/14995-aniso

Unity Shaders and Effects Cookbook (3-6) 创建各向异性高光类型(Anisotropic) 模拟金属拉丝效果

这一次学习各向异性高光类型,名字真拗口,Anisotropic 这个英文单词也很拗口. 各向异性是模拟物体表面 沟槽方向性的高光反射类型,他会修改或延伸垂直方向上的高光. 比如模拟金属拉丝的效果,就可以使用各向异性来模拟. 转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn 首先需要准备一张各向异性 的法线贴图,代表各向异性镜面高光的方向性. 注意法线贴图导入到Unity之后要在属性面板中勾选类型为 Normal Map. 首先在

窄带陷波滤波器(Notch filter)

陷波滤波器指的是可以将某一频率迅速衰减的滤波器. 在伺服控制领域比较常用来抑制控制系统的共振点,通过对共振点精确的频率陷波,既消除了振动又不影响控制效果. 在衡量一个陷波器对伺服系统的影响时,重点关注的参数一般有三个: (1)陷波频率(单位HZ) (2)陷波深度(单位dB) (3)陷波宽度(单位HZ) 窄带陷波滤波器相对普通陷波器而言,陷波宽度很小,形象的比喻就是针对共振点精确抑制.同时能最大程度减小对伺服控制的影响.较为理想的陷波器应该具有较大的陷波深度,宽度较窄,同时相位偏移影响尽量小等.

{ICIP2014}{收录论文列表}

This article come from HEREARS-L1: Learning Tuesday 10:30–12:30; Oral Session; Room: Leonard de Vinci 10:30  ARS-L1.1—GROUP STRUCTURED DIRTY DICTIONARY LEARNING FOR CLASSIFICATION Yuanming Suo, Minh Dao, Trac Tran, Johns Hopkins University, USA; Hojj

扩散(diffusion)和弥散(dispersion)有什么区别

作者:谢易正链接:https://www.zhihu.com/question/23914350/answer/177359196来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 通常在微观层面,物质的传递可以由三种机制构成: 扩散(Diffusion)+移流(advection)+弥散(dispersion).dispersion(弥散)是在有advection(移流)存在的情况下发生的,是由于流体流动时溶质的流动速度不均匀而引起的一种对扩散现象(diffusio

各项异性滤波简介Anisotropic Filtering(AF)

本文主要整理简绍来自互联网的各项异性滤波的知识. 原文链接:http://www.linuxgraphics.cn/graphics/using_anisotropic_texture_filtering_in_opengl.html 基本的纹理过滤 纹理是数据的简单矩阵排列--例如,颜色数据.亮度数据或者颜色和alpha(透明度)数据.纹理数组中的每一个独立的数值通常称为一个纹理单元.纹理映射是一种将纹理图像应用于物体表面的技术(就是把图像贴到构成物体表面的多边形上去),就像该图像是一种贴画纸

各项异性滤波简单介绍Anisotropic Filtering(AF)

本文主要整理简绍来自互联网的各项异性滤波的知识. 原文链接:http://www.linuxgraphics.cn/graphics/using_anisotropic_texture_filtering_in_opengl.html 主要的纹理过滤 纹理是数据的简单矩阵排列--比如.颜色数据.亮度数据或者颜色和alpha(透明度)数据.纹理数组中的每个独立的数值通常称为一个纹理单元. 纹理映射是一种将纹理图像应用于物体表面的技术(就是把图像贴到构成物体表面的多边形上去),就像该图像是一种贴画纸

Texture Filter中的Bilinear、Trilinear以及Anistropic Filtering

1. 为什么在纹理采样时需要texture filter(纹理过滤)?我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应texture上的采样中心texel),大小也不一定一至.当纹理大于三维图形表面时,导至一个像素被映射到许多纹理像素上;当维理小于三维图形表面时,许多个象素都映射到同一纹理.当这些情况发生时,贴图就会变得模糊或发生错位,马赛克.要解决此类问题,必须通过技术平滑texel和pixel之间的对应.这种技术就是纹理滤波