登录论坛

查看完整版本 : [MATLAB毕业设计] 小波变换图像去噪 程序调试问题


naonao
2013-05-26, 18:46
错误:
??? C(1,num(4-i,1):num(4-i,3)+step(4-i-1)=ch(1,1:ch1);
|
Error: The expression to the left of the equals sign is not a valid target for an assignment.

程序:clear all;
close all;
I=imread('C:\MATLAB7\tupian.jpg')
X=rgb2gray(I);
[height width]=size(X);
X=im2double(X);
A=imnoise(X,'gaussian',0,0.02);
wname='sym4';
n=3;
[c,s]=wavedec2(A,n,wname);

for i=1:3
step(i)=s((i+1),1)*s((i+1),2);
end
num(1,1)=s(1,1)*s(1,2)+1; %获取各层各高频分量在c向量中的坐标
num(1,2)=num(1,1)+s(2,1)*s(2,2);
num(1,3)=num(1,2)+s(2,1)*s(2,2);

num(2,1)=num(1,3)+s(2,1)*s(2,2);
num(2,2)=num(2,1)+s(3,1)*s(3,2);
num(2,3)=num(2,2)+s(3,1)*s(3,2);

num(3,1)=num(2,3)+s(3,1)*s(3,2);
num(3,2)=num(3,1)+s(4,1)*s(4,2);
num(3,3)=num(3,2)+s(4,1)*s(4,2);

m=0.02;
C=c;
for i=1:3
[H,V,D]=detcoef2('a',c,s,i); %提取各i层高频系数
B=[H,V,D];
[L,T]=size(B);
for k=1:L
for w=i:T
sigma=median(abs(B(k,w)))/0.6745;
end
end
th=sigma*sqrt(2*log10(L*t)); %计算阈值
ch=c(1,num(4-i,1):num(4-i,3)+step(4-i)-1); %对各高频系数进行阈值处理
ch1=length(ch);
for j=1:ch1
if abs(ch(j))>=th
ch(j)=ch(j); %阈值处理函数
else
ch(j)=0;
end
end
C(1,num(4-i,1):num(4-i,3)+step(4-i)-1)=ch(1,1:ch1);
X0=waverec2(C,s,wname);
for j=1:ch1
if abs(ch(j))*(abs(ch(j))-th); %阈值处理函数
else
ch(j)=0;
end
end
C(1,num(4-i,1):num(4-i,3)+step(4-i)-1)=ch(1,1:ch1);
X1=waverec2(C,s,wname);
for j=1:ch1
if abs(ch(j))>=th
ch(j)=sign(ch(j))*(abs(ch(j))-th/exp(m*(abs(ch(j))-th)^2)); %阈值处理函数
else
ch(j)=0;
end
end
C(1,num(4-i,1):num(4-i,3)+step(4-i-1)=ch(1,1:ch1);
end
X2=waverec2(C,s,wname);

%disp('原图像信噪比为:'),
PSNR=10*log10(sum(sum(double(X).^2))/sum(sum((double(X)-double(A)).^2)))
%disp('硬阈值去噪后信噪比为:'),
PSNR=10*log10(sum(sum(double(X).^2))/sum(sum((double(X)-double(X0)).^2)))
%disp('软阈值去噪后信噪比为:'),
PSNR=10*log10(sum(sum(double(X).^2))/sum(sum((double(X)-double(X1)).^2)))
%disp('新阈值去噪后信噪比为:'),
PSNR=10*log10(sum(sum(double(X).^2))/sum(sum((double(X)-double(X2)).^2)))
figure(1)
imshow(X)
title('原图')
figure(2)
subplot(2,2,1)
imshow(A)
title('含噪声图像')
subplot(2,2,2)
imshow(X0,[])
title('硬阈值去噪结果图')
subplot(2,2,3)
imshow(X1,[])
title('软阈值去噪结果图')
subplot(2,2,4)
imshow(X2,[])
title('新阈值去噪结果图')





各位请帮我看看我的程序哪儿错了,我语言没学好。看不懂。

naonao
2013-05-26, 21:32
我已经改过,并且调出来了