matlab程序求助
万花筒哈哈 2020-03-27 05:05:54 1. function varargout=unwrap_ one_ d(w_ ph,s _ph, th)
2.%本函数完成一行(或列)包裹相位的解包裹运算
3.%格式un_ ph=unwrap _one_ d(w_ ph,s_ ph,th);
4.%输入的三个变量:w_ ph为包裹相位,s_ ph为起始相位值,而th为域值
5.%若相位值包裹在(-π,π],域值th取π;若相位值包裹在(-π/2,π/2],th取π/2
6.%输出变量un_ph为解包裹相位值
7. numb=length(w_ ph); %计算包裹相位的大小(元素个数)
8. un_ ph=w_ ph; %将包裹相位值赋值给un_ ph——预设解包裹相位
9. un_ ph(1)=s_ ph; %将起点相位赋值给un_ ph 的第一个元素 (不再参加解包裹)
10. for n=2:numb %从第二个元素开始解包裹运算
11.delta=w_ ph(n)-w_ ph(n-1); %相邻两个包裹相位作比较(相减)
12.if (abs (delta)<=th) %差值不大于域值
13.un_ ph(n)=un_ ph(n-1) +delta; %解包裹相位等于前一个解包裹相位值加差值
14.elseif (delta<0) %差值大于域值,且差值为负
15.un_ ph(n)=un_ ph(n-1)+ delta+ 2* th; %前一个包解裹相位值加差值再加2倍域值
16.else %差值大于域值,且差值为正
17.un_ ph(n)=un_ ph(n-1) +delta-2*th; %前一个解包裹相位值加差值再减2倍域值
18. end
19.end
20.varargout{1}=un_ph; %将解包裹相位值赋值给输出变量
-------------------------------------------------上面都是函数,下面是用的程序
ph=peaks(256)*3; %预设原始相位
mu=0.5; %噪声系数
noise=rands(256,256).*mu.*pi; %噪声
ph=ph+noise; %叠加有噪声的预设原始相位
U=exp(j*ph); ph0=angle(U); %对应的包裹相位
[r,c]=size(ph0);
figure,imshow(ph0,[])
unph=ph0; %预设解包裹后的相位
unph(1,:)=unwrap_one_d(ph0(1,:),ph0(1,1),pi);%先完成第一行元素的解包裹运算
for n=1:c
%下面完成第n列元素的解包裹运算,起始相位值为该列第一行上元素的解包裹相位值
unph(:,n)=unwrap_one_d(ph0(:,n),unph(1,n),pi);
end
figure,imshow(unph,[])
有没有懂的运行下看看错误在哪