📄 lingxingunwrap2.m
字号:
function UnwrappedFase=LingXingUnwrap2(CutFase,Mask,StartPointX,StartPointY)
%用菱形算法展开截断位相
%CuFase为待展开的截断位相,Mask为展开模板,可展开点为1,不可展开点(极点,位相不可靠点)设为0,这些点位相展开后用插值迭代解决
%展开后点的模板值为2
%StartPointX,StartPointY为展开起始点的横纵坐标
% Mask=medfilt2(Mask,[3,3]);
[row,column]=size(CutFase);
MaxCount=0;
for i=1:row
for j=1:column
if(Mask(i,j)==1)
MaxCount=MaxCount+1;
end
end
end
%找出可展开点数目
ArrayX=zeros(1,MaxCount);
ArrayY=zeros(1,MaxCount);
%展开对列
count=1;
ArrayX(1,count)=StartPointX;
ArrayY(1,count)=StartPointY;
CenterCount=1;
Mask(StartPointX,StartPointY)=2;
UnwrappedFase=zeros(row,column);
UnwrappedFase(StartPointX,StartPointY)=CutFase(StartPointX,StartPointY);
while count<MaxCount
% StartPointX
% StartPointY
if Mask(max(StartPointX-1,1),StartPointY)==1
count=count+1;
ArrayX(1,count)=max(StartPointX-1,1);
ArrayY(1,count)=StartPointY;
UnwrappedFase(max(StartPointX-1,1),StartPointY)=UnwrappedFase(StartPointX,StartPointY)+mod(CutFase(max(StartPointX-1,1),StartPointY)-UnwrappedFase(StartPointX,StartPointY)+pi,2*pi)-pi;
Mask(max(StartPointX-1,1),StartPointY)=2;
end
if Mask(StartPointX,max(StartPointY-1,1))==1
count=count+1;
ArrayX(1,count)=StartPointX;
ArrayY(1,count)=max(StartPointY-1,1);
UnwrappedFase(StartPointX,max(StartPointY-1,1))=UnwrappedFase(StartPointX,StartPointY)+mod(CutFase(StartPointX,max(StartPointY-1,1))-UnwrappedFase(StartPointX,StartPointY)+pi,2*pi)-pi;
Mask(StartPointX,max(StartPointY-1,1))=2;
end
if Mask(min(StartPointX+1,row),StartPointY)==1
count=count+1;
ArrayX(1,count)=min(StartPointX+1,row);
ArrayY(1,count)=StartPointY;
UnwrappedFase(min(StartPointX+1,row),StartPointY)=UnwrappedFase(StartPointX,StartPointY)+mod(CutFase(min(StartPointX+1,row),StartPointY)-UnwrappedFase(StartPointX,StartPointY)+pi,2*pi)-pi;
Mask(min(StartPointX+1,row),StartPointY)=2;
end
if Mask(StartPointX,min(StartPointY+1,column))==1
count=count+1;
ArrayX(1,count)=StartPointX;
ArrayY(1,count)=min(StartPointY+1,column);
UnwrappedFase(StartPointX,min(StartPointY+1,column))=UnwrappedFase(StartPointX,StartPointY)+mod(CutFase(StartPointX,min(StartPointY+1,column))-UnwrappedFase(StartPointX,StartPointY)+pi,2*pi)-pi;
Mask(StartPointX,min(StartPointY+1,column))=2;
end
CenterCount=CenterCount+1;
StartPointX=ArrayX(1,CenterCount);
StartPointY=ArrayY(1,CenterCount);
if StartPointX==0|StartPointY==0
break;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -