首页 > 其他分享 >基于MATLAB:非相干成像及非相干照明下的光学加密仿真

基于MATLAB:非相干成像及非相干照明下的光学加密仿真

时间:2024-12-01 10:29:09浏览次数:10  
标签:加密 函数 图像 MATLAB delta 相干 axis

喜欢的话给小编点个关注点个赞呀

在上一篇中,小编讲解了基于MATLAB的相干成像以及基于相干衍射成像的光学加密仿真,今天小编将带大家学习基于非相干成像以及相干衍射成像的光学加密matlab仿真。成像系统模型根据物体照明的相干性有不同的脉冲响应。如果照明是空间相干的,脉冲响应被称为振幅扩散函数(或相干扩散函数),系统的频率响应被称为振幅传递函数(或相干传递函数)。如果照明是空间非相干的,脉冲响应被称为点扩散函数,系统的频率响应被称为光学传递函数(OTF),其幅度被称为调制传递函数(MTF)。需要注意的是,波前像差与照明无关,它们仅取决于成像系统的光学元件。然而,它们对图像的影响却依赖于照明的相干性。

非相干成像原理:

当光是空间非相干时,图像辐照度是物体辐照度与点扩散函数(PSF)的卷积:

d0e6b51321ee407c82d2fe703e107eef.png

点扩散函数(PSF)是振幅扩散函数(ASF)的模平方。图1展示了如何根据成像系统的物体和振幅扩散函数计算非相干图像的例子。

d097437ede0141678c201156a66da135.png

图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,结果是:

79e80b9152da4cf28021701b10e21124.png

同样,我们可以看到点扩散函数(PSF)的傅里叶谱调制了物体辐照度的频谱,从而产生了衍射图像。在非相干情况下,滤波函数(称为光学传递函数,OTF)定义为:

89a2c37d2c6e495d80e299e36089fd40.png

根据不同的成像系统,我们可以得到不同的光学传递函数,如以直径为D的圆形孔径为例,光学传递函数是关于f=f2x+f2y的方位对称函数,其表达式为:

5cb5adae25f64b118eeaf563e00d35f9.png

其中 f0=D/2λzi是相干情况下的截止频率,非相干图像仍然是严格有限带宽的。

如以菲涅尔衍射理论为例,菲涅尔衍射积分表达式为:

8858a695b49f4e768781d04642350d2a.png

则我们可以得到菲涅尔衍射的振幅扩散函数和光学传递函数:

008ead48fe1849e19583dee4e6f0230b.png

5ea3ddd41a8a45bea6fb9d34c2b8bf98.png

关于菲涅尔衍射的详细matlab仿真将在之后的文章中讲解。

基于非相干光的图像加密与解密

在上一篇展示的相干衍射成像光学加密过程中,我们只简单的利用傅里叶变换进行了加密,小编在这里将展示如何利用随机相位调制对图像进行加密和解密。

光学图像加密的过程就是通过加入随机相位板对光场传播过程进行扰动,改变了系统的点扩散函数的形式,进而改变输出光场的强度分布,实现信息隐藏。通俗来讲就是在传播路径中加入随机相位调制从而改变点扩散函数|h(u,v)|2,实现光学加密。加密过程用卷积形式表示如下:

60812b21e5a04f8890c5363211908d69.png

I0(x0,y0)为我们最终得到的加密图像,Ip(x0,y0)为点扩散函数,可以通过输入平面中的理想点光源加载随机相位调制之后根据相干光菲涅尔衍射理论得到。Ii(xi,yi)则为我们解密要得到的图像,可以从以下公式得到:

ae1419b111514187a100f6f1dacfc18d.png

图2展示了利用非相干光照明的图像加密与解密的结果。可以看出,图像已经成功恢复。

611e22727579433d85cbcc8f592b1b80.png

图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

相关文章

  • .NET Md5加密异常处理
    操作系统更新后,软件出现各种bug~乍一看,md5加密算法跪了!为啥会出现md5算法崩溃呢?原因是操作系统开启了FIPS,而md5并不是FIPS(FederalInformationProcessingStandards即(美国)联邦信息处理标准)中的一个部分,这就导致了异常的发生!要解决这个问题,思路很简单:关闭FIPS或者本软件关......
  • 【微电网】基于改进粒子群算法的微电网优化调度(Matlab代码实现)
    ......
  • 电机电流信号的调制信号双谱分析用于车削工况在线监测研究(Matlab代码实现)
     ......
  • PHP RSA 加密解密
     //加密数据  publicfunctionencryptApi(Request$Request)  {      $app_data=$Request->input('app');//要加密的数据      $admin_data=$Request->input('admin');//要加密的数据      //加密数据    ......
  • 基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
    1.算法运行效果图预览(完整程序运行后无水印) 2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频)fort=1:Iterstfori=1:Numifxwoa(i,1)<0xwoa(i,1)=0.1;endifxwoa(i,2)......
  • 全面解析:常见加密算法及其应用
    加密算法是一种用数学方法对数据进行变换的技术,目的是保护数据的安全,防止被未经授权的人读取或修改。加密算法可以分为三大类:对称加密算法、非对称加密算法和哈希算法(也叫摘要算法)。日常开发中常见的需要用到加密算法的场景:保存在数据库中的密码需要加盐之后使用哈希算法(比......
  • 在pinia中使用SecureLS将数据加密后存储到localStorage中,获取的时候解密使用
    第一步对secure-ls进行安装:npminstallsecure-ls第二步:secure-ls的引入:importSecureLSfrom"secure-ls";点击查看代码import{ref}from"vue";import{defineStore}from"pinia";importtype{StorageLike}from"pinia-plugin-pers......
  • openssl加密之椭圆曲线的学习
    椭圆曲线的参数及属性我们选择的椭圆曲线是:NID_X9_62_prime256v1描述一条Z*q上的椭圆曲线,常用到六个参数:T=(q,a,b,G,order,h)。q、a、b用来确定一条椭圆曲线,G为基点,order为点G的阶,我们事先指定好了一个国际上通用的安全曲线:NID_X9_62_prime256v1曲线ECC公钥加密一般使......
  • 基于数据可视化+加密算法+Javaweb的图书管理系统设计与实现
    文章目录1.内容见下图2.详细视频演示3.系统运行效果介绍4.技术框架4.1前后端分离架构介绍4.3程序操作流程5.项目推荐6.成品项目7.系统测试7.1系统测试的目的7.2系统功能测试8.代码参考9.为什么选择我?10.获取源码1.内容见下图2.详细视频演示文章......
  • JAVA实现SHA-256加密
    1、实现代码importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;publicclassSHA256Example{publicstaticvoidmain(String[]args){Stringinput="Hello,World!";//要计算哈希的输入字符串try{......