图像去噪、图像滤波

图像去噪、图像滤波



前言

在图像传输过程中,由于环境的干扰或者设备的限制,往往最终接收得到的图片带有很多噪声,图像变得很模糊等情况出现。
因此我们需要各种图像处理的方法来解决此问题,提高图像质量。这里讲一些传统图像处理的方法,我习惯讲图像去噪、滤波分为两类:空间域包括(均值滤波,中值滤波,二维统计滤波等等)与频率域(FFT去噪,小波去噪等等)。
本文主要介绍我个人常用的方法,两种类型各一个,非局部均值滤波(NLM)和离散余弦滤波(DCT)。


一、NLM

1.原理

非局部均值(NLM)是近年来提出的一项新型的去噪技术。该方法充分利用了图像中的冗余信息,在去噪的同时能最大程度地保持图像的细节特征,该算法需要在整个图像范围内判断像素间的相似度。为了解决效率问题,会设定两个固定大小的窗口:搜索窗口(D* D,D=2* Ds+1)和邻域窗口(d* d,d=2*ds+1)。在算法执行过程中,大窗口是以目标像素x为中心的搜索窗口,两个灰色小窗口分别是以x、y为中心的邻域窗口。其中以y为中心的邻域窗口在搜索窗口中滑动,通过计算两个邻域窗口间的相似程度为y赋以权值w(x,y)。

2.代码

关于这个NLM的代码,我也是从网上参考而来,直接作为分享:

function DenoisedImg=NLmeans(I,ds,Ds,h)
%I:含噪声图像
%ds:邻域窗口半径
%Ds:搜索窗口半径
%h:高斯函数平滑参数  滤波控制参数
%DenoisedImg:去噪图像
[m,n]=size(I);
DenoisedImg=zeros(m,n);
% 扩展图像边界
PaddedImg = padarray(I,[ds,ds],'symmetric','both');
% 定义d值
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;
        % 在扩展图像中以(i1,j1)为中心的邻域窗口1
        W1=PaddedImg(i1-ds:i1+ds,j1-ds:j1+ds);
        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); % 搜索窗口右边界最高限制到原图像右边界
        % r与s为搜索窗口内像素点的坐标,对搜索窗口内的每个像素点求相似度
        for r=rmin:rmax
            for s=smin:smax
                % 不能与自己比较相似度
                if(r==i1&&s==j1) 
                    continue;
                end
                % 以搜索窗口内的像素点为中心的邻域窗口2
                W2=PaddedImg(r-ds:r+ds,s-ds:s+ds);
                % 计算邻域间距离
                Dist2=sum(sum(kernel.*(W1-W2).*(W1-W2)));  %距离平方和
                % 计算权值w(x,y)
                w=exp(-Dist2/h2);  %像素点相似性权值
                sweight=sweight+w;
                average=average+w*PaddedImg(r,s);
            end
        end
        % 将加权和归一化并替换原像素点
        DenoisedImg(i,j)=average/sweight;
    end
end

二、DCT

DCT变换的基础是傅里叶变换,图像信号需要通过二维数组的变换来实现。在对语音、图像信号变换的确定的变换矩阵正交变换中,DCT变换被认为是一种最佳变换。

1.公式

在这里插入图片描述

2.代码

通过DCT变换到频率域,进行高频屏蔽,去除图像中的部分噪声,其实这个方法用傅里叶变换和小波变换等也可以实现,欢迎大家尝试。

代码如下(示例):

%DCT变换
Y=dct2(Xnoised); 
I=zeros(m,n);
%高频屏蔽
I(1:m/2,1:n/2)=1; 
Ydct=Y.*I;
%逆DCT变换
Y=uint8(idct2(Ydct)); 


总结

以上就是今天要讲的内容,本文简单介绍了图像去噪的方法,NLM和DCT方法的具体细节和代码。希望大家一起来讨论。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值