编写用均值滤波去噪的matlab程序,用两种方法实现.(重谢)

编写用均值滤波去噪的matlab程序,用两种方法实现.(重谢),第1张

方法一:filter2

clear all

I=imread('lena.bmp')

%读入预处理图像

imshow(I)

%显示预处理图像

K1=filter2(fspecial('神悉average',3),I)/255

%进行3*3均值滤波

K2=filter2(fspecial('average',5),I)/255

%进行5*5均正瞎春值滤波

K3=filter2(fspecial('average',7),I)/255

%进行7*7均值滤波

figure,imshow(K1)

figure,imshow(K2)

figure,imshow(K3)

方法二:双循环举耐语句,移动平均法

%均值滤波

clc,clear

f=imread('lena.bmp')

subplot(121),imshow(f),title('原图')

f1=imnoise(f,'gaussian',0.002,0.0008)

%subplot(222),imshow(f1),title('添加高斯噪声图')

k1=floor(3/2)+1

k2=floor(3/2)+1

X=f1

[M,N]=size(X)

uint8 Y=zeros(M,N)

funBox=zeros(3,3)

for i=1:M-3

for j=1:N-3

funBox=X(i:i+3,j:j+3)

s=sum(funBox(:))

h=s/9

Y(i+k1,j+k2)=h

end

end

Y=Y/255

subplot(122),imshow(Y),title('均值滤波')

实现图:

哈哈!傻眼了吧,理论和实际不可兼得啊!对于你这个问题有如下建议:

小波去噪的试验,十个有九个都喜欢用正、余弦函数,但由于小波函数的几何特征,其实不易得到满意效果,你只能选择线性强的小波基,即对称性强并且光滑的小波,嘿嘿,貌似能做DWT的所有小波基中只有sym8的对称性最强(参看http://zhidao.baidu.com/question/585223273699457565.html?from=pubpage&msgtype=2),这样你将会得到其降噪效果好于其它小波基的谬论,实际应用中如果原始信号本身特征就不规律对称则有可能其它小波基的处理效果会好于sym8,这需要试错的方法试验,是你这个原始信号对称的前提假设造成的,但不可认为sym8适合你这个特首兄世殊例子就得出结论,你这试验只适合你的假设,其实并不适合所有情形,个人认为其实不具说服力和可比性。如同我家钥匙开不了你家门,是不能得出我家钥匙不如你家钥匙的结论滴。

当你的噪声特征与信号的特征的频率相近时,小波也无能为力,它不是神,也一样分不出啥尘咐是噪声,所以其一是可增加分解层数,你这个信号只有100个数,5层已经很高了,再增大也没啥用了,可能会过多显示小波基的特征,造成扭曲失真(如果用SWT会好很者肢多,但需要自己编制函数);其二是参数SCAL可以改为伸缩的sln,而不是固定的one,这样分解层数和SCAL都将起作用,你可以试着改改玩,效果还行。

分解5层

分解8层

你可以试试只分解一层的状况,频率最低的几处噪声会保留下来哦!

去噪有很多种方法,现在小波去噪最为常用,在matlab中有自带的函数进行小波去噪,简单易行。最常用且简单的是阈值去噪,用函数ddencmp()生成信号的默认阈值,然后利用函数wdencmp()进行去噪。如掘绝:陆袭

%对含噪信号s进行3层小波分解

[c,l]=wavedec(s,3,'db1')%s为含噪信号,3为小波分解层数,db1为采用的小波基

%获取信号默认值

[thr,sorh,keepapp]=ddencmp('den','wv',s)

%参数den代表去噪,wv代表小波,s代表含有噪声的信号

%实现去噪判悉姿过程

s2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp)

%参数gbl表示采用全局去噪


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12550225.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存