【图像加密】基于双随机相位结构结合菲涅尔变换实现无透镜光学加密解密附Matlab代码

以下是基于双随机相位结构结合菲涅尔变换实现无透镜光学图像加密和解密的示例Matlab代码:

图像加密:

matlab

function encrypted_image = encryptImage(image)

% 转换为灰度图像

if size(image, 3) == 3

image = rgb2gray(image);

end

复制代码
% 双随机相位结构生成
[M, N] = size(image);
random_phase1 = exp(1i * 2 * pi * rand(M, N));
random_phase2 = exp(1i * 2 * pi * rand(M, N));

% 菲涅尔变换
spectrum = fftshift(fft2(image));
encrypted_spectrum = spectrum .* random_phase1 .* random_phase2;

% 逆菲涅尔变换
encrypted_image = ifft2(fftshift(encrypted_spectrum));
encrypted_image = abs(encrypted_image);

end

图像解密:

matlab

复制

function decrypted_image = decryptImage(encrypted_image)

% 菲涅尔变换

spectrum = fftshift(fft2(encrypted_image));

复制代码
% 提取双随机相位结构
random_phase1 = angle(spectrum);
random_phase2 = angle(fftshift(ifft2(spectrum)));

% 解密
decrypted_spectrum = abs(spectrum) .* exp(1i * random_phase1) ./ exp(1i * random_phase2);

% 逆菲涅尔变换
decrypted_image = ifft2(fftshift(decrypted_spectrum));
decrypted_image = abs(decrypted_image);

end

相关推荐
二十雨辰几秒前
[Java]RuoYi帝可得-2文件储存
java·开发语言
wjm041006几秒前
ios学习路线 -- Swift基础(1)
开发语言·ios·swift
Vect__1 分钟前
深刻理解C++STL库常见容器功能和底层
开发语言·c++
夏玉林的学习之路1 分钟前
委托构造和using关键字
开发语言·c++·算法
jiang_changsheng3 分钟前
VMware 虚拟机无法上网排查解决教程
开发语言·网络·php
阿成学长_Cain11 分钟前
Windows IP 配置查看器 ipconfig 详解
开发语言·php
Yupureki13 分钟前
《C++实战项目-高并发内存池》2.ObjectPool构造
linux·服务器·c语言·开发语言·jvm·c++
机器学习之心13 分钟前
拉丁超立方采样(LHS)+二阶多项式回归响应面建模+非线性规划和遗传算法多目标优化求解,MATLAB代码
matlab·回归·非线性规划·拉丁超立方采样·二阶多项式回归响应面建模·遗传算法多目标优化
XiYang-DING15 分钟前
【Java SE】Java中的static关键字总结
java·开发语言
格林威16 分钟前
工业相机图像高速存储(C++版):内存映射文件(MMF)零拷贝方案,附堡盟 (Baumer) 相机实战代码!
开发语言·c++·人工智能·数码相机·计算机视觉·视觉检测·工业相机