【图像加密】基于双随机相位结构结合菲涅尔变换实现无透镜光学加密解密附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

相关推荐
Change is good1 小时前
python: 数字类型的一些函数
开发语言·python·算法
卡卡卡卡罗特1 小时前
naocs注册中心,配置管理,openfeign在idea中实现模块间的调用,getway的使用
java·开发语言
星迹日1 小时前
Java: 数据类型与变量和运算符
java·开发语言·经验分享·笔记
六点半8881 小时前
【C++】vector 常用成员函数的模拟实现
开发语言·c++·算法
Kalika0-01 小时前
输出不能被3整除的数-C语言
c语言·开发语言
knoci2 小时前
【Go】-基于Gin框架的IM通信项目
开发语言·后端·学习·golang·gin
RaidenQ2 小时前
2024.9.27 Python面试八股文
linux·开发语言·python
Thomas_YXQ4 小时前
Unity3D PostLateUpdate为何突然占用大量时间详解
开发语言·数码相机·游戏·unity·架构·unity3d
Pandaconda5 小时前
【计算机网络 - 基础问题】每日 3 题(二十七)
开发语言·经验分享·笔记·后端·计算机网络·面试·职场和发展
禁默5 小时前
C++之stack 和 queue
开发语言·数据结构·c++