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

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

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

NL-means执行过程

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

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

其中

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

程序:

close all;
clear all;
clc
I=double(imread('lena.tif'));
I=I+*randn(size(I));
tic
O1=NLmeans(I,,,);
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(*ds+,*ds+);
kernel=kernel./((*ds+)*(*ds+));
h2=h*h;
for i=:m
for j=:n
i1=i+ds;
j1=j+ds;
W1=PaddedImg(i1-ds:i1+ds,j1-ds:j1+ds);%邻域窗口1
wmax=;
average=;
sweight=;
%%搜索窗口
rmin = max(i1-Ds,ds+);
rmax = min(i1+Ds,m+ds);
smin = max(j1-Ds,ds+);
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)一文使用积分图像对该算法进行加速。

最新文章

  1. 将mac上的项目上传到oschina,进行代码托管。
  2. JavaScript 基础第一天
  3. 让树莓派说出自己的IP地址
  4. [SAP ABAP开发技术总结]IDoc
  5. java类的高级特性
  6. IAR:Error [Li005]:no definition for"***" 问题之连接
  7. Thread Runnable 多线程
  8. POJ 1915 经典马步 双向bfs
  9. Easy单例模式
  10. 利用Spring的ApplicationEvent执行自定义方法
  11. 程序员的Epic Fail [0]
  12. angular2^ typescript 将 文件和Json数据 合并发送到服务器(1.客户端处理)
  13. Docker容器如何互联
  14. SQL数据库的一些操作
  15. jQuery中对未来的元素绑定事件用 on
  16. 面试常问的几个排序和查找算法,PHP实现
  17. NGINX 502错误排查(转)
  18. DPA从DPA 10.0.352升级到DPA 11.0.373
  19. MyBatis笔记----MyBatis查询表全部的两种方法:XML与注解
  20. 51nod 1295 XOR key 可持久化01字典树

热门文章

  1. bzoj 2597 剪刀石头布 —— 拆边费用流
  2. 修改initrd.img里ko文件的一个小tips
  3. Python模块-chardet模块
  4. 问题:部署到iis上后Chart图片不显示;结果:使用webchart过程中遇到的一些问题
  5. 奇异值分解(SVD)实例,将不重要的特征值改为0,原X基本保持不变
  6. go 语言 基础 类型(1)
  7. MySQL的变量--系统变量、状态变量
  8. mysql主从服务器复制原理
  9. [Manacher+bit]Palindrome
  10. hibernate框架内容整理 学习