⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lingxingunwrap2.m

📁 菱形接包裹程序
💻 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 + -