白光干涉三维形貌恢复算法

这可能是白光干涉领域目前全网唯一的开源代码,废话不多说,直接上。质心法、相移法等较为简单的就不附上来了。

傅里叶变换法

这里展示的是通过重心法的方式来取包络峰值,也可以采取拟合的方法提取包络峰值


%傅里叶变换法
clear all;clc;
st=0;
en=116; %干涉图片总张数
tic;
disp('Step1 Starting...')
steplength=72;%扫描步长,单位nm
for ii=1:(en-st)
    n=st+ii;
    file=['F:\WLI\pics\test\1\',num2str(n) '.bmp'];%读取干涉图路径
    I=im2double(im2gray(imread(file)));
    [e,r]=size(I); 
    for jj=1:e
        for k=1:r
            I2(jj,k,ii)=I(jj,k); %方便接下来的循环处理
        end
    end
end

I2=double(I2);
disp('Step2 Starting...');
h=zeros(e,r);
t=1:en;

parfor jj=1:e
    for k=1:r
        y=zeros(1,en);
        max1=double(0),min1=double(0),sum=double(0);   
        for ii=1:en
            y(ii)=I2(jj,k,ii);
        end
        y1=fftshift(fft(y)); %傅里叶变化+频移
        y1(1:length(y1)/2+1)=0;%移除零频率和负频
        res=abs(ifft(y1)); %傅里叶逆变换取包络
        temp1=double(0),temp2=double(0);  %重心法提取包络峰值,也可以用曲线拟合包络
        for ii=1:length(res)
             mm=res(ii)^2;
             temp1=temp1+mm*ii;   
             temp2=temp2+mm; 
        end
        h(jj,k)=steplength*temp1/temp2; %扫描步长为72nm
    end
end

toc;


figure(1);surf(h);xlabel('Pixels');shading interp;colormap('default');toc;


                

空间频域分析法(FDA)

 de Groot提出的算法

%%FDA算法
clear all;close all;clc;
st=0;
en=116; %干涉图片张数
steplength=0.07;%扫描波长 单位微米
l=0.56 %中心波长 单位微米

tic;
disp('Step1 Starting...')
    for ii=1:(en-st)
        n=st+ii;
       file=['F:\WLI\pics\test\1\',num2str(n) '.bmp'];
        I=im2double(im2gray(imread(file)));
        [e,r]=size(I); 
        for jj=1:e
            for k=1:r
                I2(jj,k,ii)=I(jj,k); %方便接下来的循环处理
            end
        end   
        
    end

    I2=double(I2);
    disp('Step2 Starting...');
    h=zeros(e,r);

    t=1:en;
    parfor jj=1:e
        for k=1:r
            y=zeros(1,en);
            N=en;
            for ii=1:en
                y(ii)=I2(jj,k,ii);
            end
            y1=fftshift(fft(y)); %傅里叶变换+频移
            y2=y1(N/2+2:N);     %取正频分量

            fs=4*(steplength/l)*pi/steplength; 

            N=length(y2);
            t=fs*(1:N)/N;
                fhi=unwrap(angle(y2)); %求出相位并解包裹
                x=round(2*pi*N/(l*fs)); %找到中心波长对应包络的峰值位置
                xx=[t(x-3) t(x-2) t(x-1) t(x) t(x+1) t(x+2) t(x+3)]
                yy=[fhi(x-3) fhi(x-2) fhi(x-1) fhi(x) fhi(x+1) fhi(x+2) fhi(x+3)];
                f=polyfit(xx,yy,1); %线性拟合
                hc=(f(1)/2);
                h(jj,k)=1000*(hc);

        end
    end
    disp('Step3 Starting...');


 figure(1);surf(h);xlabel('X(pixel)');ylabel('Y(pixel)');zlabel('高度(nm)','FontSize',12);
 shading interp;colormap('default');toc;      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值