菲涅耳计算全息图原代码

 
7.2k 3
发表于 2008-6-1 13:01:48|江苏 | 查看全部 阅读模式
这是本人勉强做出来的菲涅耳全息图,请各位大虾帮忙看看,有没出错的地方。
本人还要做一个傅立叶全息图,但matlab用不熟练,实在是搞不出来了,请好心人看看能否帮个忙。

%菲涅耳积分傅立叶变换方法
function[f1,dx1,dy1,x1,y1]=fresnell(f0,M,N,dx0,dy0,z,lambda)
k=2*pi/lambda;
x0=ones(N,1)*[-M/2:M/2-1]*dx0;y0=[-N/2:N/2-1]'*ones(1,M)*dy0;
g=f0.*exp(j*0.5*k*(x0.^2+y0.^2)/z);
G=fftshift(fft2(fftshift(g)));
du=1./(M*dx0);dv=1./(N*dy0);
dx1=lambda*z*du;dy1=lambda*z*dv;
x1=ones(N,1)*[-M/2:M/2-1]*dx1;y1=[-N/2:N/2-1]'*ones(1,M)*dy1;
f1=G.*exp(i*0.5*k*(x1.^2+y1.^2)/z);
f1=f1./(i*lambda*z);


%菲涅耳全息图的生成与再现
clear;clc;
%读取图像
px=imread('1.jpg');
p1=rgb2gray(px);
figure;imshow(p1,[0 255]);
p1=im2double(p1);
%…………………………………………………………
picturesiz=size(p1);
N=picturesiz(1);
M=picturesiz(2);
cm=0.001;um=1e-6;
hx=100*cm;hy=100*cm;
dhx=hx/M;dhy=hy/N;
x=dhx.*(ones(N,1)*[-M/2:M/2-1]);
y=(dhy.*(ones(M,1)*[-N/2:N/2-1]))';
z=0.00002;
w=0.63*um;
k=2*pi/w;
[f,dx1,dy1,x1,y1]=fresnell(p1,M,N,dhx,dhy,z,w);
sit=pi/6;
ur=exp(-j*k*y*sin(sit));
f1=f+ur;
f1=mat2gray(f1);
figure;imshow(f1);
rp1=f1.*conj(ur);
[f2,dx2,dy2,x2,y2]=fresnell(rp1,M,N,dx1,dy1,z,w);
f2=abs(f2).^2;
f2=mat2gray(f2);
figure;imshow(f2);

回复|共 3 个

mailmasker Lv.6 发表于 2009-3-30 22:12:27|重庆 | 查看全部
兄弟,你这是抄来的吧
yiheyou Lv.8 发表于 2009-4-1 15:32:03|四川 | 查看全部
我仿佛也见过这个程序
qinqintut Lv.5 发表于 2010-11-11 11:59:59|辽宁 | 查看全部
见过此程序,有错误

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

投诉/建议联系

admin@discuz.vip

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 关注公众号
  • 添加微信客服
Copyright © 2026 光电工程师社区 版权所有 All Rights Reserved. Powered by Discuz! X5.0 Licensed 鄂ICP备17021725号-1
关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表