clear allclc
A=imread('d:/photo/fabric/cd4 - 复制.bmp')
subplot(121),imshow(A)title('original imge')
[m,n]=size(A)
A=double(A)
%选取分解小波
display('选择分解的饥前小波:')
display('enter 1 for haar wavelet')
display('enter 2 for db2 wavelet')
display('enter 3 for db4 wavelet'告扒)
display('enter 4 for sym wavelet')
display('enter 5 for sym wavelet')
display('enter 6 for bior wavelet')
display('enter 7 for bior wavelet')
display('enter 8 for mexh wavelet')
display('enter 9 for coif wavelet')
display('enter 10 for meyr wavelet')
display('enter 11 for morl wavelet')
display('enter 12 for rbio wavelet')
display('press any key to quit')
ww=input('enter your choice:')
switch ww
case 1
wv='haar'
case 2
wv='db2'
case 3
wv='db4'
case 4
wv='sym2'
case 5
wv='sym4'
case 6
wv='bior1.1'
case 7
wv='bior6.8'
case 8
wv='mexh'
case 9
wv='coif5'
case 10
wv='dmey'
case 11
wv='mor1'
case 12
wv='jpeg9.7'
otherwise
quit
end
%选取分解的层数
display('选择分解层数:')
levels=input('enter 1 or 2 :')
filtertype=wv
[C,S]=wavedec2(A,levels,filtertype)%小波分解
var=length(C)-S(size(S,1)-1,1)^2+1
%{
%第一中去噪方法:用此种方法时,效果与选取分解的层数没有关系,只与选取的小波有关系
C(var:length(C))=0%将对角线的高频系数置零
B=waverec2(C,S,filtertype)%重构图像
%}
%{
%第二种去噪方法:贝叶斯阈值去噪,对各个高频系数进行贝叶斯阈值去噪
display('选择软阈值或者硬阈值:')
display('enter 1 for soft thresholding')
display('enter 2 for hard thresholding')
sorh=input('sorh: ')
sigmahat=median(abs(C(var:length(C))))/0.6745%Calculating sigmahat
st=(S(1,1)^2)+1%低频系数的个数
bayesC=[C(1:st-1),zeros(1,length(st:1:length(C)))]%只是保留低频信息
for jj=2:size(S,1)-1 %行数
%对于水平高频系数
coeh=C(st:st+S(jj,1)^2-1)
thr=bayes(coeh,sigmahat)
if sorh==1
bayesC(st:st+S(jj,1)^2-1)=sthresh(coeh,thr)
end
if sorh==2
bayesC(st:st+S(jj,1)^2-1)=hthresh(coeh,thr)
end
st=st+S(jj,1)^2
%对于垂直高频系数
coev=C(st:st+S(jj,1)^2-1)
thr=bayes(coev,sigmahat)
if sorh==1
bayesC(st:st+S(jj,1)^2-1)=sthresh(coev,thr)
end
if sorh==2
bayesC(st:st+S(jj,1)^2-1)=hthresh(coev,thr)
end
st=st+S(jj,1)^2
%对于对角高频系数
coed=C(st:st+S(jj,1)^2-1)
thr=bayes(coed,sigmahat)
if sorh==1
bayesC(st:st+S(jj,1)^2-1)=sthresh(coed,thr)
end
if sorh==2
bayesC(st:st+S(jj,1)^2-1)=hthresh(coed,thr)
end
st=st+S(jj,1)^2
end
B=waverec2(bayesC,S,filtertype)%重构图像
%}
%{
%第三种方法:采用Donoho和Johnstone提出的固定阈值的方法进行去噪处理
display('选择软阈值或者硬阈值:')
display('enter 1 for soft thresholding')
display('enter 2 for hard thresholding')
sorh=input('sorh: ')
st=(S(1,1)^2)+1%低频系数的个数
djC=[C(1:st-1),zeros(1,length(st:1:length(C)))]%只是保留低频信息
for jj=2:size(S,1)-1 %行数
%对于水平高频系数
coeh=C(st:st+S(jj,1)^2-1)
sigmah=median(abs(coeh))/0.6745
thr=sigmah*sqrt(2*log10(length(coeh)))
if sorh==1
djC(st:st+S(jj,1)^2-1)=sthresh(coeh,thr)
end
if sorh==2
djC(st:st+S(jj,1)^2-1)=hthresh(coeh,thr)
end
st=st+S(jj,1)^2
%对于垂直高频系数
coev=C(st:st+S(jj,1)^2-1)
sigmav=median(abs(coev))/0.6745
thr=sigmav*sqrt(2*log10(length(coev)))
if sorh==1
djC(st:st+S(jj,1)^2-1)=sthresh(coev,thr)
end
if sorh==2
djC(st:st+S(jj,1)^2-1)=hthresh(coev,thr)
end
st=st+S(jj,1)^2
%对于对角高频系数
coed=C(st:st+S(jj,1)^2-1)
sigmad=median(abs(coed))/0.6745
thr=sigmav*sqrt(2*log10(length(coed)))
if sorh==1
djC(st:st+S(jj,1)^2-1)=sthresh(coed,thr)
end
if sorh==2
djC(st:st+S(jj,1)^2-1)=hthresh(coed,thr)
end
st=st+S(jj,1)^2
end
B=waverec2(djC,S,filtertype)%重构图像
%}
subplot(122),imshow(uint8(B))title('de-noised image')
%imwrite(B,'fab5.bmp')%保存图像在m文件的路径中
%计算信噪比
t=0
for i=1:m
for j=1:n
t=t+(abs(B(i,j)-A(i,j)))^2
end
end
mse=t/(m*n)%图像均方误差
psnr=10*log10((255^2)/mse)%峰值信噪比
display('mse:')
mse
display('psnr:')
psnr
给你两个程序语句,你试试吧D=detcoef2O,C,S,N)实现提取小波分解高频系数
[C,S]是信号的二维小波分解结构,尺度N必须为正整数且1<=N<=size(S,1)-2, O取值为'v'(h或d),当O为'h‘表示提取水平方向细数,为v时表垂直方向 为d时提取斜线方向。
A=appcoef2(C,S,'wname',N)用于提取二维小波分解的低频系数。N为尺度同上,希望对你有所帮助
小波分析后,你也没处理,组合起来依然是原信号啊。方差不会变的。你用连续小波变换,得到了1:43尺度下的小波基系数组z(i)。
如果你指的是在一定分纤迅辨率下,该信号在某个尺度上投射的分量的方差。
就用z(i)乘以这个小波φ(τ,σ)基。在用昌帆STD求方差呗。
另外毁迅此,站长团上有产品团购,便宜有保证
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)