matlab复色光夫琅禾费衍射

%%
%多光谱夫琅禾费衍射
%j经过验证只要按照三维矩阵方式计算出了RGB的分量就能正常显示RGB图像
lamr=650e-9;
lamg=520e-9;
lamb=450e-9;
f=0.3;
%定义波长以及透镜长度
xmax=0.025e-4;
ymax=0.025e-4;
sinix=0;
siniy=0;
%定义矩形孔尺寸以及x,y轴偏移量
cx=0.3;
cy=0.3;
%观察屏尺寸
N=10e2;
x=linspace(-xmax,xmax,N);
y=linspace(-ymax,ymax,N);
%如果采用积分法需要使用的光源坐标坐标
x1=linspace(-cx,cx,N);
y1=linspace(-cy,cy,N);
%观察屏坐标
numx=length(x);
numy=length(y);
I=zeros(numx,numy,3);
%定义三色矩阵
tic

for t=1:numx
    for tt=1:numy
        alphar=pi*2*xmax/lamr*(x1(t)/f-sinix);
        alphag=pi*2*xmax/lamg*(x1(t)/f-sinix);
        alphab=pi*2*xmax/lamb*(x1(t)/f-sinix);
        betar=pi*2*xmax/lamr*(x1(tt)/f-siniy);
        betag=pi*2*xmax/lamg*(x1(tt)/f-siniy);
        betab=pi*2*xmax/lamb*(x1(tt)/f-siniy);
        I(t,tt,1)=(sin(alphar)/alphar)^2*(sin(betar)/betar)^2;
        I(t,tt,2)=(sin(alphag)/alphag)^2*(sin(betag)/betag)^2;
        I(t,tt,3)=(sin(alphab)/alphab)^2*(sin(betab)/betab)^2;
    end
end
    
    
    I=I/max(max(max(I)));
    toc
    imshow(255*I)
    %最后这一步最重要,因为有了他图像才得到拉伸,在外面乘是不行的,还就得
    %在表达式里,否则图像是糊的

最大的一坑就是不知道这个图像拉伸需要乘255,搞了半天以为自己有问题
留此纪念
最后上一点图
matlab复色光夫琅禾费衍射_第1张图片

matlab复色光夫琅禾费衍射_第2张图片
matlab复色光夫琅禾费衍射_第3张图片

你可能感兴趣的:(matlab复色光夫琅禾费衍射)