【图像去噪】基于matlab小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含Matlab源码 462期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【图像去噪】基于matlab小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含Matlab源码 462期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、图像去噪及滤波简介
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 小波滤波
随着小波理论的日益完善,其以自身良好的时频特性在图像去噪领域受到越来越多的关注,开辟了用非线性方法去噪的先河。具体来说,小波能够去噪主要得益于小波变换有如下特点:
(1)低熵性。小波系数的稀疏分布,使图像变换后的熵降低。 意思是对信号(即图像)进行分解后,有更多小波基系数趋于0(噪声),而信号主要部分多集中于某些小波基,采用阈值去噪可以更好的保留原始信号。
(2)多分辨率特性。由于采用了多分辨方法,所以可以非常好地刻画信号的非平稳性,如突变和断点等(例如0-1突变是傅里叶变化无法合理表示的),可以在不同分辨率下根据信号和噪声的分布来消除噪声。
(3)去相关性。小波变换可对信号去相关,且噪声在变换后有白化趋势,所以小波域比时域更利于去噪。
(4)基函数选择灵活。小波变换可灵活选择基函数,也可根据信号特点和去噪要求选择多带小波和小波包等(小波包对高频信号再次分解,可提高时频分辨率),对不同场合,选择不同小波基函数。
根据基于小波系数处理方式的不同,常见去噪方法可分为三类:
(1)基于小波变换模极大值去噪(信号与噪声模极大值在小波变换下会呈现不同变化趋势)
(2)基于相邻尺度小波系数相关性去噪(噪声在小波变换的各尺度间无明显相关性,信号则相反)
(3)基于小波变换阈值去噪
小波去噪实现步骤:
(1)二维信号的小波分解。选择一个小波和小波分解的层次N,然后计算信号s到第N层的分解。
(2)对高频系数进行阈值量化。对于从1~N的每一层,选择一个阈值,并对这一层的高频系数进行软阈值量化处理。
(3)二维小波重构。根据小波分解的第N层的低频系数和经过修改的从第一层到第N的各层高频系数,计算二维信号的小波重构。
3 中值滤波
(1)概念:
(2)原理解释:
三、部分源代码
clc
clear all
close all
x1=imread('lena.bmp');%读入图像的值为无符号型unit8(),进行矩阵操作前必须先转换为矩阵运算所支持的double()双精度型。
figure(1);
subplot(2,3,1)
imshow(x1);
title('原图');
%添加高斯噪声
x2=imnoise(x1,'gaussian',0.01);
x1=double(x1);
subplot(2,3,2);
imshow(x2);
title('加噪后');
x3=double(x2);
%加噪后的信噪比
SNR=10*log(sum(x1.^2)/(sum((x3-x1).^2)))
[h0,h1]=wave1(x3);
%一次分解
[h00,h01]=wave1(h0');
[h10,h11]=wave1(h1');
% %% 中值滤波
% x0=rgb2gray(x1); %灰度处理,灰度处理后的图像是二维矩阵
n=3; %模板大小
[height, width]=size(x1); %获取图像的尺寸(n小于图片的宽高)
x11=double(x2); %数据类型转换
x22=x11; %转换后的数据赋给x2
for i=1:height-n+1
for j=1:width-n+1
c=x11(i:i+(n-1),j:j+(n-1)); %在x1中从头取模板大小的块赋给c
e=c(1,:); %e中存放是c矩阵的第一行
for u=2:n %将c中的其他行元素取出来接在e后使e为一个行矩阵
e=[e,c(u,:)];
end
med=median(e); %取一行的中值
x22(i+(n-1)/2,j+(n-1)/2)=med; %将模板各元素的中值赋给模板中心位置的元素
end
end
d=uint8(x22); %未被赋值的元素取原值
subplot(2,3,3);; imshow(d); title('中值滤波')%显示过滤后的灰度图片
% %硬阈值去噪
[t]=Throld(h11);
% [Sh00]=Soft(h00,t);
[hh01]=Soft(h01,t);
[hh10]=Soft(h10,t);
[hh11]=Soft(h11,t);
%图像重构
[H1]=revers1(h00,hh01);
[H2]=revers1(hh10,hh11);
[H3]=revers1(H1',H2');
%软阈值去噪后的信噪比
SNRH=10*log(sum(x1.^2)/(sum((H3-x1).^2)))
SS1=uint8(H3);
subplot(2,3,4)
imshow(SS1);
title('硬阈值去噪');
% %软阈值去噪
% [Sh00]=Soft(h00,t);
[Sh01]=Soft(h01,t);
[Sh10]=Soft(h10,t);
[Sh11]=Soft(h11,t);
%图像重构
function [T]=HardSoft(x,t)
[m,n]=size(x);
for i=1:m
for j=1:n
if(abs(x(i,j))<t)
x(i,j)=0;
else
x(i,j)=(sign(x(i,j)))*(abs(x(i,j))-0.7*t);
end
end
end
T=x;
function [T]=Soft(x,t)
[m,n]=size(x);
for i=1:m
for j=1:n
if(abs(x(i,j))<t)
x(i,j)=0;
else
x(i,j)=(sign(x(i,j)))*(abs(x(i,j))-t);
end
end
end
T=x;
- 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
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]基于matlab的传统算法图像去噪的实现原理
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/114461709
- 点赞
- 收藏
- 关注作者
评论(0)