MATLAB小知识(二)——非局部均值去噪(NL-means)

转载自:https://www.cnblogs.com/luo-peng/p/4785922.html

非局部均值(NL-means)是近年来提出的一项新型的去噪技术。该方法充分利用了图像中的冗余信息,在去噪的同时能最大程度地保持图像的细节特征。基本思想是:当前像素的估计值由图像中与它具有相似邻域结构的像素加权平均得到。

 理论上,该算法需要在整个图像范围内判断像素间的相似度,也就是说,每处理一个像素点时,都要计算它与图像中所有像素点间的相似度。但是考虑到效率问题,实现的时候,会设定两个固定大小的窗口:搜索窗口和邻域窗口。邻域窗口在搜索窗口中滑动,根据邻域间的相似性确定像素的权值。

下图是NL-means算法执行过程,大窗口是以目标像素为中心的搜索窗口,两个灰色小窗口分别是以为中心的邻域窗口。其中以为中心的邻域窗口在搜索窗口中滑动,通过计算两个邻域窗口间的相似程度为赋以权值 。

NL-means执行过程

 

设含噪声图像为,去噪后的图像为中像素点处的灰度值通过如下方式得到:

其中权值表示像素点间的相似度,它的值由以为中心的矩形邻域间的距离决定:

其中

为归一化系数,为平滑参数,控制高斯函数的衰减程度。越大高斯函数变化越平缓,去噪水平越高,但同时也会导致图像越模糊。越小,边缘细节成分保持得越多,但会残留过多的噪声点。的具体取值应当以图像中的噪声水平为依据。

其中MATLAB程序为:

close all;
clear all;
clc
I=double(imread('lena.tif'));
I=I+10*randn(size(I));
tic
O1=NLmeans(I,2,5,10);
toc
imshow([I,O1],[]);
function DenoisedImg=NLmeans(I,ds,Ds,h)
%I:含噪声图像
%ds:邻域窗口半径
%Ds:搜索窗口半径
%h:高斯函数平滑参数
%DenoisedImg:去噪图像
I=double(I);
[m,n]=size(I);
DenoisedImg=zeros(m,n);
PaddedImg = padarray(I,[ds,ds],'symmetric','both');
kernel=ones(2*ds+1,2*ds+1);
kernel=kernel./((2*ds+1)*(2*ds+1));
h2=h*h;
for i=1:m
    for j=1:n
        i1=i+ds;
        j1=j+ds;
        W1=PaddedImg(i1-ds:i1+ds,j1-ds:j1+ds);%邻域窗口1
        wmax=0;
        average=0;
        sweight=0;
        %%搜索窗口
        rmin = max(i1-Ds,ds+1);
        rmax = min(i1+Ds,m+ds);
        smin = max(j1-Ds,ds+1);
        smax = min(j1+Ds,n+ds);
        for r=rmin:rmax
            for s=smin:smax
                if(r==i1&&s==j1)
                continue;
                end
                W2=PaddedImg(r-ds:r+ds,s-ds:s+ds);%邻域窗口2
                Dist2=sum(sum(kernel.*(W1-W2).*(W1-W2)));%邻域间距离
                w=exp(-Dist2/h2);
                if(w>wmax)
                    wmax=w;
                end
                sweight=sweight+w;
                average=average+w*PaddedImg(r,s);
            end
        end
        average=average+wmax*PaddedImg(i1,j1);%自身取最大权值
        sweight=sweight+wmax;
        DenoisedImg(i,j)=average/sweight;
    end
end

结果:

可以看出,NL-means去噪效果的确很好。但是该算法的最大缺陷就是计算复杂度太高,程序非常耗时,导致该算法不够实用。上例中256*256的lena图耗时高达33.913968s!!

针对此问题,积分图像的应用(二):非局部均值去噪(NL-means)一文使用积分图像对该算法进行加速。

 

 

 

  • 11
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MATLAB中的局部均值去噪(Non-local Means Denoising)是一种图像去噪技术,它不仅能够消除图像中的噪声,还能够保持图像的纹理细节。局部均值去噪的思想是利用图像中相似区域的信息进行噪声估计和去除。 该方法首先在图像中寻找与每个像素相似的区域,然后计算这些相似区域中像素的加权平均值来估计噪声。具体步骤如下: 1. 首先,选取一个窗口大小和搜索半径,用于定义相似区域的范围。窗口大小决定了要计算平均值的邻域大小,而搜索半径决定了要搜索相似区域的范围。 2. 对于图像中的每个像素,定义一个相似度权重,用于衡量其与相似区域中其他像素的相似程度。这可以通过比较像素值的差异来计算,相似度越高,权重就越大。 3. 根据相似度权重对相似区域中的像素进行加权平均值计算,以得到每个像素的噪声估计。加权平均值可以通过对相似区域中每个像素乘以其相应的权重,并求和后进行归一化得到。 4. 最后,将噪声估计值减去原始图像像素值,得到去噪后的图像。 局部均值去噪方法相对简单,易于实现,并且在去除高斯噪声、椒盐噪声等噪声类型上效果良好。然而,该方法的缺点是计算复杂度较高,尤其是在大尺寸图像上处理时速度较慢。因此,在实际应用中,需要根据图像大小和噪声类型来选择适当的局部均值去噪参数,以达到较好的去噪效果和计算效率。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值