【图像加密】预测误差分类置乱图像加密解密【含Matlab源码 1846期】

本文介绍了一种在Matlab中实现的加密域可逆信息隐藏算法,通过预测误差和分类置乱提高嵌入容量,同时确保加密图像的安全性。算法首先预处理图像,然后进行分类加密,信息隐藏在可变像素中,具有较高的安全性。接收者可根据秘钥提取信息并恢复原始图像。
摘要由CSDN通过智能技术生成

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、预测误差分类置乱图像加密解密简介

1 引 言
加密域可逆信息隐藏 (Reversible data hiding in encrypted image, RDH-EI) 是一种加密原始图像后, 在密文图像中可逆地隐藏附加信息, 并且在信息提取后, 原始图像可以被无损重建的技术。随着人们对隐私保护的需求不断增加, 加密域可逆信息隐藏受到广泛关注。

目前已有的RDH-EI算法可以分为加密前腾出空间 (VRBE) 和加密后腾出空间 (VRAE) 两类。基于加密后腾出空间 (VRAE) 的RDH-EI算法, 用户端除图像加密外无需进行其他操作, 信息隐藏者在密文图像中直接进行信息隐藏, 方便用户操作。Zhang提出基于压缩密文数据的可分离RDH-EI算法, 其嵌入率为0.01 bpp。Huang以图像块为单位进行位置置乱, 利用传统可逆信息隐藏算法使嵌入率达到0.3 bpp。由于加密后的图像无法通过压缩或预测来产生冗余空间, 因此加密后腾出空间 (VRAE) 算法的嵌入信息量较少。

与加密后腾出空间 (VRAE) 相比, 加密前腾出空间 (VRBE) 算法在加密前对明文图像进行预处理, 这虽然增加了内容所有者的负担, 但可以极大地提高嵌入容量。2013年, Ma等提出首个可分离加密前腾出空间算法, 该算法在XOR加密原始图像前估计部分像素, 并将秘密信息嵌入到估计误差 (estimating error) 中
在保证加密图像安全性的同时, 为了进一步提高嵌入容量, 本文提出了一种基于预测误差和分类置乱的加密域可逆信息隐藏算法。提出的算法通过预测误差使像素大多集中在0附近, 可变像素高6位平面存在冗余空间。利用这些冗余空间可以在一个可变像素中嵌入6比特信息, 从而提高嵌入容量。相比于Xu, 提出算法的嵌入率平均可增加1 bpp。由于嵌入的信息与像素位置无关, 可采用分类置乱的加密方式提高加密图像的安全性。

2 本文算法
本文算法框架如图1所示, 明文拥有者首先由原始图像得到预处理图像, 根据加密秘钥对预处理图像分类加密生成加密图像。信息隐藏者得到加密图像后在加密图像中隐藏秘密信息。接收者得到含有秘密信息的加密图像后根据所持有的秘钥得到相应的数据。若接收者拥有隐藏秘钥则可以提取秘密信息;若接收者拥有加密秘钥则可以提取出分类向量T及溢出矩阵Map并恢复原始图像。
在这里插入图片描述
图1 算法框架

2.1 预处理
预处理过程首先对图像进行预测误差, 目前已经有许多预测误差技术被提出, 常用的如文献中的预测技术。本文选择文献中的预测方法估计并插值非采样像素点。将大小为M×N的原始图像I分为采样像素和非采样像素, 如图2 (a) 和 (b) , 其中, 白色像素为非采样像素NSP (Non-Sample Pixels) , 黑色像素为采样像素 (Sample Pixels) 。

估计非采样像素点NSP § (1≤p≤0.75×M×N) 分为两步。第一步, 非采样像素值位于四个采样像素的中心NSP § =I (2i, 2j) (1≤i≤M, 1≤j≤N) (图2中①类像素) , 这些像素点先被预测。第二步, 结合采样像素及第一步预测后得到的非采样像素预测剩余的非采样像素 (图2 (b) 中②类像素) 。在得到预测值后, 将属于NSP像素的原始像素值与预测像素相减得到预测误差E (i, j) (1≤i≤M, 1≤j≤N) (E (i, j) 表示为图2中的白色像素①和②) 。得到预测误差图像后的操作步骤如下:

(1) 像素分类。选定的阈值范围为[Tn, Tp]其中Tn<0, Tp>0。预测误差图像中阈值范围之内的像素称为可变像素, 阈值之外的像素称为不变像素, 可变像素用于嵌入数据。不变像素又分为两类:采样像素和非采样像素。这样像素被分为三类, 如图3 (a) 所示:

① 可变像素, (图3 (a) 中的黑点像素)
② 第一类不变像素 (非采样像素, 图3 (a) 中的白点像素)
③ 第二类不变像素 (采样像素, 图3a中黑色块)
在这里插入图片描述
图2 预测过程
(2) 生成像素分类向量T。T为二进制一维向量T={ti|1≤i≤0.75×M×N}, T向量元素的先后顺序标记了像素的位置信息。T中的元素值代表了像素的类型。即当ti=0时, 代表预处理图像中的可变像素, 当ti=1时, 代表第一类不变像素。T向量用于记录可变像素与第一类不变像素的位置信息。

记录位置信息后将三类像素按顺序排列。排列顺序如图3b, 可变像素在最前方, 接着是第一类不变像素, 最后是采样像素。
在这里插入图片描述
图3 像素分类与重排
(3) 可变像素编码。对可变像素进行编码, 以阈值为[-2, 1]为例, Eb (i, j) 表示编码后的差值, 编码规则如公式1。编码后的可变像素值范围在[0, 3]之内。

Eb (i, j) =E (i, j) +2 E (i, j) ∈[-2, 1] (1)

编码后的可变像素后n位保持不变, 前8-n位用于嵌入T向量及信息。n的计算方法如公式 (2) 。公式中⌈Ł表示上取整。
在这里插入图片描述
(4) 规范第一类不变像素:已知灰度图像的素值[0, 255]可以用八位二进制比特来表示, 将灰度图像中最高位来表示符号位, 0表示负数, 1表示正数。这样插值图像中不变像素的表示范围 (0) 1111111到 (1) 1111111, 即[-127, +127]。在[-127, +127]之外的像素值用Map来记录其位置信息, Map={mk|mk= (s, i, j) , k=1, 2, …, K}, 其中s代表符号位, s=0代表负数, s=1代表正数, K为溢出像素的个数。并用公式3将其规范到[-127, +127]之内。
在这里插入图片描述
因为可变像素与不变像素的映射关系不同, 可变像素通过编码来解决负数问题, 不变像素通过上述映射关系来解决负数问题, 为了能完全恢复图像需要保证编码前的可变像素与映射后的不变像素不重叠, 阈值范围为[Tn, Tp] (Tn<0, Tp>0) , 阈值之外的像素[-127, Tn-1]和[Tp+1, +127]经过上述映射后变为[|Tn-1|, 127]、[Tp+129, 255]。为了能满足[Tn, Tp]内的像素与映射后的不变像素不重叠, 阈值的选取需要满足以下条件:Tn<0, Tp>0, 且|Tn-1|>Tp。

最后将生成的像素分类向量T和溢出矩阵Map嵌入到编码后的可变像素高8-n位平面, 得到预处理图像X。

2.2 图像分类加密
图像加密采用分类置乱与异或加密结合的方法提高安全性。因为预处理图像在像素分类时将像素分为三类:可变像素、第一类不变像素、采样像素 (第二类不变像素) 三类。原始图像大小为M×N, 首先对对这三类像素分别置乱。置乱过程如下:

(1) 在预处理时得到的T为二进制一维向量T={ti|1≤i≤0.75×M×N}。用L1代表可变像素, L2代表第一类不变像素, L3代表第二类不变像素。用Xi, j代表预处理图像的所有像素, 像素分类如公式4。
在这里插入图片描述
N1, N2代表可变像素和第一类不变像素的个数。N3代表L3的元素个数, 预处理图像大小为M×N那么N1+N2+N3=M×N。

(2) 三个一维向量分别使用三个随机秘钥进行置乱加密, 将这三个随机秘钥连接起来组成一个秘钥L。如公式 (6) 。
L=Key1 (L1) ∪Key2 (L2) ∪Key3 (L3) (5)
置乱后预处理图像像素值范围在[0, 255], 可以用八位二进制数来表示。对置乱后预处理图像按位异或加密, 加密过程如公式 (6) , 式中ri, j, k表示八位伪随机序列, bi, j, k表示置乱后的像素值。Bi, j, k表示异或加密后的图像。
Bi, j, k=bi, j, k♁ri, j, k (6)
最终得到的加密图像为X′, 攻击者在没有得到置乱秘钥L和异或加密伪随机序列的情况下均不可获得原始图像。

2.3 信息嵌入
接收者得到加密图像后需要对加密图像嵌入信息, 嵌入信息后的加密图像为X"。嵌入信息在可变像素的高8-n位平面嵌入。嵌入方法是用秘密信息替代加密图像中可变像素的第7-m位到第n+1位。n的计算公式如公式 (1) 所示, 这里m代表T所占用的位平面的个数, 即T向量的长度为3/4 (M×N) , 已知预处理图像中可变像素的个数为N1, 则图像的嵌入率Rate如公式 (7) 。
在这里插入图片描述
令α=N1/ (M×N) , α即可变像素在所有像素中所占的比例, 则嵌入率可以表示为:

Rate=α (8-n) -0.75bpp (8)

2.4 信息提取及图像恢复
接收者得到含有秘密信息的加密图像X"需要提取秘密信息及无损的恢复出原始图像。对加密图像中可变像素的前8-n位提取信息, 提取出的信息包含了T向量、嵌入的秘密信息和溢出矩阵Map。

恢复图像时首先根据置乱秘钥对加密图像三类像素置乱恢复, 并对整个加密图像异或解密, 解密时可变像素只取后n位。解密后的像素值用E′ (i, j) 表示, 因为处理过程中对可变像素进了编码, 为了能完全恢复图像需对可变像素解码, 解码后的像素值用E′j (i, j) 表示, 解码的过程如公式9 (这里仍然以阈值为[-2, 1]为例) 。
E′j (i, j) =E′ (i, j) -2 E′ (i, j) ∈[0, 3] (9)
接着根据T向量恢复可变像素与第一类不变像素的位置。最后根据Map中记录的溢出像素的位置恢复溢出像素。恢复过程为如公式 (10) 。
在这里插入图片描述
经过上述步骤可以恢复出预处理阶段的预测误差图像, 对于预测误差图像的恢复文献[9]中图像恢复阶段已经详细说明, 在此不再论述。

⛄二、部分源代码


⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]屈凌峰,和红杰,陈帆.基于预测误差分类置乱的图像加密域可逆信息隐藏[J].光电子·激光. 2019,30(02)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 二维Arnold置乱加密和解密是一种基于Arnold映射的图像加密方法。该方法通过对图像进行置乱操作,使得图像中的像素位置发生变化,从而达到加密的目的。在解密时,通过对置乱后的图像进行反向操作,即可还原出原始图像。 在Matlab中实现二维Arnold置乱加密和解密,可以使用Matlab自带的图像处理工具箱,结合Arnold映射算法实现。具体实现步骤如下: 1. 读取待加密图像,将其转换为灰度图像。 2. 对灰度图像进行Arnold置乱操作,得到置乱后的图像。 3. 对置乱后的图像进行Arnold反置乱操作,得到解密后的图像。 4. 将解密后的图像保存为文件。 需要注意的是,在进行Arnold置乱操作时,需要选择合适的置乱参数,以保证加密效果和解密效果的可靠性。同时,在实现过程中,还需要考虑到图像的大小和像素值范围等因素,以确保程序的正确性和稳定性。 总之,二维Arnold置乱加密和解密是一种简单有效的图像加密方法,可以在Matlab中进行实现。通过该方法,可以保护图像的安全性和隐私性,防止图像被非法获取和篡改。 ### 回答2: 二维Arnold置乱算法是一种基于混沌现象的加密算法,它主要应用于图像加密,以保护图像的隐私性和安全性。在图像加密过程中,二维Arnold置乱算法不仅能够混淆图像中的像素值,还能够扰动图像中的像素位置,从而使得其具有较高的安全性和防抵押性。 在Matlab实现二维Arnold置乱算法时,首先需要对输入图像进行一些必要的预处理,如将图像转为灰度图像,将图像的大小调整为二的幂次方等。接着,利用Arnold变换实现图像置乱,其中Arnold变换是一种二维置换矩阵,通过不断迭代,它可以实现对图像中像素位置的混淆。 在Arnold变换中,其参数可用于控制置乱强度,一般取一个较小的值,例如3或4。置乱后的图像可以进一步进行AES加密,以增强加密的安全性。加密过程完成后,可以将加密后的图像传输给接收方,接收方通过解密算法即可还原出原始的图像。 解密算法实现过程与加密算法过程类似,只是在Arnold变换中需要将置乱强度的参数取相反的数值,并将所得的图像进行解密运算。最终得到的图像与原始图像一致,即可根据需要进行后续处理和应用。 需要注意的是,二维Arnold置乱算法虽然具有较高的加密安全性和难度,但在实际应用中仍需考虑到算法的效率和速度。因此,在实现过程中需要结合具体应用需求和场景来进行调整和优化,以提高算法的效率和应用性能。 ### 回答3: 二维 Arnold 的图像置乱加密及解密,是一种常见的图像加密算法。该算法基于 Arnold 置换、混沌映射等数学原理,以图像的像素矩阵为基础,通过多次置换和混沌映射来加密图像,使得加密后的图像在视觉上无法被识别和还原。本文将以 MATLAB 为例,介绍二维 Arnold 的图像置乱加密及解密的具体实现方法。 一、算法流程 1.读取原始图像,获取像素信息。 2.使用 Arnold 置换对像素进行置乱。 3.使用混沌映射加密置乱后的图像。 4.将加密后的图像保存至文件中。 5.对保存的加密图像进行解密。 6.使用逆混沌映射解密置乱图像。 7.使用逆 Arnold 置换对图像进行还原。 8.将还原后的图像保存至文件中。 二、算法原理 1.Arnold 置换 Arnold 置换是一种旋转映射,其基本思想是通过若干次旋转运算,将一个二维距阵“塞”到另一个二维矩阵中,从而实现图像置乱。具体地说,Arnold 置换的矩阵运算公式为: f(x, y) = [(1 1) (1 2)] [x y] mod N 其中,(1 1) 和 (1 2) 表示矩阵的两个元素,x 和 y 分别表示被置乱图像像素的坐标,N 表示置换次数。 2.混沌映射 混沌映射是一种非线性的动力系统,其基本特点是非周性、无规则性和混乱性。通过调整混沌映射的参数,可以产生不同的混沌序列,从而实现图像加密的目的。 本文中,我们使用了一种常见的混沌映射算法,即 Logistic 映射。其运算公式为: x(n+1) = ax(n)(1-x(n)) 其中,x(n) 表示第 n 个时刻的值,a 为控制参数,通常取值为3.97。 三、实例展示 1.读取原始图像: 使用以下代码读取原始图像。 im = imread('test.jpg'); 2.Arnold 置换: 使用以下代码图像进行置乱。 N = 4; for i = 1:N for j = 1:N if mod(i+j, 2) == 0 && i <= N/2 % 顺时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end if mod(i+j, 2) == 1 && i > N/2 % 逆时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end end end 3.混沌映射加密: 使用以下代码置乱后的图像进行加密。 a = 3.97; % 混沌映射参数 x = 0.1; % 初始值 N = size(im, 1); % 图像尺寸 for i = 1:N for j = 1:N x = a*x*(1-x); im(i, j, :) = bitxor(uint8(x*255), im(i, j, :)); end end 4.保存加密后的图像: 使用以下代码加密后的图像保存至文件中。 imwrite(im, 'test_encrypted.bmp'); 5.解密加密后的图像: 使用以下代码读取加密后的图像。 im = imread('test_encrypted.bmp'); 6.逆混沌映射解密: 使用以下代码加密后的图像进行解密。 a = 3.97; % 混沌映射参数 x = 0.1; % 初始值 N = size(im, 1); % 图像尺寸 for i = 1:N for j = 1:N x = a*x*(1-x); im(i, j, :) = bitxor(uint8(x*255), im(i, j, :)); end end 7.逆 Arnold 置换还原图像: 使用以下代码对解密后的图像进行还原。 N = 4; for i = N:-1:1 for j = N:-1:1 if mod(i+j, 2) == 0 && i <= N/2 % 逆时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end if mod(i+j, 2) == 1 && i > N/2 % 顺时针旋转90度 im(i:i+N/2-1, j:j+N/2-1, :) = ... im(i:i+N/2-1, j:j+N/2-1, [2 1 3]); end end end 8.保存还原后的图像: 使用以下代码将还原后的图像保存至文件中。 imwrite(im, 'test_decrypted.jpg'); 四、总结 本文简要介绍了二维 Arnold 的图像置乱加密及解密的实现方法,其中涉及到的数学知识和 MATLAB 编程技巧,可能对初学者来说有些困难。但是,只要认真分析算法流程和程序实现,按照步骤逐一实现,就能够成功完成图像加密和解密的操作。同时,该算法的可靠性和安全性还需要进行更加深入的研究和探索。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值