【数据隐写】基于matlab四叉树分割和直方图平移的可逆图像数据隐藏【含Matlab源码 2143期】

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

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

⛄一、一种使用四叉树分割的分形信息隐藏算法简介

1 使用四叉树分割的正交分形编码
2008年,Pi等人提出了一个新的正交分 形编码水 印算法[8],在正交分形编码中,灰度仿射变换中的亮度因子就是待编码子块的均值,而且这个均值在解码过程中是迭代不变的,嵌入到该均值中的秘密信息不会因正交分形解码而消失,而是散布于整个载体图像像素域中。此外,秘密信息的提取只需要计算图像子块的均值,因而秘密信息的提取比其它变换域算法都快。随后,很多学者在Pi等人提出的算法上做了很多改进,并将这种方法应用在了图像隐写中,获得了很好的效果,如考虑HVS特性将值域块分类[9,12],对不同的值域块选择不同的嵌入强度,或者利用拼贴误差的原理[11,12],这些方法都能较好地兼顾秘密信息的不可感知性和鲁棒性,使得基于正交分形的信息隐藏算法更具有实用价值。但这些方法在载体图像进行正交分形编码时,都是将图像平均分割成若干互不重叠大小为2b×2b的值域块R ,如果分割的值域块尺寸过大,那么整个信息隐藏和信息提取过程所需要的时间就越少,但是隐藏的信息量就会很少,如果分割的尺寸过小,所需要的时间很长,也不利于整个信息隐藏过程。

因此可以考虑在图像分割时,根据图像块的特征分割为可变大小的块,这样就能很好地兼顾时间和隐藏量。Y. Fisher于1991年提出图像的四叉树分割方案[6],该方案在图像分割时能根据值域块的拼贴误差自适应地调整值域块的大小。将四叉树分割理论运用到信息隐藏中,可以根据原始载体图像的特征,动态自适应分割图像值域块,同时根据值域块的拼贴误差,调整嵌入秘密信息的强度,兼顾了信息隐藏的时间和隐藏容量,实验表明,这种方法的抗攻击能力( 鲁棒性) 比传统的正交分形信息隐藏算法要强。具体的分割流程如图1所示。
在这里插入图片描述
图 1 四叉树分割方法

2 彩色图像分量相关性以及拼贴误差
现在,互联网上的图像大都是彩色图像,考虑到信息隐藏的透明性,本文选择彩色图像作为载体图像,通过第1节的编码方法,将秘密图像嵌入到其中,以达到隐蔽通信的目的。而传统的SFC方法[13],未能考虑到彩色图像R、G、B三个分量的相关性,对分量进行分别编码相当费时。本文结合文献[13]中的根据彩色图像R、G、B三个分量的相关性,在对彩色载体图像进行正交分形编码时,首先对亮度分量Y = 0. 301r + 0. 586g + 0. 113b进行编码,然后对三个分量中的对比度因子s以及值域块均值r进行修正,s的修正公式如下:
在这里插入图片描述
其中ri是彩色图像红色分量Ir中值域块R的像素值,d’i是Ir中D块经过四邻域平均后与R块等大的定义域块D’ 中的像素值,–r和d’分别是R和D’ 的平均值( 具体的修正过程在第3节的信息嵌入过程中有详尽的描述) 。在保证图像质量的前提下,加快了正交分形编码的速度。这种算法和SFC编码算法相比,匹配时间缩短约为原来的1 /3,大大缩短了正交分形编码的时间。

很多基于正交分形编码的信息隐藏算法是通过修改载体图像的分形编码参数实现信息嵌入的,具体来说是修改参数中R块均值来嵌入信息的。通过实验发现,R块均值的改变量越大,图像的鲁棒性越强,但是载体图像就会在视觉上降质,从而带来秘密信息透明性的降低,因此需要折中处理[12]。本文将拼贴误差[10,12]运用到均值的修改上,具体说,图像中纹理或边缘区域的拼贴误差大,但是图像中的平滑区域的拼贴误差要小好多,拼贴误差反映了图像的局部特征,如果对于图像的平滑区域也就是拼贴误差小的值域块均值修改量小,反之修改量大,这样既能保证秘密信息的隐蔽性,同时也能带来载体图像鲁棒性的提升。本文首先采用正交分形编码得到分形参数,然后根据拼贴误差将值域块R分成Ci类,不同类中的Ri嵌入强度Δi不同( 式2) ,这样图像的不同局部采用了不同的嵌入强度,从而兼顾秘密信息的透明性和载密图像的鲁棒性。

3 信息嵌入和提取
本文的秘密图像采用灰度图像,然而传统的正交分形算法无法直接运用到灰度图像中。所以,本文采用文献[11]中的方法,通过变换函数,将灰度秘密图像的像素值作为修改参数时的增量,以达到嵌入秘密图像的目的。

设载体图像IN×N,利用正交分形编码嵌入秘密图像时需要修改R块均值r,修改公式如下:

设原始载体图像是2m×2n的彩色图像I,秘密图像为256级灰度图像S。为了增强秘密图像的安全性,同时防止剪切、涂抹等攻击使提取的图像丢失大片连续的区域,这里选择对秘密图像进行Arnold置乱,迭代次数作为密钥key1保存。具体的嵌入过程如下:

( 1) 原始图像I提取亮度分量Y = 0. 301r + 0. 586g +0. 113b,得到一幅灰度图像I’ 。

( 2) 设置整个图像I’ 为当前值域块Ri,按照图1四叉树的方式进行分割,分割的过程中记录下正交分形编码参数( xi,yi,ai,s,r) 。( 其中( xi,yi) 表示定义域块的位置,ai是8种仿射变换的序号,s表示对比度,r表示当前值域块的均值) 。

( 3) 将原始图像I中红色分量所组成的灰度图Ir中,与值域块R最佳匹配的定义域块D块的坐标和仿射变换序号用I’ 中得到的来替代,而R块的平均值用Ir自身的平均值替代,对因子s进行修正,修正公式见式( 2) 。G( 绿色) 分量和B( 蓝色) 分量做相同的处理。最终得到修正后的编码参数 ( xi,yi,ai,sr,rr,sg,rg,sb,rb) 。

( 4) 重复( 2) 、( 3) 直到所有的值域块编码完毕,因为不是等分割载体图像,这里需要记录图像分割情况,作为秘钥key2,供提取信息时使用。

( 5) 按拼贴误差E( R) 对子块集合{ Ri} 进行降序排列,得到子块序列,并把它划分为n类记为Ci,每类的子块个数为:2m + n -2b/ n,每类的嵌入强度为Δi,1≤i≤n。

( 6) 对于子块R∈Ci( 1≤i≤n) ,若对应秘密图像像素值为w,则将分形参数( xi,yi,ai,sr,rr,sg,rg,sb,rb) 中的rr按式( 1)修改得到rr’,量化步长满足Δi> Δi+ 1( 1≤i≤n) 。同理,下一个像素值,我们依次处理rg、rb。按照修改均值后的分形码( xi,yi,ai,sr,rr’,sg,rg’,sb,rb’) 进行分形解码迭代,得到含秘密信息的彩色图像。

秘密信息的提取是嵌入的逆过程。具体提取步骤如下:

( 1) 将载密图像按照秘钥key2进行分割,对于每个块Ri,计算三个分量图像的均值ri( 0≤i < 2m + n -2b) 。
在这里插入图片描述
( 3) 根据密钥key1,对提取的秘密图像序列W’ 进行逆Arnold变换,就得到了秘密图像W。

⛄二、部分源代码

clc;
clear all;
close all;
z=1;

%--------------------读取图像------------------------
b=imread(‘goldhill.jpg’);
I=rgb2gray(b);
figure(1);
imshow(I);
title(‘原始图像’);
[m,n]=size(I);
figure(2);
imhist(I);
title(‘原始图像的直方图’);

%--------------------四叉树分解---------------------

mindim=4;
S = qtdecomp(I,@Split,mindim,@Predicate);

%-------------------显示块表示------------

blocks = repmat(uint8(0),size(S));

for dim = [512 256 128 64 32 16 8 4 2 1];
numblocks = length(find(S==dim));

if (numblocks > 0)
values = repmat(uint8(1),[dim dim numblocks]);
values(2:dim,2:dim,:) = 0;
blocks = qtsetblk(blocks,S,dim,values);
end
end

blocks(end,1:end) = 1;
blocks(1:end,end) = 1;

figure(3);
imshow(blocks,[]);
title(‘分解的图像块’);

%-------------------显示全图-----------------------------------

vals1 = repmat(uint8(0),size(S));
for dim = [512 256 128 64 32 16 8 4 2 1]
[vals,r,c]=qtgetblk(I,S,dim);

numblocks = length(find(S==dim));    

if (numblocks > 0)
values = repmat(uint8(1),[dim dim numblocks]);
values(2:dim,2:dim,:) = vals(2:dim,2:dim,1:numblocks) ;

vals1 = qtsetblk(vals1,S,dim,values);

end
end
figure(4);
imshow(vals1,[]);
title(‘分解图像’);

%----------------输入要隐藏的消息/数据---------------------
hide_data=input(‘Enter the data to be hide’); %用于手动输入
%cell_data=textread(‘myfile.txt’, ‘%s’, ‘whitespace’, ‘’); %reading data from text file
%hide_data=char(cell_data);
bin_data=convert_binary(hide_data); %调用函数将数据转换为二进制
binary_data=bin_data’;
size_binary=size(binary_data,1)*size(binary_data,2);
bin=1;
a=1;
% %-------------------在图像块中嵌入数据---------------------
vals5 = repmat(uint8(0),size(S));
pd=1;
q=1;
ind=1;
rec_data(size_binary)=0;
for h=1:size_binary
rec_data(h)=0;
end

⛄三、运行结果

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

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]聂道聪,郑洪源.一种使用四叉树分割的分形信息隐藏算法[J].计算机应用与软件. 2015,32(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 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值