数字图像去噪典型算法及matlab实现

数字图像去噪典型算法及matlab实现

希望得到大家的指点和帮助

图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染,一般数字图像系统中的常见噪声主要有:高斯噪声(主要由阻性元器件内部产生)、椒盐噪声(主要是图像切割引起的黑图像上的白点噪声或光电转换过程中产生的泊松噪声)等;

目前比较经典的图像去噪算法主要有以下三种:

均值滤波算法:也称线性滤波,主要思想为邻域平均法,即用几个像素灰度的平均值来代替每个像素的灰度。有效抑制加性噪声,但容易引起图像模糊,可以对其进行改进,主要避开对景物边缘的平滑处理。

中值滤波:基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化。

Wiener维纳滤波:使原始图像和其恢复图像之间的均方误差最小的复原方法,是一种自适应滤波器,根据局部方差来调整滤波器效果。对于去除高斯噪声效果明显。 实验一:均值滤波对高斯噪声的效果

I=imread('C:\Documents and Settings\Administrator\桌面\1.gif');%读取图像

J=imnoise(I,'gaussian',0,0.005);%加入均值为0,方差为0.005的高斯噪声

subplot(2,3,1);imshow(I);

title('原始图像');

subplot(2,3,2); imshow(J);

title('加入高斯噪声之后的图像');

%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波

K1=filter2(fspecial('average',3),J)/255; %模板尺寸为3

K2=filter2(fspecial('average',5),J)/255;% 模板尺寸为5

K3=filter2(fspecial('average',7),J)/255; %模板尺寸为7

K4= filter2(fspecial('average',9),J)/255; %模板尺寸为9

subplot(2,3,3);imshow(K1);

title('改进后的图像1');

subplot(2,3,4); imshow(K2);

title('改进后的图像2');

subplot(2,3,5);imshow(K3);

title('改进后的图像3');

subplot(2,3,6);imshow(K4);

title('改进后的图像4');

PS:filter2用法

fspecial函数用于创建预定义的滤波算子,其语法格式为:

h = fspecial(type)

h = fspecial(type,parameters)

参数type制定算子类型,parameters指定相应的参数,具体格式为:

type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。

type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为

0.5。

type= 'laplacian',为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1],默认值为0.2。

type= 'log',为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3],sigma为滤波器的标准差,单位为像素,默认值为0.5

type= 'prewitt',为prewitt算子,用于边缘增强,无参数。

type= 'sobel',为著名的sobel算子,用于边缘提取,无参数。

type= 'unsharp',为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2。

运行效果见图1:

据我目测,使用均值滤波去噪(高斯噪声)效果选用的邻域半径越大效果越好,当然其代价也会更大,另外确切的去噪效果的好坏还需要用SNR等数据来度量。 实验二:二维自适应维纳滤波对高斯噪声的滤除效果

I=imread('C:\Documents and Settings\Administrator\桌面\1.gif'); %读取图像

J=imnoise(I,'gaussian',0,0.005); %加入均值为0,方差为0.005的高斯噪声

K2=wiener2(J,[3 3]); %对加噪图像进行二维自适应维纳滤波

K2=wiener2(J,[5 5]); %对加噪图像进行二维自适应维纳滤波

K2=wiener2(J,[7 7]); %对加噪图像进行二维自适应维纳滤波

K2=wiener2(J,[9 9]); %对加噪图像进行二维自适应维纳滤波

subplot(2,3,1);imshow(I);

title('原始图像');

subplot(2,3,2);imshow(J);

title('加噪图像');

subplot(2,3,3);imshow(K1);

title('恢复图像1');

subplot(2,3,4);imshow(K2);

title('恢复图像2');

subplot(2,3,5);imshow(K3);

title('恢复图像3');

subplot(2,3,6);imshow(K4);

title('恢复图像3');

PS:维纳滤波的两个函数wiener2与deconvwnr都能够完成维纳滤波的功能, deconvwnr强调图象复原方面,wiener2强调图象空间域锐化的作用,其中J=wiener2(I,[m,n])返回有噪声图像I经过wierner(维纳)滤波后的图像,[m,n]指定滤波器窗口大小为m*n,默认值为3*3,J=wiener2(I,[m,n],noise)指定噪声的功率,[J,noise]=wiener2(I,[m,n])在图像滤波的同时,返回噪声功率的估计值noise。

imnoise的语法格式为

J = imnoise(I,type)

J = imnoise(I,type,parameters)

其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。

参数type和parameters用于确定噪声的类型和相应的参数。

下面的命令是对图像1.gif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:

实验三:对加入椒盐噪声的图像分别作均值、中值和维纳滤波

I=imread(1.gif');

J1=imnoise(I,'gaussian',0,0.02);

J2=imnoise(I,'salt & pepper',0.02);

J3=imnoise(I,'speckle',0.02);

运行效果见图2

I=imread('C:\Documents and Settings\Administrator\桌面\1.gif');

J=imnoise(I,'salt & pepper',0.02);

%h=ones(3,3)/9;%产生3*3的全1数组

%B=conv2(J,h);%卷积运算

K2=filter2(fspecial('average',3),J)/255; %均值滤波模板尺寸为3

K= medfilt2(J);%采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波

K1=wiener2(J,[3 3]); %对加噪图像进行二维自适应维纳滤波

subplot(2,3,1);imshow(I);

title('原始图像');

subplot(2,3,2);imshow(J);

title('加噪图像');

subplot(2,3,3);imshow(K2);

title('均值滤波后的图像');

subplot(2,3,4);imshow(K);

title('中值滤波后的图像');

subplot(2,3,5);imshow(K1);

title('维纳滤波后的图像');

PS:MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:

C = conv2(A,B)

C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb+1)×(na+nb+1)。 MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:

Y = filter2(h,X)

其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:

其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。

Fspecial函数用于创建预定义的滤波算子,其语法格式为:

h = fspecial(type)

h = fspecial(type,parameters)

参数type制定算子类型,parameters指定相应的参数,具体格式为前文已有叙述。

ones产生全1数组,zeros产生全零数组。 ones(a,b)产生a行b列全1数组 ones(a)产生a行a列全1叔祖

运行效果见图3:

通过图3我们也可得出结论,即中值滤波对于去除椒盐噪声效果最好,而维纳滤波去除效果则较差。中值滤波对于去除椒盐噪声效果明显,是因为椒盐噪声只在画面上的部分点随机出现,而中值滤波根据数据排序,将未被污染的点代替噪声点的值的概率较大,所以抑制效果好。对点、线和尖顶较多的图像不宜采用中值滤波,因为一些细节点可能被当成噪声点。

实验四: 分别使用二维统计滤波对椒盐噪声和高斯噪声进行滤波

I=imread('C:\Documents and Settings\Administrator\桌面\1.gif');

J1=imnoise(I,'salt & pepper',0.004);

subplot(2,3,1);imshow(I);

title('原始图像');

subplot(2,3,2);imshow(J1);

title('加椒盐噪声后的图像');

J= ordfilt2(J1,5,ones(3,4));% 进行二维统计顺序过滤

subplot(2,3,3);imshow(J);

title('椒盐噪声滤波后的图像');

J2=imnoise(I,'gaussian',0,0.004);

subplot(2,3,4);imshow(J2);

title('加高斯噪声后的图像');

J3= ordfilt2(J2,5,ones(3,4));

subplot(2,3,5);imshow(J3);

title('高斯噪声滤波后的图像'); PS:

效果见图4:

PS:MATLAB小波分析工具箱提供的用于图像去噪的函数有wrcoef2和wpdencmp,其语法格式分别为: X=wrcoef2(‘type’,C,S,’wname’)

*xd,treed,datad,perf0,perfl2+=wpdencmp(x,sorh,N,’wname’,crit,par,keepapp)

其中,X=wrcoef2(‘type’,C,S,’wname’)返回基于小波分解结构[C,S]的小波重构图像X。参数“type”等于a表示重构近似系数;等于h表示重构水平细节系数;等于v表示重构垂直细节系数,等于d表示重构对角细节系数。

*xd,treed,datad,perf0,perfl2+=wpdencmp(x,sorh,N,’wname’,crit,par,keepapp)是通过小波包定限(阈值化),返回输入信号或图像X的除噪结果xd。输入参数中,[treed,datad]为xd的最佳小波包分解结构;perfl2和perf0表示L^2复原和压缩百分数;perf12=100*(xd的小波包系数向量范数/X的小波包系数向量范数) ^2。Keepapp=1表示近似系数不能阈值化,否则可以阈值化;sorh=’s’为软阈值化,h为硬阈值化。

实验五:利用wrcoef2函数进行图像去噪 其程序代码如下:

I=imread('C:\Documents and Settings\Administrator\桌面\1.gif');

J=imnoise(I,'gaussian',0,0.005);

[c,l]=wavedec2(J,2,'sym4');

J1= wrcoef2('a',c,l,'sym4',1);

J2= wrcoef2('a',c,l,'sym4',2);

subplot(2,2,1);imshow(I);

title('原始图像');

subplot(2,2,2);imshow(J);

title('含噪图像');

subplot(2,2,3);imshow(J1,[]);

title('第一次去噪图像');

subplot(2,2,4);imshow(J2,[]);

title('第二次去噪图像');

运行结果如图5:

实验六:利用wpdencmp函数进行图像去噪 其程序代码如下:

I=imread('C:\Documents and Settings\Administrator\桌面\1.gif');

I=im2double(I);

subplot(2,2,1);imshow(I);

title('原始图像');

J=imnoise(I,'gaussian',0,0.05);

subplot(2,2,2);imshow(J);

title('含噪图像');

thr=0.1;sorh='s';

crit='shannon';

keepapp=0;

J1=wpdencmp(J,sorh,3,'sym4',crit,thr,keepapp);

subplot(2,2,3);imshow(J1);

title('全局阈值去噪图像');

J2=medfilt2(J1);

subplot(2,2,4);imshow(J2);

title('第二次去噪图像');

PS:在MATLAB图像处理工具箱中,提供了medfilt2函数用于实现中值滤波。 Medfilt2函数的语法格式为:

B = medfilt2(A) 用3×3的滤波窗口对图像A进行中值滤波。

B = medfilt2(A,[m n]) 用指定大小为m×n的窗口对图像A进行中值滤波。 效果如图6:

MATLAB小波处理的问题

悬赏分:10 - 解决时间:2008-11-12 02:53

想请问 我知道MATLAB里有小波的工具箱可以用

当我一张图像用小波转换时 我知道可以得到 LL LH HL HH

四张合在一起的图像 请问MATLAB要怎么写??

还有如果我只要 LL 或 HH 单独一张图像就好

请问MATLAB要怎么写??

请各位高手帮帮忙!!

提问者: cool77700 - 一级

最佳答案

第一步:信号分解

调用格式:[C,L]=wavedec(X,N,’wname’

提取多尺度小波变换的低频系数

A=appcoef(C,L,’db1’)

提取多尺度小波变换的高频系数:

D=detcoef(C,L,N);

第二步:信号重构

X=waverec[C,L,‘wname ’]

1)小波分解结构的低频重构

函数:A3=wrcoef(' type',C,L,'wname',N)

2)小波分解结构的高频重构

函数:D=wrcoef('d',C,L,'db1',3)。

第三步:画出分解后的图形,四合一图像,就是你想要的效果, 所用函数:

subplot(4,1,1);plot(A3);title( 'A3');

subplot(4,1,2);plot(D3);title( 'D3');

subplot(4,1,3);plot(D2);title( 'D2');

subplot(4,1,4);plot(D1);title( 'D1');

如果只要 LL 或 HH 单独一张图像就好, 下面是举例子的 figure(1);plot(LL )

figure(2);plot(HH)

基于小波的图像压缩理论

2008-01-09 16:20

1基于小波的图像压缩理论

小波是近十几年才发展起来并迅速应用到图像处理和语音分析等众多领域的一种数

学工具,是继110多年前的傅立叶(Joseph Fourier)分析之后的一个重大突破,它对

无论是古老的自然学科还是新兴的高新技术应用学科均产生了强烈冲击。1909年哈尔发

现了小波,并被命名为哈尔小波。20世纪70年代,当时在法国石油公司工作的年轻的地

球物理学家Jean Morlet提出了小波变换的概念。法国的科学家Meyer于1986年创造性

地构造出具有一定衰减性的光滑函数,他构造了L2(R)空间的规范正交基,使小波得到真

正的发展。在信号处理中,自从S.Mallat和Inrid Daubechies 发现滤波器组与小波基

函数有密切关系之后,小波在信号(如声音信号,图像信号等)处理中得到极其广泛的

应用。

利用小波变换对图像数据进行压缩的理论过程主要分为以下几两个步骤:

①利用二维离散小波变换对图像分解为低频分量即高频细节分量;

②对所得到的低频分量即高频细节分量,根据人类的视觉生理特性分别作不同策略的量化与编码处理。例如,对于低频分量采用快速余弦变换,熵编码方法进行压缩。对于高频细节分量可以采用量化,去掉人眼不敏感的高频成分并结合熵编码方法的压缩方法。

3 图像压缩方法

在实际应用中,首先需要从图像文件中读取图像数据。MATLAB使用imread()函数完这一任务。例如,在电脑D盘中有一彩色图像文件lena.jpg,则可由下述语句读取:

X =imread('D:\ lena.bmp');

MATLAB图像处理工具箱支持四种基本图像类型:索引图像、灰度图像、二进制图像和RGB图像。MATLAB直接从图像文件中读取的图像为RGB图像。它存储在三维数组中。这个三维数组有三个面,依次对应于红(Red)、绿(Green)、蓝(Blue)三种颜色,而面中的数据则分别是这三种颜色的强度值,面中的元素对应于图像中的像素点。

索引图像数据包括图像矩阵X与颜色图数组map,其中颜色图map是按图像中颜色值进行排序后的数组。对于每个像素,图像矩阵X包含一个值,这个值就是颜色图数组map中的索引。颜色图map为m×3双精度矩阵,各行分别指定红、绿、蓝(R、G、B)单色

值,map=[RGB],R、G、B为值域为[0,1]的实数值,m为索引图像包含的像素个数。然后可根据情况采用不同的小波函数,进行索引图像的分解压缩。我们这里对上面产生的索引图像X用db1小波进行2层分解。

[c,l]=wavedec2(X,2,′db1′);

在这里,一个索引图像作小波分解后,可得到一系列不同分辨率的子图像,不同分辨率的子图像对应的频率是不相同的。高分辨率(即高频细节)子图像上大部分点的数值接近于0,越是高频这种现象越明显。对一个图像来说,表现一个图像最主要的部分是低频(即近似)部分。

多层小波分解的所有成分系数均保存在向量c中,低频近似与高频细节的系数需从向量c中提取。MATLAB分别使用appcoef2()和detcoef2()函数来完成这一工作。我们这种方法是对低频和高频部分进行处理,因而提取低频和高频近似系数。

cA1=appcoef2(c,l,'db1',1);

cH1=detcoef2('h',c,l,1);

cD1=detcoef2('d',c,l,1);

cV1=detcoef2('v',c,l,1);

MATLAB中重构系数用wrcoef2()函数来完成这一工作。这样就可以重构低频和高频近似系数。

A1=wrcoef2('a',c,l,'db1',1);

H1=wrcoef2('h',c,l,'db1',1);

D1=wrcoef2('d',c,l,'db1',1);

V1=wrcoef2('v',c,l,'db1',1); c1=[A1 H1;V1 D1]; 以下是对图像进行压缩:保留第一层低频信息并对其进行量化编码。MATLAB中用wcodemat()函数来完成这一过程。 ca1=wcodemat(cA1,440,'mat',0);

ca1=0.5*ca1;

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
matlab数字图像去噪是使用matlab编程语言进行数字图像噪声消除的过程。在图像的采集、传输或存储过程中,可能会引入各种噪声,如高斯噪声、椒盐噪声等,这些噪声会降低图像的质量和信息的可用性。因此,去除这些噪声数字图像处理中重要的一步。 首先,我们需要了解图像的噪声类型和噪声强度。然后,我们可以使用matlab中的专门去噪函数来降低图像的噪声。例如,可以使用imnoise函数在图像中添加噪声,并使用imfilter函数对图像进行滤波操作,以去除噪声。 另一种常用的去噪方法是基于小波变换的去噪法。matlab提供了多种小波变换函数,如dwt和idwt等。可以使用这些函数将噪声图像进行小波分解,然后通过对小波系数进行阈值处理来去除噪声,最后再进行小波重构,得到去噪后的图像。 除了以上方法外,还可以使用其他图像处理算法进行去噪,如中值滤波、均值滤波等。matlab提供了相关的函数,如medfilt2和ordfilt2等。 在选择合适的去噪方法时,需要根据具体问题和数据进行调整和优化。对于不同的图像和噪声类型,可能需要尝试多种去噪方法,以获得更好的效果。此外,还可以使用matlab的图像显示和对比功能,对比去噪前后图像的差异,以评估去噪效果的好坏。 总之,matlab数字图像去噪是通过调用相关的图像处理函数对数字图像进行去噪的过程。通过对图像中的噪声进行分析和处理,可以提高图像质量和信息的可用性,使得图像更加清晰和易于分析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值