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

相关推荐
jghhh0116 小时前
使用 MATLAB 实现支持向量回归 (SVR) 预测未来数据
算法·matlab
techdashen17 小时前
Cloudflare 如何把一个大型代理拆成三个小服务来提升可靠性
开发语言·rust
geovindu17 小时前
go: Chain of Responsibility Pattern
开发语言·设计模式·golang·责任链模式
十五年专注C++开发17 小时前
WaitingSpinnerWidget: 一个高度可配置的自定义Qt等待加载动画组件
开发语言·c++·qt·waitingspinner
苍煜18 小时前
ThreadPoolExecutor线程池终极全解:同步异步判定+SpringBoot生产实战
java·开发语言·spring boot
fengfuyao98518 小时前
EWT(经验小波变换)MATLAB实现与应用
开发语言·matlab
MasonYyp1 天前
基于Python可定制开发的智能体框架
开发语言·python
橘颂TA1 天前
【Linux】读写锁
大数据·linux·开发语言·c++·读写锁
lv__pf1 天前
集合框架1
java·开发语言
We་ct1 天前
LeetCode 64. 最小路径和:动态规划入门实战
开发语言·前端·算法·leetcode·typescript·动态规划