图像滤波---各项异性扩散滤波使用笔记及代码

一、文章内容介绍

1、文章首先介绍各项异性扩散滤波以及各项同性滤波
2、接着简要的说明各项异性滤波算法的原理和功能
3、然后对各项异性滤波算法的几个参数的作用及调试进行详解
4、最后附上各项异性滤波matlab的代码

二、各项异性扩散滤波和各项同性滤波

1、各项同性滤波

在做图像处理时,我们接触到很多滤波算法,耳熟能详的有高斯滤波、均值滤波以及中值滤波。这些滤波
算法中,对于每一个像素点,算法都一视同仁,或使用相同的系数,或使用相同的邻域规则来对像素值进行处理。这些算法不考虑该像素的梯度方向,一视同仁,处理效果在各个方向上是一样的,对于整幅图像的处理是均匀的,图像的平滑不会因梯度而有所偏向,这样的滤波叫各项同性滤波(Isotropic Filtering)。

2、各项异性扩散滤波

与各项同性扩散滤波相对的即是各项异性扩散滤波(Anisotropic Filtering),各项异性扩散滤波是一种保边滤波器,在不同的梯度方向上,像素值做不同程度的改变,区分出图像的边缘信息,在去除噪声的同时保留边缘。
各项异性扩散叫P-M扩散,论文原文:Scale-space and edge detection using anisotropic diffusion。

3、各项异性和各项同性的对比

各项同性滤波处理是均匀的,不考虑方向,适合于简单的去噪和模糊处理。
各项异性滤波处理是方向依赖的,能够更好地保留边缘和细节,适合于复杂的图像去噪,尤其是在需要保留边缘信息的情况下。

三、各项异性扩散滤波的原理介绍

各项异性扩散滤波的本质是根据图像的梯度信息来调控扩散系数。
各项异性指物体的全部或者部分物理、化学性质随方向的不同而有所变化的特性。对于整张图像,将其看做一个热量场,将每个像素看做一个热流,对于边缘像素,我们不想让其平滑掉,所以边缘的邻域像素,热流的扩散要很弱,除此之外,其他的地方,顺着梯度的方向进行扩散,扩散过的图像区域就会变得平滑,如此在保留边缘的同时,平滑了噪声区域。

四、各项异性扩散滤波公式

滤波公式如下:
I t + 1 = I t + λ ∗ ( c N x y ∗ D N ( I t ) + c S x y ∗ D S ( I t ) + c E x y ∗ D E ( I t ) + c W x y ∗ D W ( I t ) ) I_{t+1}=I_t+\lambda*(cN_{xy}*D_N(I_t)+cS_{xy}*D_S(I_t)+cE_{xy}*D_E(I_t)+cW_{xy}*D_W(I_t)) It+1=It+λ(cNxyDN(It)+cSxyDS(It)+cExyDE(It)+cWxyDW(It))
其中I表示图像,x,y表示像素位置,t代表迭代次数, λ \lambda λ表示扩散速率。 D N D_N DN D S D_S DS D E D_E DE D W D_W DW分别表示南、北、西、东,即上下左右四个方向的梯度,梯度计算如下:
D N ( I t ) = I t ( x , y − 1 ) − I t ( x , y ) D_N(I_t)=I_t(x,y-1)-I_t(x,y) DN(It)=It(x,y1)It(x,y) D S ( I t ) = I t ( x , y + 1 ) − I t ( x , y ) D_S(I_t)=I_t(x,y+1)-I_t(x,y) DS(It)=It(x,y+1)It(x,y) D E ( I t ) = I t ( x − 1 , y ) − I t ( x , y ) D_E(I_t)=I_t(x-1,y)-I_t(x,y) DE(It)=It(x1,y)It(x,y) D W ( I t ) = I t ( x + 1 , y ) − I t ( x , y ) D_W(I_t)=I_t(x+1,y)-I_t(x,y) DW(It)=It(x+1,y)It(x,y)
Nxy、Sxy、Exy、Wxy分别表示对应方向上的扩散系数,扩散系数公式如下:
c N x y = e − D N ( I t ) 2 K 2 cN_{xy}=e^{- \frac{{D_N(I_t)}^2}{K^2}} cNxy=eK2DN(It)2 c S x y = e − D S ( I t ) 2 K 2 cS_{xy}=e^{- \frac{{D_S(I_t)}^2}{K^2}} cSxy=eK2DS(It)2 c E x y = e − D E ( I t ) 2 K 2 cE_{xy}=e^{- \frac{{D_E(I_t)}^2}{K^2}} cExy=eK2DE(It)2 c W x y = e − D W ( I t ) 2 K 2 cW_{xy}=e^{- \frac{{D_W(I_t)}^2}{K^2}} cWxy=eK2DW(It)2
其中 K K K表示对应方向的扩散灵敏度。

五、公式中的参数使用说明

1、扩散速率 λ \lambda λ

(1)参数说明

从公式中显而易见, λ \lambda λ控制每次迭代中像素值的变化量。
理论上, λ \lambda λ较大每个像素的扩散速度会比较快,因为每次像素值改变的增量会比较大,会导致图像的细节丢失。

(2)效果展示

在N(迭代次数)和K固定的情况下, λ \lambda λ从0.1~0.9的去噪效果图,0.1时细节保留最完整,0.3时细节丢失严重,0.5 ~0.7细节丢失程度依次增加。
在这里插入图片描述

(3)调节指南

从效果图分析,调解时,固定另外两个变量,从0.1开始逐步增加或减少,步长可设置为0.05、0.1、0.2,观察图像的去噪效果和细节保留情况,找到最佳的平衡点,比如,上述图像的滤波,平衡点应在0.1 ~0.3之间。

2、扩散敏感度 K K K

(1)参数说明

从公式看, K K K是指数函数 e e e的一个参数,函数形式为 y = e − 1 K 2 ∗ x 2 y=e^{-{\frac{1}{K^2}*x^2}} y=eK21x2,当 1 K 2 = 0.5 \frac{1}{K^2} = 0.5 K21=0.5时,函数图像如下:
在这里插入图片描述
1 K 2 = 2 \frac{1}{K^2} = 2 K21=2时,函数图像如下:
在这里插入图片描述
从两幅图像来看, K K K越大,曲线变换越平缓,表明系数对梯度的响应越不敏感,各项异性的程度就越低,图像应该就越模糊。

(2)效果展示

固定 λ = 0.12 \lambda=0.12 λ=0.12,N=20时, K K K从10增加到40,从图上看, K K K越大,平滑的越厉害,细节丢失越严重。
在这里插入图片描述

(3)调节指南

对于 K K K,通常可以选择从10开始调节,增加或减少,每次步长5、10、15、20尝试。
如果图像中细节多噪声少,K的值应该小一些,否则就大一些。

六、完整MATLAB代码

运行环境为Windows10和Matlab2023a
run.m

clc 
clear
%读取图像
img = imread('lisaGrayNoise.bmp');
%设置系数
lambda = 0.12;
K = 40;
N = 20;
%执行各项异性扩散滤波
imgADF = ImageADF(img,lambda,K,N);
figure;
imshow(img);
title('原图');
figure;
imshow(imgADF);
title('各向异性扩散滤波结果K=40');

ImageADF.m


function imgADF = ImageADF(img,lambda,K,N)
[m, n] = size(img);
imgADF = zeros(m, n);
img = double(img);
for t = 1 : N
    for i = 2 : m-1
        for j = 2 : n-1
            NI = img(i-1, j) - img(i, j);
            SI = img(i+1, j) - img(i, j);
            EI = img(i, j-1) - img(i, j);
            WI = img(i, j+1) - img(i, j);
            cN = exp(-NI^2/K^2);
            cS = exp(-SI^2/K^2);
            cE = exp(-EI^2/K^2);
            cW = exp(-WI^2/K^2);
            imgADF(i, j) = img(i, j) + lambda*(NI*cN + SI*cS + EI*cE + WI*cW);
        end
    end
    img = imgADF;
end
imgADF = img;
imgADF = uint8(imgADF);
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这是一个图像

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值