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,[])
有沒有懂的運行下看看錯誤在哪
uj5u.com熱心網友回復:
18、19行是不是少一個end,U=exp(j*ph); ph0=angle(U); 中j變數并沒有啊。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/46269.html
標籤:新技術前沿
上一篇:2017版還原資料庫打不開資料庫路徑,點擊“…”時卡死
下一篇:SQL
