非局部均值去噪(NL-means)

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

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

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

NL-means执行过程

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

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

其中

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

程序:

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)一文使用积分图像对该算法进行加速。

时间: 2024-10-02 16:56:49

非局部均值去噪(NL-means)的相关文章

积分图像的应用(二):非局部均值去噪(NL-means)

非局部均值去噪(NL-means)一文介绍了NL-means基本算法,同时指出了该算法效率低的问题,本文将使用积分图像技术对该算法进行加速. 假设图像共像个素点,搜索窗口大小,领域窗口大小, 计算两个矩形邻域间相似度的时间为,对于每个像素点需要计算它与搜索窗口内个像素间的相似度,故NL-means复杂度为 . 经过分析可以发现,该算法可以提高之处只有邻域间相似度的计算,即耗时的操作.基本算法中,每次计算邻域间距离时都需要遍历两个邻域,逐对像素点求差值. 如果我们先构造一个关于像素差值的积分图像:

非局部均值(Nonlocal-Mean)

转载自网站:http://www.cnblogs.com/luo-peng/p/4785922.html 非局部均值去噪(NL-means) 非局部均值(NL-means)是近年来提出的一项新型的去噪技术.该方法充分利用了图像中的冗余信息,在去噪的同时能最大程度地保持图像的细节特征.基本思想是:当前像素的估计值由图像中与它具有相似邻域结构的像素加权平均得到. 理论上,该算法需要在整个图像范围内判断像素间的相似度,也就是说,每处理一个像素点时,都要计算它与图像中所有像素点间的相似度.但是考虑到效率

图像算法之十二:非局部均值滤波及其Matlab实现

保边去噪算法之二: 首先谈一下什么是非局部均值滤波.在此之前,我们先来看一下均值滤波的原理. 均值滤波 均值滤波的计算非常简单,将图像像素点灰度记录在数组中,然后设置方框半径的值,然后将方框中的所有点的像素求和取平均,得到的结果就是均值滤波后对应像素点的灰度值. 优点: 计算很快而且简单 从算法可以看出,只是求了平均,并没有很复杂的计算 缺点: 得到的图像很模糊 当方框的半径越大,得到的图像中那些变化较大的地方(边缘)计算后变化就越小,即边缘不明显,即模糊 非局部均值滤波 非局部均值滤波的基本原

第5章 进程环境(5)_非局部跳转

6. 非局部跳转 (1)setjmp和longjmp语句 头文件 #include<setjmp.h> 函数 int* setjmp(jum_buf env); 返回值 直接调用返回0,若从longjmp调用返回则返回非0值 功能 设置非局部跳转的跳转点   函数 void longjmp(jmp_buf env, int val); 功能 进行非局部转转,val为返回值 参数 env:一个特殊类型jmp_buf.这一数据类型是某种形式的数组,其中存放在调用longjmp时能用来恢复栈状态的信

OpenCV2:等间隔采样和局部均值的图像缩小

图像的缩小从物理意义上来说,就是将图像的每个像素的大小缩小相应的倍数.但是,改变像素的物理尺寸显然不是那么容易的,从数字图像处理的角度来看,图像的缩小实际就是通过减少像素个数来实现的.显而易见的,减少图像的像素会造成图像信息丢失.为了在缩小图像的同时,保持原图的概貌特征不丢失,从原图中选择的像素方法是非常重要的.本文主要介绍基于等间隔采样的图像缩小和基于局部均值的图像缩小以及其在OpenCV2的实现. 基于等间隔采样的图像缩小 这种图像缩小算法,通过对原图像像素进行均匀采样来保持所选择到的像素仍

图像处理之积分图应用四(基于局部均值的图像二值化算法)

图像处理之积分图应用四(基于局部均值的图像二值化算法) 基本原理 均值法,选择的阈值是局部范围内像素的灰度均值(gray mean),该方法的一个变种是用常量C减去均值Mean,然后根据均值实现如下操作: pixel = (pixel > (mean - c)) ? object : background 其中默认情况下参数C取值为0.object表示前景像素,background表示背景像素. 实现步骤 1. 彩色图像转灰度图像 2. 获取灰度图像的像素数据,预计算积分图 3. 根据输入的参数

【转】浅析C语言的非局部跳转:setjmp和longjmp

转自 http://www.cnblogs.com/lienhua34/archive/2012/04/22/2464859.html C语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转(通常情况下,很多人都建议不要使用goto语句,因为采用goto语句后,代码维护工作量加大).另外,C语言标准中还提供一种非局部跳转“no-local goto",其通过标准库<setjmp.h>中的两个标准函数setjmp和longjmp来实现. C标准库<setjmp.h>

条款47: 确保非局部静态对象在使用前被初始化

class FileSystem { ... }; // 这个类在你 // 的程序库中 FileSystem theFileSystem; // 程序库用户 // 和这个对象交互 ////////////////////////////////////////////////////////// class Directory { // 由程序库的用户创建 public: Directory(); ... }; Directory::Directory() { 通过调用theFileSystem

图像算法---基于局部均值的锐化算法研究

图像锐化算法是图像处理中经常用到的基础算法,在Photoshop中,使用的是USM锐化,但是这种锐化速度比较慢,今天,介绍一种很简单的锐化算法:基于均值滤波的锐化算法. 本文要介绍的这个算法,来源于论文<Digital image enhancement and noise fitering by using local statistics>. 算法过程如下: 1,计算窗口范围内的均值: 其中公式(1)为均值计算公式 ,公式(2)为方差计算公式,公式(2)暂时没有用到. 2,锐化公式: 2.