喜欢的话给小编点个关注点个赞呀
在上一篇中,小编讲解了基于MATLAB的相干成像以及基于相干衍射成像的光学加密仿真,今天小编将带大家学习基于非相干成像以及相干衍射成像的光学加密matlab仿真。成像系统模型根据物体照明的相干性有不同的脉冲响应。如果照明是空间相干的,脉冲响应被称为振幅扩散函数(或相干扩散函数),系统的频率响应被称为振幅传递函数(或相干传递函数)。如果照明是空间非相干的,脉冲响应被称为点扩散函数,系统的频率响应被称为光学传递函数(OTF),其幅度被称为调制传递函数(MTF)。需要注意的是,波前像差与照明无关,它们仅取决于成像系统的光学元件。然而,它们对图像的影响却依赖于照明的相干性。
非相干成像原理:
当光是空间非相干时,图像辐照度是物体辐照度与点扩散函数(PSF)的卷积:
点扩散函数(PSF)是振幅扩散函数(ASF)的模平方。图1展示了如何根据成像系统的物体和振幅扩散函数计算非相干图像的例子。
图1:(a)目标物体振幅(b)离焦的点扩散函数(c)0.05波离焦模糊的非相干图像
MATLAB仿真代码:
%t店:博士生牛马赚点小钱
% 非相干成像
clc;close;clear
N = 256; % 网格数
L = 0.1; % 网格长度 [m]
D = 0.07; % 瞳孔直径 [m]
delta = L / N; % 网格间距[m]
wvl = 1e-6; % 波长 [m]
z = 0.25; % 成像距离 [m]
% pupil-plane coordinates
[x, y] = meshgrid((-N/2 : N/2-1)*delta);
[theta, r] = cart2pol(x, y);
%% 计算振幅扩展函数
% 像差
W = 0.05*zernike(4, 2 * r/D, theta);
% 光瞳函数
P = circ(x, y, D) .* exp(1i*2 * pi*W);
% 振幅扩展函数
h = ft2(P, delta);
%% 物体振幅
%物体坐标和h一致(需要傅里叶变换)
delta_u = wvl*z / (N * delta);
[u v] = meshgrid((-N/2 : N/2-1)*delta_u);
% 物体振幅
obj = (rect((u-1.4e-4)/5e-5) + rect(u/5e-5)+ rect((u+1.4e-4)/5e-5)) .* rect(v/2e-4);
%% 相干成像
img = myconv2(abs(obj).^2, abs(h).^2, 1);
figure
subplot(1,3,1)
%物体振幅
imagesc(abs(obj));axis off ;colormap("parula");axis square
subplot(1,3,2)
%振幅扩展函数
imagesc(abs(h));axis off ;colormap("parula");axis square
%成像振幅
subplot(1,3,3)
imagesc(abs(img));axis off ;colormap("parula");axis square
与相干情况类似,卷积定理可以应用于公式1,结果是:
同样,我们可以看到点扩散函数(PSF)的傅里叶谱调制了物体辐照度的频谱,从而产生了衍射图像。在非相干情况下,滤波函数(称为光学传递函数,OTF)定义为:
根据不同的成像系统,我们可以得到不同的光学传递函数,如以直径为D的圆形孔径为例,光学传递函数是关于f=f2x+f2y的方位对称函数,其表达式为:
其中 f0=D/2λzi是相干情况下的截止频率,非相干图像仍然是严格有限带宽的。
如以菲涅尔衍射理论为例,菲涅尔衍射积分表达式为:
则我们可以得到菲涅尔衍射的振幅扩散函数和光学传递函数:
关于菲涅尔衍射的详细matlab仿真将在之后的文章中讲解。
基于非相干光的图像加密与解密
在上一篇展示的相干衍射成像光学加密过程中,我们只简单的利用傅里叶变换进行了加密,小编在这里将展示如何利用随机相位调制对图像进行加密和解密。
光学图像加密的过程就是通过加入随机相位板对光场传播过程进行扰动,改变了系统的点扩散函数的形式,进而改变输出光场的强度分布,实现信息隐藏。通俗来讲就是在传播路径中加入随机相位调制从而改变点扩散函数|h(u,v)|2,实现光学加密。加密过程用卷积形式表示如下:
I0(x0,y0)为我们最终得到的加密图像,Ip(x0,y0)为点扩散函数,可以通过输入平面中的理想点光源加载随机相位调制之后根据相干光菲涅尔衍射理论得到。Ii(xi,yi)则为我们解密要得到的图像,可以从以下公式得到:
图2展示了利用非相干光照明的图像加密与解密的结果。可以看出,图像已经成功恢复。
图2:利用非相干光照明的图像加密与解密的结果
MATLAB仿真代码:
%t店:博士生牛马赚点小钱
% 非相干成像加密
clc;close;clear
N = 320; % 网格数
L = 0.1; % 网格长度 [m]
D = 0.01; % 瞳孔直径 [m]
delta = L / N; % 网格间距[m]
wvl = 1e-6; % 波长 [m]
z = 0.25; % 成像距离 [m]
% pupil-plane coordinates
[x, y] = meshgrid((-N/2 : N/2-1)*delta);
[theta, r] = cart2pol(x, y);
phase=rand(N);
%% 获取密钥(加载随机相位屏的点扩散函数)
%在输入平面中心放置一个理想的点光源,并受到随机相位调制
u1=circ(x, y, D) .* exp(1i*2 * pi*phase);
%经菲涅尔衍射得到复振幅分布
u2=propIR(u1,L,wvl,z);
%计算强度得到点扩散函数
PSF=u2.*conj(u2);
%% 目标图像加密
%物体坐标和h一致(需要傅里叶变换)
delta_u = wvl*z / (N * delta);
%加密图像
obj=imread("cat.jpg");
obj=double(rgb2gray(obj));%做灰度处理,转为double类型便于计算
%接收到加密后的图像
img=myconv2(obj.^2,PSF,delta_u);
%% 对图像解密
img2=ift2((ft2(img,delta_u)./ft2(PSF,delta_u)),delta_u);
%% 画图
figure
subplot(2,2,1)
%目标图像
imagesc(obj);axis off ;axis square
subplot(2,2,2)
%点扩散函数
imagesc(PSF);axis off ;axis square
subplot(2,2,3)
%加密后的图像
imagesc(img);axis off ;axis square
%解密后的图像
subplot(2,2,4)
imagesc(img2);axis off ;colormap("gray");axis square
有任何问题可以评论区留言哦
喜欢的话给小编点个关注点个赞呀
更多完整代码见公众号光学小太阳或进t店博士生牛马赚点小钱
标签:加密,函数,图像,MATLAB,delta,相干,axis From: https://blog.csdn.net/sunflower6289/article/details/144161755