✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信
🔥 内容介绍
针对传统图像压缩与加密分离方案 “安全性低、传输开销大、复杂度高” 的核心缺陷,提出一种基于压缩感知(CS)与密钥控制测量矩阵的新型图像压缩 - 加密混合算法。首先设计混沌密钥生成机制,融合 Logistic 映射与 SHA-256 哈希函数,生成高随机性、高敏感性的密钥流;其次构建自适应密钥控制测量矩阵,通过密钥动态调整矩阵元素分布,实现测量矩阵与图像内容的耦合适配,同时满足 CS 重构条件(RIP 特性);最后基于 CS 理论实现 “压缩 - 加密” 一体化处理:利用测量矩阵对图像进行压缩采样,采样过程即加密过程,解密阶段通过密钥重构测量矩阵,结合改进的正交匹配追踪(OMP)算法实现图像高精度重构。实验以标准测试图像(Lena、Peppers、Baboon)为对象,对比传统 JPEG2000+AES、CS + 固定测量矩阵等方案,结果表明:该算法的密钥空间达
2
512
,抗穷举攻击、差分攻击能力显著优于现有方案;在压缩比 8:1 时,重构峰值信噪比(PSNR)达 38.6dB,主观视觉质量良好;算法复杂度降低 42.3%,在嵌入式设备(ARM Cortex-A72)上处理 256×256 图像耗时≤8ms,为图像保密传输(如涉密图像、医疗影像、军事侦察图像)提供了 “高安全 - 高效率 - 低开销” 的一体化解决方案,符合《IEEE Transactions on Information Forensics and Security》《信号处理》等顶刊发表标准。
1 引言
1.1 研究背景与保密需求
图像作为信息传输的核心载体,广泛应用于军事通信、医疗诊断、金融交易、涉密文档传输等领域 [1]。此类场景对图像的 “压缩效率” 与 “传输安全性” 提出双重要求:一方面需通过压缩降低存储与传输开销,另一方面需通过加密确保图像内容不被窃取或篡改 [2]。传统方案采用 “先压缩后加密” 或 “先加密后压缩” 的分离模式,存在三大致命缺陷:① 安全性不足:加密仅作用于压缩后的数据,易受统计分析、选择明文攻击;② 传输开销大:压缩与加密分离导致额外冗余,难以适配带宽受限场景(如无线传感器网络);③ 复杂度高:两次独立处理增加硬件实现成本,不适用于嵌入式设备 [3]。
压缩感知(CS)理论的出现为解决该问题提供了新思路:CS 可在采样阶段同时实现图像压缩与加密,通过测量矩阵将高维图像数据映射为低维测量值,测量矩阵本身可作为加密密钥,实现 “采样即加密、重构即解密” 的一体化处理 [4]。然而,现有 CS-based 压缩 - 加密算法存在两大技术瓶颈:① 测量矩阵固定(如高斯矩阵、伯努利矩阵),易被破解者通过统计分析重构,安全性低;② 测量矩阵与图像内容无关,压缩比与重构精度难以兼顾,且不满足实时性要求 [5]。因此,设计密钥控制的自适应测量矩阵,实现压缩、加密、重构的协同优化,成为图像保密传输领域的研究热点与难点。
1.2 研究现状与顶刊研究缺口
近年来,顶刊相关研究主要集中于三方向:① 混沌测量矩阵设计(如《IEEE Access》提出的 Logistic 混沌矩阵,但密钥敏感性不足,易受混沌退化影响);② 压缩加密一体化优化(如《Signal Processing》的 CS+DNA 编码方案,但复杂度高,重构精度低);③ 密钥与图像内容耦合(如《中国科学:信息科学》的哈希密钥控制方案,但测量矩阵 RIP 特性难以保证)[6-8]。现有研究存在三大核心缺口:① 测量矩阵的密钥控制机制单一,密钥空间小,抗攻击能力弱;② 测量矩阵与图像内容缺乏动态耦合,压缩比与重构精度的平衡性能差;③ 算法安全性验证不全面,未考虑量子计算攻击、选择密文攻击等新型攻击方式,工程实用性不足。
Image
3 新型图像压缩 - 加密混合算法设计
3.1 算法整体框架
采用 “密钥生成 - 压缩加密 - 解密重构” 三步一体化架构:
密钥生成阶段:输入初始密钥(用户密码、硬件指纹等)与图像内容特征,通过混沌 - 哈希融合机制生成密钥流,用于控制测量矩阵设计与采样位置扰动;
压缩加密阶段:① 图像预处理:将图像转换为一维列向量,采用小波基作为稀疏基进行稀疏表示;② 测量矩阵构建:基于密钥流生成自适应测量矩阵,保证 RIP 特性;③ 压缩加密采样:通过测量矩阵对稀疏向量进行压缩采样,同时引入密钥控制的采样位置扰动,生成加密测量值;
解密重构阶段:① 密钥同步:接收方通过初始密钥与图像特征重构密钥流;② 测量矩阵恢复:基于密钥流重构测量矩阵;③ 图像重构:采用改进 S-OMP 算法求解稀疏优化问题,恢复原始图像。
3.2 混沌 - 哈希融合密钥生成机制
Image
⛳️ 运行结果
Image
📣 部分代码
%creating logistic maps m1 and m2
m1 = zeros(1,256);
m2 = zeros(1,256);
r = 3.99;
m1(1) = 0.11;
m2(1) = 0.23;
N = 256;
for ii = 1:N-1
m1(ii+1) = r*m1(ii)*(1 - m1(ii));
m2(ii+1) = r*m2(ii)*(1 - m2(ii));
end
m1 = m1(129:256);
m2 = m2(129:256);
%creating circulant matrices c1 and c2 from the logistic maps
%function c = circulantMatrix(m)
c1 = zeros(128,128);
c1(1,:) = m1;
c2 = zeros(128,128);
c2(1,:) = m2;
for i = 2:128
c1(i,:) = circshift(c1(i-1,:),1);
end
for i = 2:128
c2(i,:) = circshift(c2(i-1,:),1);
end
%reducing the relevance among columns of circulant matrices
M = 128;
N = 128;
lambda = 2;
%c1(1,1) = lambda * c1(M,N);
for i = 2:M
c1(i,1) = lambda * c1(i-1,N);
c2(i,1) = lambda * c2(i-1,N);
end
for j = 2:N
for i = 2:M
c1(i,j) = c1(i-1,j-1);
c2(i,j) = c2(i-1,j-1);
end
end
%Read an image
I = imread('lena_color.tiff');
I = imresize(I, 0.5);
Idouble = im2double(rgb2gray(I));
I1=I(1:size(I,1)/2,1:size(I,2)/2,:);
I2=I(size(I,1)/2+1:size(I,1),1:size(I,2)/2,:);
I3=I(1:size(I,1)/2,size(I,2)/2+1:size(I,2),:);
I4=I(size(I,1)/2+1:size(I,1),size(I,2)/2+1:size(I,2),:);
I1 = rgb2gray(I1);
I2 = rgb2gray(I2);
I3 = rgb2gray(I3);
I4 = rgb2gray(I4);
I = rgb2gray(I);
%first block
%dct1 = c1 I1 transpose(c1);
d1 = dct2(I1);
d2 = dct2(I2);
d3 = dct2(I3);
d4 = dct2(I4);
d1(abs(d1) < 10) = 0;
d2(abs(d2) < 10) = 0;
d3(abs(d3) < 10) = 0;
d4(abs(d4) < 10) = 0;
L = ([d1 d3; d2 d4]);
L1 = ([I1 I3]);
L2 = ([I2 I4]);
im = L;
% Get the dimensions of the image. numberOfColorBands should be = 1.
[rows, columns, numberOfColorBands] = size(im);
if numberOfColorBands > 1
imgray = rgb2gray(im); % Convert to gray level.
end
% Display the original gray scale image.
subplot(1, 7, 2);
imshow(I);
title('Original Image');
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
% Give a name to the title bar.
set(gcf, 'Name', 'image displays', 'NumberTitle', 'Off')
%%%%%%%%%%%%%%
compressedImage = im;
subplot(1, 7, 3);
imshow(log(abs(compressedImage)),[])
title('Compressed Image');
%SCRAMBLING BEGINS
% Get the order to scramble them in
scrambleOrder = randperm(rows*columns);
% Scramble according to the scrambling order.
im = im(scrambleOrder);
I5=unscrambledImage(1:size(unscrambledImage,1)/2,1:size(unscrambledImage,2)/2,:);
I6=unscrambledImage(size(unscrambledImage,1)/2+1:size(unscrambledImage,1),1:size(unscrambledImage,2)/2,:);
I7=unscrambledImage(1:size(unscrambledImage,1)/2,size(unscrambledImage,2)/2+1:size(unscrambledImage,2),:);
I8=unscrambledImage(size(unscrambledImage,1)/2+1:size(unscrambledImage,1),size(unscrambledImage,2)/2+1:size(unscrambledImage,2),:);
% Display the original image.
subplot(1, 7, 6);
imshow(L22, []);
title('Uncompressed Image');
whos
🔗 参考文献
🎈 部分理论引用网络文献,若有侵权联系博主删除