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

相关推荐
振鹏Dong1 小时前
Spring注解演进与自动装配原理深度解析:从历史发展到自定义Starter实践
java·开发语言
LCY1331 小时前
整理python的高级用法
开发语言·python
专注VB编程开发20年2 小时前
C# .NET支持多线程并发的压缩组件
开发语言·前端·c#·.net·多线程·zip·压缩
lightqjx2 小时前
【C++】类和对象 --- 类中的6个默认成员函数
开发语言·c++
yuan199972 小时前
MATLAB中的蛙跳算法实现
算法·matlab
How_doyou_do3 小时前
JS之刷刷
开发语言·javascript·ecmascript
小豪GO!3 小时前
Java多线程初阶
java·开发语言
码农秋3 小时前
Java Optional 最佳实践:从入门到精通的完整指南
java·开发语言·optional
三水彡彡彡彡4 小时前
Java中使用正则表达式的正确打开方式
java·开发语言·正则表达式
深耕AI5 小时前
【MFC教程】C++基础:01 小黑框跑起来
开发语言·c++·mfc