【图像去噪】基于matlab非局部均值(NLM)滤波图像去噪【含Matlab源码 420期】

举报
海神之光 发表于 2022/05/29 04:33:31 2022/05/29
【摘要】 一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,...

一、图像去噪及滤波简介

1 图像去噪
1.1 图像噪声定义
噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y)表示图像信号,n(x,y)表示噪声。
图像去噪是指减少数字图像中噪声的过程。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。去噪是图像处理研究中的一个重点内容。在图像的获取、传输、发送、接收、复制、输出等过程中,往往都会产生噪声,其中的椒盐噪声是比较常见的一种噪声,它属于加性噪声。

1.2 图像噪声来源
(1)图像获取过程中
图像传感器CCD和CMOS采集图像过程中受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声。
(2)图像信号传输过程中
传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。

1.3 噪声分类
噪声按照不同的分类标准可以有不同的分类形式:
基于产生原因:内部噪声,外部噪声。
基于噪声与信号的关系:
加性噪声:加性噪声和图像信号强度是不相关的,这类带有噪声的图像g可看成为理想无噪声图像f与噪声n之和:
g = f + n;
乘性嗓声:乘性噪声和图像信号是相关的,往往随图像信号的变化而变化,载送每一个象素信息的载体的变化而产生的噪声受信息本身调制。在某些情况下,如信号变化很小,噪声也不大。为了分析处理方便,常常将乘性噪声近似认为是加性噪声,而且总是假定信号和噪声是互相统计独立。
g = f + f*n
按照基于统计后的概率密度函数:
是比较重要的,主要因为引入数学模型这就有助于运用数学手段去除噪声。在不同场景下噪声的施加方式都不同,由于在外界的某种条件下,噪声下图像-原图像(没有噪声时)的概率密度函数(统计结果)服从某种分布函数,那么就把它归类为相应的噪声。下面将具体说明基于统计后的概率密度函数的噪声分类及其消除方式。

1.4 图像去噪算法的分类
(1)空间域滤波
空域滤波是在原图像上直接进行数据运算,对像素的灰度值进行处理。常见的空间域图像去噪算法有邻域平均法、中值滤波、低通滤波等。
(2)变换域滤波
图像变换域去噪方法是对图像进行某种变换,将图像从空间域转换到变换域,再对变换域中的变换系数进行处理,再进行反变换将图像从变换域转换到空间域来达到去除图像嗓声的目的。将图像从空间域转换到变换域的变换方法很多,如傅立叶变换、沃尔什-哈达玛变换、余弦变换、K-L变换以及小波变换等。而傅立叶变换和小波变换则是常见的用于图像去噪的变换方法。
(3)偏微分方程
偏微分方程是近年来兴起的一种图像处理方法,主要针对低层图像处理并取得了很好的效果。偏微分方程具有各向异性的特点,应用在图像去噪中,可以在去除噪声的同时,很好的保持边缘。偏微分方程的应用主要可以分为两类:一种是基本的迭代格式,通过随时间变化的更新,使得图像向所要得到的效果逐渐逼近,这种算法的代表为Perona和Malik的方程,以及对其改进后的后续工作。该方法在确定扩散系数时有很大的选择空间,在前向扩散的同时具有后向扩散的功能,所以,具有平滑图像和将边缘尖锐化的能力。偏微分方程在低噪声密度的图像处理中取得了较好的效果,但是在处理高噪声密度图像时去噪效果不好,而且处理时间明显高出许多。
(4)变分法
另一种利用数学进行图像去噪方法是基于变分法的思想,确定图像的能量函数,通过对能量函数的最小化工作,使得图像达到平滑状态,现在得到广泛应用的全变分TV模型就是这一类。这类方法的关键是找到合适的能量方程,保证演化的稳定性,获得理想的结果。
形态学噪声滤除器将开与闭结合可用来滤除噪声,首先对有噪声图像进行开运算,可选择结构要素矩阵比噪声尺寸大,因而开运算的结果是将背景噪声去除;再对前一步得到的图像进行闭运算,将图像上的噪声去掉。据此可知,此方法适用的图像类型是图像中的对象尺寸都比较大,且没有微小细节,对这类图像除噪效果会较好。

2 非局部均值(NLM)滤波
Antoni Buades在2005年提出了NLM算法。此算法成功避免了现有降噪算法以噪声图像正则假设为前提, 以及在降噪过程中图像结构信息丢失等不足。因为该算法在保持边缘信息方面和图像结构信息方面的出色性能,所以一经提出就被广泛应用,成为图像处理领域的一个研究热点。
NLM算法的原理如下:如图1所示, 图中包含P, Y 1和Y 2三个像素点及它们各自的邻域, 可以看出, 像素点P和Y 1具有非常相似的邻域结构,而P和Y2的邻域相似性很小,那么在对P点像素进行滤波处理的时候Y2的相似度权值w(P,Y2)则要比Y1对它的相似度权值w(P,Y1)大。可以通过搜索整幅图像里所有跟像素点P具有相似邻域的像素点,然后对它们按所得的相似度加权平均来得到像素点P的最终恢复结果。
在这里插入图片描述
图1 NLM滤波算法原理
NLM滤波算法进行图像去噪是以图像块为单位来计算像素点的相似度。所谓的图像块就是以某个像素点为中心的方形邻域。设受污染的图像在像素点i的灰度值为v(i),滤波后的灰度估计值为NL(V)(i)。对于任何一个像素点i,经过滤波后的NL(v)(i)可通过计算整个噪声图像里具有相似邻域的像素点的加权平均得到
在这里插入图片描述
式中,I为整个图像空间;权重系数 ω(i,j)为像素点 j对像素点 i的影响程度,如下所示
在这里插入图片描述

二、部分源代码

function [output]=NLmeans(input,t,f,h)
 
 %  输入: 待平滑的图像
 %  t: 搜索窗口半径
 %  f: 相似性窗口半径
 %  h: 平滑参数
 %  NLmeans(ima,5,2,sigma); 

 % 图像大小
 [m n]=size(input);
  % 输出
 Output=zeros(m,n);
 input2 = padarray(input,[f+t f+t],'symmetric');%边界作对称处理
 
 % 高斯核
 kernel = make_kernel(f);
 kernel = kernel / sum(sum(kernel));
 
 h=h*h;
 
 for i=1:m
    for j=1:n
                 
         i1 = i+ f+t;%原始图像的像素位置 (中心像素)
         j1 = j+ f+t;
                
         W1= input2(i1-f:i1+f , j1-f:j1+f);%小窗口
         
         wmax=0; 
         average=0;
         sweight=0;
         
         %rmin = max(i1-t,f+1);
         %rmax = min(i1+t,m+f);
         %smin = max(j1-t,f+1);
         %smax = min(j1+t,n+f);
         rmin=i1-t;
         rmax=i1+t;
         smin=j1-t;
         smax=j1+t;
         
         for r=rmin:1:rmax %大窗口
            for s=smin:1:smax
                                               
                if(r==i1 && s==j1) 
                    continue; 
                end;
                                
                W2= input2(r-f:r+f , s-f:s+f);    %大搜索窗口中的小相似性窗口     
                d = sum(sum(kernel.*(W1-W2).*(W1-W2)));
                w=exp(-d/h); %权重      
                                 
                if w>wmax                
                    wmax=w;   %求最大权重            
                end
                
                sweight = sweight + w;  %大窗口中的权重和
                average = average + w*input2(r,s);                                  
            end 
         end
             
        average = average + wmax*input2(i1,j1);
        sweight = sweight + wmax;
                   
        if sweight > 0
            output(i,j) = average / sweight;
        else
            output(i,j) = input(i,j);
        end                
    end
 end
 function nX = noise(varargin)
% 图像加入噪声
% 传入参数依次为:
% X - 待处理的图像
% type - 噪声类型
% variance/density - 高斯噪声的方差/椒盐噪声的密度(optional)
% M - 控制噪声区域的模板(optional)

% 参数默认值
variance = 0.01;                %高斯噪声的方差 默认值为0.01
density = 0.05;                 %椒盐噪声的密度 默认值为0.05
M = ones(size(varargin{1}));    %控制噪声区域的模板 默认对整个图像加噪声

X = varargin{1};                %待处理的图像
type = varargin{2};             %噪声类型

% 可选参数
if nargin>=3
    variance = varargin{3};
    density = varargin{3};
    
    if nargin == 4
        M = varargin{4};
    end
end


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/114222509

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。