最小二乘解包裹matlab代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码来源于《信息光学数字实验室matlab版》

I4=imread('cell21.bmp');I4=double(I4(7:518,10:521,1));  %读取第一幅像面全息图
I3=imread('cell22.bmp');I3=double(I3(7:518,10:521,1));  %读取第二幅像面全息图
I2=imread('cell23.bmp');I2=double(I2(7:518,10:521,1));  %读取第三幅像面全息图
I1=imread('cell24.bmp');I1=double(I1(7:518,10:521,1));  %读取第四幅像面全息图
I1=medfilt2(I1,[3,3]);                            %用中值滤波对全息图降噪
I2=medfilt2(I2,[3,3]);                            %用中值滤波对全息图降噪
I3=medfilt2(I3,[3,3]);                            %用中值滤波对全息图降噪
I4=medfilt2(I4,[3,3]);                            %用中值滤波对全息图降噪
C1=I4-I2;                                         %全息图相减
C2=I1-I3;                                         %全息图相减
ph=atan(C1./(C2+eps));                            %计算包裹相位
figure;imshow(ph,[]);title('包裹相位图');         %显示重建相位
a=ph;                                             %将包裹相位ph赋值给a
%下面开始进行最小二乘解包裹运算
[M,N]=size(a);                                    %计算二维包裹相位的大小(行、列数)
dx=zeros(M,N);dy=zeros(M,N);                      %预设包裹相位沿x方向和y方向的梯度
m=1:M-1; 
dx(m,:)=a(m+1,:)-a(m,:);                          %计算包裹相位沿x方向的梯度
dx=dx-pi*round(dx/pi);                            %去除梯度中的跳跃
n=1:N-1;
dy(:,n)=a(:,n+1)-a(:,n);                          %计算包裹相位沿y方向的梯度
dy=dy-pi*round(dy/pi);                            %去除梯度中的跳跃
p=zeros(M,N);p1=zeros(M,N);p2=zeros(M,N); %为计算ρnm作准备
m=2:M;
p1(m,:)=dx(m,:)-dx(m-1,:);                        %计算Δgxnm-Δgx(n-1)m
n=2:N;
p2(:,n)=dy(:,n)-dy(:,n-1);                        %计算Δgynm–Δgyn(m-1)
p=p1+p2;                                          %计算ρnm
p(1,1)=dx(1,1)+dy(1,1);                           %计算ρnm
n=2:N;
p(1,n)=dx(1,n)+dy(1,n)-dy(1,n-1);                 %赋值Neumann边界条件
m=2:M;
p(m,1)=dx(m,1)-dx(m-1,1)+dy(m,1);
pp=dct2(p)+eps;                                   %计算ρnm的DCT
fi=zeros(M,N);
for m=1:M                                         %计算Φnm在DCT域的精确解
   for n=1:N  
      fi(m,n)=pp(m,n)/(2*cos(pi*(m-1)/M)+2*cos(pi*(n-1)/N)-4+eps);
   end
end
fi(1,1)=pp(1,1);                                  %赋值DCT域的Φ11
phs=idct2(fi);                                    %用iDCT计算解包裹相位在空域中的值
figure,surfl(phs),shading interp,colormap(gray)   %显示解包裹相位
%为检验解包裹效果,对解包裹相位作再包裹运算
U=exp(j.*phs);                                    %用解包裹相位构建光场
rewrap_ph=atan(imag(U)./real(U));                 %作再包裹运算
figure,imshow(rewrap_ph,[])                       %显示再包裹结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值