【最全的】直方图平移可逆信息隐藏原理及代码(matlab实现)

可逆信息隐藏

将秘密信息,隐藏在图像、音频和视频等载体中,以实现对其保护或秘密信息的传输。接收者可以恢复原始图像,并提取出秘密信息。

直方图

随机一张png图像的直方图

每一幅图像都有它的直方图,横坐标是灰度值,纵坐标是该灰度值对应的像素点的数量。直方图中的每一个竖条就称为一个bin。一幅直方图中最高的那个点,就称为峰点P。最低的那个点(通常为0),叫做零点Z。

直方图平移

将峰点与零点之间的所有bin向左或者向右平移一位,那么就多出来一个空白的bin。我们可以利用这个bin来嵌入秘密信息。

具体做法为:
若P>Z,则将Z+1到P-1的所有bin向左平移一位;这样P-1的bin就空出来了
若P<Z,则将P+1到Z-1的所有bin向右平移一位;这样P+1的bin就空出来了

对应在代码中的操作,就是判断某个点的灰度值是否在p~z之间,然后对应灰度值加1或者减1即可。

信息嵌入

在这里插入图片描述

计算机中存储的信息都是二进制的,要么是0,要么是1。以P>Z为例,由于P-1的bin空出来了。于是我们把为0的秘密信息存放在灰度值为P的像素中,把为1的秘密信息存在灰度值为P-1的像素中。
具体的代码操作,就是依次找到图像中灰度值为P的像素点,若要嵌入的秘密信息为0,则该点的灰度值不变。若要嵌入的秘密信息为1,则该点的灰度值减1。在图像中的显示,就相当于把峰值点的bin切分成了两部分,一部分嵌入秘密信息0的还在P位置,另一部分嵌入秘密信息1的在P-1的位置。由于P-1的灰度值已经被空出来了(直方图平移), 所以我们这样操作是可以恢复原始信息与原始图像的。

(当P<Z时,P+1的bin空出来了,在P像素中嵌入0,在P+1中嵌入1,其他操作相同。)

信息提取

提取信息时,我们找到图中所有灰度值为P,和P-1的像素。对于灰度值为P的像素提取信息0,对于灰度值为P-1的像素提取秘密信息1。如此一来就能恢复秘密信息了。
(当P<Z时,在P像素中提取0,在P+1中提取1,其他操作相同。)

图像恢复

把位于P和Z之间的所有bin相应地往回平移一位即可。

最后附上matlab代码一份,如有错误还请指正。(本实验采用的是灰度图像,灰度值在0—255之间)

% 直方图平移

clear;clc;
% img_org为原始图像,img也是原始图像,用于接下来的一系列操作,把字符串换成你要处理的图片
img_org = imread('1.png');
img = img_org;
[M,N] = size(img);

% 将图像的直方图存储为数组,graylevel代表灰度值,counts代表每一灰度对应的像素数量 
[counts, graylevel] = imhist(img);
[maxcount,maxgraylevel] = max(counts);

% 找到count为0的点,若没有,就把灰度值为254的点的灰度值改为255,由此空出254的位置
mingraylevel = 0;
flag = true;
for i=1:length(graylevel)
    if(counts(i)==0 && flag)
        mingraylevel = i;
        flag=false;
    end
end
% if(flag==false)
  • 23
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值