基于matlab的信息隐藏代码实现
信息隐藏实验三LSB图像信息隐藏剖析

实验三:LSB图像信息隐藏一、实验目的了解信息隐藏中最常用的LSB算法的特点,掌握LSB算法原理,设计并实现一种基于图像的LSB隐藏算法;了解如何通过峰值信噪比来对图像进行客观评价,并计算峰值信噪比值。
二、实验环境(1)Windows 7操作系统;(2)MATLAB R2012b版本软件;(3)BMP格式灰度图像文件。
三、原理简介任何多媒体信息在数字化时都会产生物理随机噪声,而人的感官系统对这些随机噪声并不敏感。
替换技术就是利用这个原理,通过使用秘密信息比特替换随机噪声,从而实现信息隐藏目的。
在BMP灰度图像的位平面中,每个像素值为8比特二进制,表示该点亮度。
图像高位平面对图像感官质量起主要作用,去除图像最低几个位平面并不会造成画面质量的明显下降。
利用这个原理可用秘密信息(或称水印信息)替代载体图像低位平面以实现信息嵌入。
本算法选用最低位平面来嵌入秘密信息。
最低位平面对图像的视觉效果影响最轻微,但很容易受噪声影响和攻击,可采用冗余嵌入的方式来增强稳健性加以解决,即在一个区域(多个像素)中嵌入相同的信息,提取时根据该区域中的所有像素判断。
四、实验步骤1. 隐藏提取及测试算法分为三个部分实现:(1)隐藏算法;(2)提取算法;(3)测试脚本。
1)隐藏算法源代码hide_lis.m如下:function o = hide_lsb(block,data,I)%function o = hide_lsb(block,data,I)%隐藏提取及测试%block:隐藏的最小分块大小%data:秘密信息%I:原始载体si = size(I);lend = length(data);N = floor(si(2)/block(2));%将图像划分为M*N个小块M = min(floor(si(1)/block(1)),ceil(lend/N));o = I;for i = 0 : M-1 %计算每小块隐藏的秘密信息rst = i*block(1) + 1;red = (i+1)*block(1);for j = 0 : N-1 %计算每小块隐藏的秘密信息的序号idx = i*N + j + 1;if idx > lendbreak;end%取每小块隐藏的秘密信息bit = data(idx);%计算每小块水平方向起止位置cst = j*block(2) + 1;ced = (j+1)*block(2);%将每小块最低位平面替换为秘密信息o(rst:red,cst:ced) = bitset(o(rst:red,cst:ced),1,bit);endend2)提取算法源代码dh_lsb.m如下:function out = dh_lsb(block,I)%function out = dh_lsb(block,I)%源代码dh_lsb.m如下:%block:隐藏的最小分块大小%I:携密载体si = size(I);%将图像划分为M*N个小块N = floor(si(2)/block(2));M = floor(si(1)/block(2));out = [];%计算比特1判决阀值:每小块半数以上元素隐藏是比特1时,判决该小块嵌入信息为1thr = ceil((block(1)*block(2) + 1)/2);idx = 0;for i = 0 : M-1%计算每小块垂直方向起止位置rst = i*block(1) + 1;red = (i+1)*block(1);for j = 0 : N-1%计算每小块将要数据的秘密信息的序号idx = i*N + j + 1;%计算每小块水平方向起止位置cst = j*block(2) + 1;ced = (j + 1)*block(2);%提取小块最低位平面,统计1比特个数,判决输出秘密信息 tmp = sum(sum(bitget(I(rst : red,cst : ced),1)));if (tmp >= thr)out(idx) = 1;elseout(idx) = 0;endendend3)测试脚本源代码test.m如下:fid = 1;len = 10;%随机生成要隐藏的秘密信息d = randsrc(1,len,[0 1]);block = [3,3];[fn,pn] = uigetfile({'* .bmp','bmp file(* .bmp)';},'选择载体');s = imread(strcat(pn,fn));ss = size(s);if (length(ss) >= 3)I = rgb2gray(s);elseI = s;endsi = size(I);sN = floor(si(1)/block(1))*floor(si(2)/block(2));tN = length(d);%如果载体图像尺寸不足以隐藏秘密信息,则在垂直方向上复制填充图像if sN < tNmultiple = ceil(tN/sN);tmp = [];for i = 1 : multipletmp = [tmp;I];endI = tmp;end%调用隐藏算法,把携密载体写至硬盘stegoed = hide_lsb(block,d,I);imwrite(stegoed,'hide.bmp','bmp');[fn,pn] = uigetfile({'*.bmp','bmp file(*.bmp)';},'选择隐蔽载体');y = imread(strcat(pn,fn));sy = size(y);if (length(sy) > 3)I = rgb2gray(y);elseI=y;end%调用提取算法,获得秘密信息out = dh_lsb(block,I);%计算误码率len = min(length(d),length(out));rate = sum(abs(out(1:len)-d(1:len)))/len;y = 1 - rate;fprintf(fid,'LSB:len:% d\t error rate:% f\t error num:% d\n',len,rate,len*rate);2. 计算峰值信噪比(1)峰值信噪比定义:2,2,,,,max ()x y x y x y x yx y p PSNR XY p p =-∑(2)峰值信噪比函数。
信息隐藏技术_实验报告(3篇)

第1篇一、实验目的1. 了解信息隐藏技术的基本原理和实现方法。
2. 掌握信息隐藏技术在图像、音频和视频等数字媒体中的应用。
3. 通过实验验证信息隐藏技术的有效性和安全性。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3. 库:OpenCV、scikit-image、numpy、matplotlib三、实验内容1. 图像信息隐藏2. 音频信息隐藏3. 视频信息隐藏四、实验步骤1. 图像信息隐藏(1)选择一幅图像作为宿主图像,并选择一幅图像作为水印图像。
(2)将水印图像转换为二值图像。
(3)对宿主图像进行分块处理,将每个块转换为二值图像。
(4)根据密钥对水印图像进行置乱,提高安全性。
(5)将置乱后的水印图像嵌入到宿主图像的对应块中。
(6)提取水印图像,并与原始水印图像进行对比。
2. 音频信息隐藏(1)选择一段音频作为宿主音频,并选择一段音频作为水印音频。
(2)对宿主音频和水印音频进行分帧处理。
(3)根据密钥对水印音频进行置乱,提高安全性。
(4)将置乱后的水印音频嵌入到宿主音频的对应帧中。
(5)提取水印音频,并与原始水印音频进行对比。
3. 视频信息隐藏(1)选择一段视频作为宿主视频,并选择一段视频作为水印视频。
(2)对宿主视频和水印视频进行帧提取。
(3)根据密钥对水印视频进行置乱,提高安全性。
(4)将置乱后的水印视频嵌入到宿主视频的对应帧中。
(5)提取水印视频,并与原始水印视频进行对比。
五、实验结果与分析1. 图像信息隐藏实验结果表明,嵌入水印后的图像与原始图像在视觉效果上几乎没有差异,水印的嵌入效果良好。
同时,提取的水印图像与原始水印图像完全一致,证明了信息隐藏技术的有效性。
2. 音频信息隐藏实验结果表明,嵌入水印后的音频与原始音频在音质上几乎没有差异,水印的嵌入效果良好。
同时,提取的水印音频与原始水印音频完全一致,证明了信息隐藏技术的有效性。
3. 视频信息隐藏实验结果表明,嵌入水印后的视频与原始视频在视觉效果上几乎没有差异,水印的嵌入效果良好。
如何进行信息隐藏的Matlab实现

如何进行信息隐藏的Matlab实现引言信息隐藏是一种将数据嵌入到其他载体中的技术,被广泛应用于数字版权保护、信息安全和隐私保护等领域。
Matlab作为一种强大的数值计算和数据可视化工具,提供了许多用于实现信息隐藏的函数和工具箱。
本文将介绍如何使用Matlab实现信息隐藏的基本原理、常用方法以及相关应用。
一、基本原理信息隐藏的基本原理是将要隐藏的信息嵌入到一个载体中,使其在外观上与原始载体无异。
常用的载体包括图像、音频和视频等。
在Matlab中,图像的处理是最为常见的应用场景之一。
图像信息隐藏的基本原理是在载体图像的像素值中嵌入待隐藏的信息。
通常,我们可以使用图像的最低有效位(LSB)进行嵌入操作。
LSB是指图像中像素值的最后一位,一般情况下,这个位上的变化对人眼来说是不可察觉的。
二、常用方法1. LSB替换法LSB替换法是信息隐藏中最为简单且常用的方法之一。
其基本原理是将待隐藏的数据按照一定的规则嵌入到载体图像的LSB位置。
具体步骤如下:(1)将待隐藏的数据转换为二进制形式;(2)读入载体图像,并将其像素值转换为二进制形式;(3)将待隐藏数据的二进制位逐一替换掉载体图像像素值的LSB位;(4)将嵌入了数据的载体图像保存至新文件。
2. 频域法频域法是一种将待隐藏的信息转换到载体图像的频域表示中,以实现更好的隐藏效果的方法。
其基本原理是将待隐藏的数据嵌入到载体图像的频域系数中,即对原始图像进行傅里叶变换,然后在频域中进行数据嵌入。
具体步骤如下:(1)载入待嵌入数据和载体图像;(2)对载体图像进行傅里叶变换,得到频域系数;(3)将待隐藏数据转换为频域表示;(4)将待隐藏数据嵌入到载体图像的频域系数中;(5)进行逆傅里叶变换,得到嵌入了数据的图像。
三、Matlab实现在Matlab中,可以使用以下函数和工具箱来实现信息隐藏操作:1. imread和imwrite函数:用于读取和保存图像;2. fft和ifft函数:用于傅里叶变换和逆傅里叶变换;3. bitget和bitset函数:用于获取和设置特定位上的二进制值。
LSB图像信息隐藏实验

学号:姓名:专业年级班级:实验室:组别:实验日期:课程名称保密技术实验实验课时实验项目名称和序号1.LSB图像信息隐藏实验同组者姓名实验目的1. 掌握对图像的基本操作。
2. 能够用 LSB 算法对图像进行信息隐藏3. 能够用 LSB 提取算法提取隐藏进图像的信息4. 能够反映 jpeg 压缩率与误码率之间的关系实验环境Windows+matlab实验内容和原理1.用 MATLAB 函数实现 LSB 信息隐藏和提取2.分析了 LSB 算法的抗攻击能力3.能随机选择嵌入位(考虑安全性因素)实验步骤方法关键代码实验算法 1:LSB 嵌入1.读取一副 256*256 大小的图片,判断是否为 RGB 图像。
若为 RGB 图像,则读取图像的一层信息(如 R 层)。
通过读取图像的尺寸大小来判断是否为RGB图像。
RGB图像是三维多彩图,size有3个参数,最小参数是3,只要判断读取到的图像大小大于2,就确定读入的是RBG图像2.以二进制形式读取要嵌入到图片里的消息。
并读取消息的长度(嵌入消息的长度不能超过图像位数)。
3.产生与消息长度一致的一串随机数(不能相同)。
自定义一个randinterval函数来实现伪随机数的生成产生的伪随机数是代表消息要隐藏的像素位置(行和列的信息)随机数代码:function [row,col]=randinterval(matrix,count,key)%randinterval.m%参数说明%matrix是载体矩阵,即要隐藏信息的图层%cout为要嵌入信息的像素数量%key为自定义秘钥,随机种子[m,n] = size(matrix);interval1 = floor(m * n/(count+eps)) + 1;interval2 = interval1 - 2;if interval2 == 0error('载体太小不能把秘密信息隐藏进去');endrand('seed',key);a = rand(1, count);row = zeros([1 count]);col = zeros([1 count]);r = 1;c = 1;row(1,1) = r;col(1,1) = c;for i =2:countif a(i) >= 0.5c = c + interval1;elsec = c + interval2;endif c > nr = r + 1;if r > merror('载体太小不能把秘密信息隐藏进去');endc = mod(c, n);if c == 0c = 1;endendrow(1, i) = r;col(1, i) = c;end4.按照产生的随机数的序列依次将图片层的最后一位改为消息的信息。
图像隐藏 MATLAB实验报告

图像隐藏MATLAB实验报告1. 引言图像隐藏是一种将秘密信息嵌入到数字图像中的技术。
通过这种技术,我们可以将信息隐藏在覆盖物看起来像是普通图像的数字图像中。
图像隐藏有许多应用领域,包括数字水印、版权保护和信息隐蔽通信等。
在这个实验中,我们将使用MATLAB实现图像隐藏的过程,并观察性能和影响因素。
2. 实验方法2.1 准备工作在开始实验之前,我们需要准备以下工作:- 安装MATLAB并确保其正确配置。
- 准备一些用作载体的数字图像。
在本实验中,我选择了一张常见的风景照片作为载体图像。
- 准备需要隐藏的秘密信息。
在本实验中,我选择了一段文字作为秘密信息。
2.2 图像隐藏过程图像隐藏的过程可以分为以下几个步骤:1. 加载载体图像和秘密信息。
2. 将载体图像转换为灰度图像。
这是因为在灰度图像中隐藏信息相对较简单且具有较好的效果。
3. 对灰度图像进行傅里叶变换。
这一步是为了将图像从空间域转换到频率域,以便于接下来的嵌入操作。
4. 将秘密信息嵌入到频率域图像中。
这一步需要选择适当的嵌入算法和参数,以在保证图像可视性的情况下实现信息的隐藏。
5. 对嵌入了秘密信息的频率域图像进行逆傅里叶变换,将图像转换回空间域。
6. 将隐藏了秘密信息的图像保存到文件中。
3. 实验结果经过以上步骤,我成功地实现了图像隐藏的过程,并观察到了以下结果。
首先,我将秘密信息隐藏到载体图像中,并将隐藏后的图像显示出来。
通过肉眼观察,我无法看出图像中隐藏了秘密信息,即图像的可视性并未受到明显的影响。
其次,我执行了一系列实验,通过改变隐藏算法和参数,以观察不同因素对隐藏效果的影响。
实验结果显示,隐藏算法和参数的选择对图像的可视性和隐藏效果都有显著的影响。
一些算法和参数可能会导致隐藏的秘密信息更难以被发现,而另一些则可能导致图像质量下降。
此外,我还测试了对隐藏信息进行提取的过程。
通过对隐藏了秘密信息的图像执行一系列解密操作,我成功地提取出了隐藏的秘密信息,并与预先准备好的原始秘密信息进行了比对。
可逆信息隐藏hs算法matlab

可逆信息隐藏是指在保证原始载体数据不受损的情况下,将需要隐藏的信息嵌入到载体数据中,并且可以在需要时将隐藏的信息提取出来。
可逆信息隐藏的应用场景非常广泛,可以用于数字水印、版权保护、隐私保护等领域。
其中,HS算法是一种经典的可逆信息隐藏算法,而MATLAB是一种功能强大的科学计算软件,结合两者可以实现对图像信息的可逆隐藏和提取。
1. 可逆信息隐藏原理可逆信息隐藏是利用载体图像的一些隐含特性来隐藏需要传输的信息,在不损害载体图像质量的前提下,能够完整、准确地提取出隐藏的信息。
可逆信息隐藏主要包括隐写与加密两个主要过程。
隐写是指将需要隐藏的信息写入到载体图像中,而加密则是对隐藏的信息进行加密处理,增强信息的安全性。
2. HS算法原理HS算法是一种经典的可逆信息隐藏算法,其核心思想是利用图像的直方图来隐藏信息。
具体来说,HS算法首先对载体图像进行预处理,然后通过对直方图的调整来实现信息的隐藏。
在提取信息时,再根据调整后的直方图来还原隐藏的信息。
HS算法的优点是对图像没有任何损害,并且隐藏的信息可以完整提取出来。
3. MATLAB在可逆信息隐藏中的应用MATLAB作为一个功能强大的科学计算软件,提供了丰富的图像处理和加密算法库,非常适合用于可逆信息隐藏的实现。
利用MATLAB,可以方便地对图像进行处理、隐藏信息,并且提供了丰富的工具函数,能够直观地展示信息隐藏的效果。
4. 可逆信息隐藏HS算法在MATLAB中的实现通过MATLAB可以很方便地实现可逆信息隐藏HS算法。
需要对载体图像进行预处理,以便后续信息的隐藏。
利用HS算法将需要隐藏的信息写入到载体图像中,并对隐藏的信息进行加密处理。
在需要提取信息时,通过对载体图像的处理和对修改后的载体图像进行比对,可以成功地提取出隐藏的信息。
5. 代码示例以下是一个简单的MATLAB代码示例,演示了如何使用HS算法实现可逆信息隐藏:```matlab读取载体图像carrier_image = imread('carrier.png');进行预处理processed_image = preprocess(carrier_image);隐藏信息hidden_image = HS_algorithm(processed_image,'hidden_message');提取隐藏的信息extracted_message = extract_hidden_message(hidden_image);显示提取的信息disp(extracted_message);```通过以上代码示例,可以清晰地看到MATLAB如何便捷地实现了可逆信息隐藏HS算法的过程,并成功地提取出隐藏的信息。
(绝对可运行)加密图像中的可逆数据隐藏算法matlab代码(基于张新鹏教授的算法)
%This is the program of Reversible Data Hiding in Encrypted Domain clc;clear;%===============Read image===========================original_p=rgb2gray(imread('LENA.tif'));[m,n]=size(original_p);%==============Image encryption====================== random_bits=rand(m,n*8)<=0.5;%伪随机序列for i=1:mfor j=1:ns=0;for k=0:7b(k+1)=mod(fix(double(origi nal_p(i,j))/(2Ak)),2);eb(k+1)=xor(b(k+1),random_bits(i,8*j+k-7)); s=s+eb(k+1)*(2A k);endencrypted_image(i,j)=s;endendfigure(1);subplot(1,2,1);imshow(original_p);hold on;title('Original image','fontsize',16);subplot(1,2,2);encrypted_image=uint8(encrypted_image);imshow(encrypted_image);title('Encrypted image','fontsize',16);%================Data embedding======================size=8; %分块大小N=6;%置乱周期number1=3;number2=N-number1;lim_row=fix(m/size); %图像的分块数lim_col=fix(n/size); %图像的分块数bitts=3;watermessage=rand(lim_row,lim_col)<0.5; %水印信息pseudo_randomly for i=1:lim_rowfor j=1:lim_col block_image{i,j}=encrypted_image((size*i-size+1):size*i,(size*j-size+1):size*j); % 分块for k=1:sizefor t=1:sizeindex=arnold(k,t,size,number1);%arnold is permutateion function;arno_block_image{i,j}(index(1)+1,index(2)+1)=block_image{i,j}(k,t); end end%数据嵌入sum0=zeros(size/2,size); if watermessage(i,j)==0 for k=0:7bbb{k+1}=mod(fix(double(arno_block_image{i,j}(1:size/ 2,:))/(2你)),2);if k<bitts bbb{k+1}=~bbb{k+1};endsum0=sum0+bbb{k+1}*(2A k);enddata_image{i,j}=[sum0;double(arno_block_image{i,j}(size/ 2+1:size,:))];endsum1=zeros(size/2,size);if watermessage(i,j)==1for k=0:7 bbb{k+1}=mod(fix(double(arno_block_image{i,j}(size/ 2+1:size,:))/(2Ak)),2);if k<bittsbbb{k+1}=~bbb{k+1};endsum1=sum1+bbb{k+1}*(2Ak);enddata_image{i,j}=[double(arno_block_image{i,j}(1:size/ 2,:));sum1];endfor k=1:sizefor t=1:size index=arnold(k,t,size,number2);%arnold is permutateion function;re_data_image{i,j}(index(1)+1,index(2)+1)=data_image{i,j}(k,t);endend%合成嵌入数据后的图像data_en_image((size*i-size+1):size*i,(size*j-size+1):size*j)=re_data_image{i,j};endend%=====Encrypt image which contains data====for i=1:lim_row*sizefor j=1:lim_col*sizes=0;for k=0:7b(k+1)=mod(fix(data_en_image(i,j)/(2Ak)),2);eb(k+1)=xor(b(k+1),random_bits(i,8*j+k-7));s=s+eb(k+1)*(2A k);endde_data_image(i,j)=s;endendfigure(2);hold on;subplot(1,2,1);imshow(original_p);title('Original image','fontsize',16);subplot(1,2,2);imshow(uint8(de_data_image));title('Decrypted image contains data','fontsize',16);%直接解密图像的峰值信噪比sumsss=0;for i=1:lim_row*sizefor j=1:lim_col*size sumsss=(de_data_image(i,j)-double(original_p(i,j)))A2+sumsss;endendmse=sumsss/((lim_row*size)*(lim_row*size));psnr=10*log10(255A2 /mse);%======Extract data and recover image=======for i=1:lim_rowfor j=1:lim_col block_de_image{i,j}=de_data_image((size*i-size+1):size*i,(size*j-size+1):size*j);%分块for k=1:sizefor t=1:size index=arnold(k,t,size,number1);%arnold is permutateion function;ar_block_de_image{i,j}(index(1)+1,index(2)+1)=block_de_image{i,j}(k,t);endendsum0=zeros(size/2,size);sum1=zeros(size/2,size);for k=0:7bbbO{k+1}=mod(fix(ar_block_de_image{i,j}(1:size/ 2,:)/(2你)),2);bbb1{k+1}=mod(fix(ar_block_de_image{i,j}(size/ 2+1:size,:)/(2A k)),2);if k<bittsbbb0{k+1}=~bbb0{k+1};bbb1{k+1}=~bbb1{k+1};endsum0=sum0+bbb0{k+1}*(2Ak);sum1=sum1+bbb1{k+1}*(2Ak);endar_H0_image{i,j}=[sum0;ar_block_de_image{i,j}(size/ 2+1:size,:)];ar_H1_image{i,j}=[ar_block_de_image{i,j}(1:size/ 2,:);sum1];for k=1:sizefor t=1:size index=arnold(k,t,size,number2);%arnold is permutateion function;H0_image{i,j}(index(1)+1,index(2)+1)=ar_H0_image{i,j}(k,t);H1_image{i,j}(index(1)+1,index(2)+1)=ar_H1_image{i,j}(k,t);endendf0=0;f1=0;for u=2:size-1for v=2:size-1f0=f0+abs(H0_image{i,j}(u,v)-(H0_image{i,j}(u-1,v)+H0_image{i,j}(u,v-1)+H0_image{i,j}(u+1,v)+H0_image{i,j}(u,v+1))/4);f1=f1+abs(H1_image{i,j}(u,v)-(H1_image{i,j}(u-1,v)+H1_image{i,j}(u,v-1)+H1_image{i,j}(u+1,v)+H1_image{i,j}(u,v+1))/4);endendif (f0-f1)<0extract_bits(i,j)=0; recover_image(size*i-size+1:size*i,size*j-size+1:size*j)=H0_image{i,j};elseextract_bits(i,j)=1; recover_image(size*i-size+1:size*i,size*j-size+1:size*j)=H1_image{i,j};endendendfigure(3);subplot(1,2,1);imshow(original_p);hold on;title('Original image','fontsize',16); subplot(1,2,2);recover_image=uint8(recover_image); imshow(recover_image);hold on; title('Recovered image','fontsize',16);%==============analysis============ diff=original_p(1:lim_row*size,1:lim_col*size)-recover_image;counts=0;for i=1:lim_rowfor j=1:lim_col block_diff{i,j}=diff((size*i-size+1):size*i,(size*j-size+1):size*j); %分块if extract_bits(i,j)~=watermessage(i,j) block_diff{i,j}=ones(size,size)*255;counts=counts+1;else block_diff{i,j}=original_p((size*i-size+1):size*i,(size*j-size+1):size*j);end diff_image((size*i-size+1):size*i,(size*j-size+1):size*j)=block_diff{i,j};endend figure(4); imshow(diff_image); hold on;%title('Blocks of incorrect','fontsize',16); %错误率与分块大小的关系rate=counts/((lim_row)*(lim_col))。
(完整word版)信息隐藏实验七DCT域图像水印
实验七DCT域图像水印(一)实验目的了解频域水印的特点,掌握基于DCT系数关系的图像水印算法原理,设计并实现一种基于DCT域的图像水印算法。
(二)实验环境1、W indows xp操作系统2、M atlab 7.1版本软件3、B MP图像(三)实验原理1、嵌入信息利用载体中两个特定DCT系数的相对大小来表示隐藏的信息。
载体图像分为8*8分块,进行二维DCT变换,分别选择其中的两个位置,比如用(u1, v1)和(u2,v2)代表所选定的两个系数的坐标。
如果Bi (u1,v1)<Bi (u2,v2),代表隐藏了1;如果相反,贝U交换两系数。
如果Bi (u1,v2)>Bi (u2,v2),代表隐藏0;如果相反,则交换两系数2、提取信息提取的时候接收者对包含水印信息的图像文件进行二维DCT变换,比较每一块中约定位置的DCT系数值,根据其相对大小,得到隐藏信息的比特串,从而恢复出秘密信息。
3、特殊处理引入一个Alpha变量对系数的差值进行控制,将两个系数的差值放大,可以保证提取秘密信息的正确性。
(四)实验步骤1、嵌入秘密信息。
2、提取秘密信息。
(五)实验截图1、图像显示截图原始图像 嵌入水印图像结果:所隐藏的信息为‘ 0123456789(六)代码附录图1-1原始图像和携密图像的对比图结果:在显示上两者基本无差别2、所含秘密信息截图图1-2提取秘密信息1、嵌入秘密信息clc;clear;msgfid=fope n('hidde n.txt','r');%打开秘密文件,读入秘密信息[msg,co un t]=fread(msgfid);coun t=co un t*8;alpha=0.02;fclose(msgfid);msg=str2bit(msg)';[le n, col]=size(msg);io=imread('le na.bmp');% 读取载体图像io=double(io)/255;output=io;i仁io(:,:,1)%取图像的一层来隐藏T=dctmtx(8);%对图像进行分块DCTrgb=blkproc(i1,[8,8],'P1*x*P2',T,T');% 对图像分块进行DCT 变换[row,col]=size(DCTrgb);row=floor(row/8);col=floor(col/8);%顺序信息嵌入temp=0;for i=1:co untif msg(i,1)==0if DCTrgb(i+4,i+1)<DCTrgb(i+3,i+2)% 选择(5,2)和(4,3)这一对系数temp=DCTrgb(i+4,i+1);DCTrgb(i+4,i+1)=DCTrgb(i+3,i+2);DCTrgb(i+3,i+2)=temp;endelseif DCTrgb(i+4,i+1)>DCTrgb(i+3,i+2) temp=DCTrgb(i+4,i+1);DCTrgb(i+4,i+1)=DCTrgb(i+3,i+2);DCTrgb(i+3,i+2)=temp;endendif DCTrgb(i+4,i+1)<DCTrgb(i+3,i+2)DCTrgb(i+4,i+1)=DCTrgb(i+3,i+2)-alpha;% 将原本小的系数调整更小,使得系数差别变大elseDCTrgb(i+3,i+2)=DCTrgb(i+3,i+2)-alpha;endend%将信息写回并保存wi=blkproc(DCTrgb,[8,8],'P1*x*P2',T',T);% 对DCTrgb 进行逆变换output=io;output(:,:,1)=wi;imwrite(output,'le na1.bmp');figure;subplot(1,2,1);imshow('lena.bmp');title('原始图像');subplot(1,2,2);imshow('lena1.bmp');title('嵌入水印图像');2、提取秘密信息clc;clear;wi=imread('le na1.bmp');wi=double(wi)/255;wi=wi(:,:,1)%取图像的一层来提取T=dctmtx(8);%对图像进行分块DCTcheck=blkproc(wi,[8,8],'P1*x*P2',T,T');% 对图像分块进行DCT 变换for i=1:80%80为隐藏的秘密信息的比特数if DCTcheck(i+4,i+1)v=DCTcheck(i+3,i+2)message(i,1)=1;elsemessage(i,1)=0;endendout=bit2str(message);fid=fope n('message.txt','wt');fwrite(fid,out);fclose(fid);(七)实验心得通过此次的实验,了解了频域水印的特点。
Matlab编程实现LSB信息的隐藏与提取
frit i= 素序 列 的个 数 : +) o( ; 像 = < i + S— C / i 整 个 图 像 的 像 素集 合 , I 我 们 顺 序 选取 的要 隐 l i / 为 C S是 / 信 息 的像 素 的集 合 / 藏
e df r n o
2 隐秘 原 理
L B 的嵌 入 方 法 是 首 先将 要 隐 藏 的 信 息 以二 进 制 的形 式 读 s 人 .再 按 照 一 定 的 算 法选 择 它 们 要 嵌 入 的 位 置 。如 果 要 隐藏 的
n k /吏用 种子 k随 机 生 成 序 列 k — 1 / f i fri 1 i= 密信 息 长 度 : + o (= ; 秘 < i ) +
S + n 一Cn +IM i _
n-n k * + i
e dfr n o
信 息 的某 一 位 为 1 ,则 它要 嵌 入 的 载 体 图像 相 应 位 置 的 像 素 值
e dfr n o
算 法 二 :随 即 选 取像 素 点嵌 入算 法 ,即选 } 的 嵌 入 信 息 的 } { 像 素 位 置 是 随 机 的 ,这样 可 以增 加 隐 秘 信 息 的 不 可 见性 。
秘 密 消 息 的嵌 入 :
和 运 算 能 力 而 闻 名 ,用 以 实 现 图像 的处 理 非 常适 合 。 在 此 介 绍 了一 种 简 单 的 图 像 空 域 隐 藏 算 法 一L B ( 不 重 S 最 要 位 ) 隐秘算 法 。主要 是将 隐秘 信息 嵌 入到 图像 最 不 容易 发 觉 的 像 素位 ,即最 不 重要 位 。使 用 此算 法 的 优点 是 隐藏 效果 好 ,不会 破 坏原 图像 的效 果 ,隐 藏信 息 多等 ,从 而达 到 隐藏 信息 的 目的 。
LSB算法的MATLAB实现
LSB算法的MATLAB实现LSB(Least Significant Bit)算法是一种隐写术,用于在图像或音频中隐藏秘密信息。
在这种方法中,最不显著的比特位被用来存储隐藏的数据,这样可以尽量不对原始图像或音频造成明显的变化。
下面是MATLAB中实现LSB算法的步骤:1. 读入原始图像:使用`imread`函数将图像读入到MATLAB中。
例如,`image = imread('original_image.png');`2. 将图像转换为灰度图像:如果原始图像是彩色图像,则需要将其转换为灰度图像。
可以使用`rgb2gray`函数实现。
例如,`gray_image = rgb2gray(image);`3.将隐藏信息转换为二进制:将要隐藏的信息转换为二进制,并将其存储为一个向量或字符串。
4.检查隐藏信息长度:检查隐藏信息的长度是否小于图像中可用的像素数量。
如果隐藏信息过长,可能无法完全嵌入到图像中。
如果需要,可以考虑压缩或加密隐藏信息。
5.将隐藏信息嵌入到图像中:对于每个像素,在最不显著的比特位中存储隐藏信息。
可以使用位操作和移位操作来实现。
例如,如果要将隐藏信息的第一个比特位嵌入到像素的最不显著比特位上,可以使用以下代码:```matlabbit = 1; % 要嵌入的隐藏信息比特pixel = 100; % 图像中的一个像素值new_pixel = bitset(pixel, 1, bit); % 将bit设置为pixel的第一个比特位```6.将修改后的像素重新组装为图像:重复上述步骤,对每个像素进行处理,然后将修改后的像素重新组装为一个新的图像。
7. 保存隐藏信息的图像:使用`imwrite`函数将隐藏信息的图像保存到硬盘上。
例如,`imwrite(new_image, 'hidden_image.png');`8.提取隐藏信息:如果需要,可以使用类似的方法从隐藏信息的图像中提取出隐藏的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab期中作业标题:基于matlab的信息隐藏代码实现姓名:********班级:********学号:********目录摘要----------------------------------------------------------------------------------------------------------------------------- - 2 -前言----------------------------------------------------------------------------------------------------------------------------- - 2 -一、图像隐藏技术的研究现状 ------------------------------------------------------------------------------------ - 2 -二、实现图像隐藏的主要算法 ------------------------------------------------------------------------------------ - 4 -三、基于行列变换的图像置乱与反置乱算法 ---------------------------------------------------------------- - 4 -3.1 图像置乱算法 ----------------------------------------------------------------------------------------------------- - 4 -3.2 图像反置乱算法-------------------------------------------------------------------------------------------------- - 5 -四、基于m序列的图像加密与解密算法----------------------------------------------------------------------- - 5 -五、相关程序代码及运行结果 ------------------------------------------------------------------------------------ - 5 -5.1 源代码 --------------------------------------------------------------------------------------------------------------- - 5 -5.2 运行结果 ------------------------------------------------------------------------------------------------------------ - 7 -六、参考文献------------------------------------------------------------------------------------------------------------ - 8 -七、总结 ------------------------------------------------------------------------------------------------------------------ - 8 -摘要【摘要】近几年来,国际上提出一种新的关于信息安全的概念——信息隐藏技术。
所谓信息隐藏是利用多媒体信息普遍存在的冗余特性,将秘密信息隐藏到一般的非秘密数字媒体文件(如图像、声音、文档文件,通常称之为掩护媒体)中,从而不让对手发觉的一种方法。
隐藏的动作称为嵌入,掩护媒体经嵌入信息后称为伪装媒体。
信息隐藏的本质是:利用人眼(或人耳)是一个不太灵敏的检测器,将信息本身的存在性隐藏起来,使人察觉不到有信息隐藏在媒体之中。
由于人对视觉的不敏感性及图像文件本身的数据量很大,因此,图像文件是信息隐藏很好的载体。
【关键字】信息安全信息隐藏图像文件载体前言现代信息隐藏技术自上个世纪九十年代中期出现以来,已经成为数字通信、信息安全和版权保护领域的重要研究课题,并得到了越来越广泛的应用。
目前利用数字图像作为隐秘信息的载体已经成为主要的信息隐藏技术之一,其基本原理是利用人体感觉器官对数字图像的感觉冗余,将被隐藏的图像数据嵌入在某种载体图像中,嵌入后隐秘图像与原始的载体图像几乎没有任何视觉上的差别,很难被观察者和监视系统发现,从而可以保证机密信息传输的安全性。
可以预见,信息隐藏技术将是今后相当一段时间内的重要的隐蔽通信方式。
但是信息隐藏技术的发展也带来了一定的负面效果,据美国媒体透露,已经发现恐怖组织利用隐藏在图像中的信息传递联络情报,甚至将计算机病毒隐藏在载体图像中进行传输,这些都对国家安全和社会稳定产生了很大的威胁。
因此,研究对图像中可能存在的各种隐藏信息进行有效检测的方法已经迫在眉睫,因而基于图像的信息隐藏检测技术也就成为目前信息安全领域的重要研究课题。
一、图像隐藏技术的研究现状目前,图像信息隐藏技术可以分为空域法和频域法两大类。
空域法中使用最广泛和普遍的技术是像素最低比特位置换技术,即LSB技术,它是用隐藏信息比特位替换掉载体图像中最不重要的部分,如像素点灰度值或颜色值的低比特位,从而达到信息隐藏的目的。
这一方法的主要优点是嵌入算法和提取算法简单,隐藏信息量大和较好的不可见性,缺点是鲁棒性差,对图像的各种操作如压缩、剪切和加噪等都会使隐藏信息遭到破坏。
但是即便如此,LSB方法仍然以其高不可见性在隐蔽数据通信中得到了广泛的应用;频率域的图像隐藏算法大多使用扩展频谱通信技术,将图像隐藏在载体图像的不同频率分量上,因而具有更高的鲁棒性和不可见性。
事实上,一个有效的信息隐藏算法,无论是空域法还是频域法,都不会改变原始图像的视觉效果,但是却会改变其某种统计特征,包括空间域统计特征和频率域统计特征两种。
因而要实现真正意义上的盲检测,必须采用图像统计特征分析的方法。
根据检测所采用的统计特征的不同,将图像盲检测算法分为以下三种:(1)基于时空域统计特征分析的盲检测算法目前比较成熟的有Fridrich提出的RQP(Raw Quick Pair)检测法。
这种算法普遍采用的图像统计特征是图像相邻像素点之间的相关性,其理论基础是未嵌入隐藏信息的图像在直方图上相邻的数值(代表灰度、颜色值)之间没有任何明显规律,而隐藏信息后的直方图相邻值之间会出现明显的数值接近的规律,当信息隐藏量较大时,直方图相邻值之间几乎相等,并且这些相邻值只是互相变化而不改变两者之和。
至于这些算法所采用的检测模型,目前采用的主要是x2检验法。
它是通过直方图上相邻值的理论期望的概率分布(即在嵌入服从均匀分布信息后的相邻值概率分布)和实际概率分布(即载体图像中实际获得的相邻值概率分布)的对比,分析存在的偏差是否大于给定的阈值来判断是否存在隐藏信息。
另外,基于空域特征分析的盲检测算法还有A Westfeld等人提出的PoVs (Paris of Values)算法[4],基于稳健性统计特性和脆弱性统计特性的检测方法。
这些算法主要特点是一种针对图像本身而不是隐藏算法的检测方法,其优点是适用性广,可以对大多数采用LSB方法隐藏信息的图像进行检测。
但是这种算法的缺点是:只能对图像隐藏的可能性给出一个概率分布,检测效果受阈值选取的影响较大,而且当隐藏图像的颜色数超过载体图像本身像素数的50%时很难得到有效的检测效果。
另外,空域统计特征属于一阶统计数据,稳定性较差,现在已经有一些隐藏软件如OutGuess已经可以在不改变这种一阶统计数据的情况下隐藏信息。
(2)基于频域统计特征分析的盲检测算法目前应用较广的基于频域统计特征分析的盲检测算法是由Farid等人提出来的一种基于高阶统计量的检测模型[5] ,即小波变换盲检测算法。
它主要是针对采用频率方法进行信息隐藏图像的检测。
其基本思想是通过对大量图像信息使用QMFs(Quadrature Mirror Filters)进行小波变换分解,用可分离的低通和高通滤波器在图像的各个轴上生成垂直、水平和对角线方向上的子频带。
从这些子频带系数中归纳出它们在各方向和数值范围内的均值、方差、熵和斜率等统计数据,在此基础上使用分类器对这些统计数据进行分类,将没有隐藏信息的图像和含有隐藏信息的图像区分开来,从而达到隐藏信息盲检测的目的。
这种方法的优点是识别准确率高,缺点是算法较复杂,而且只是针对于图像本身来进行检测,缺乏通用性。
美国空军技术学院(AFIT)也从事了高阶统计量方面的研究,在小波变换检测算法的基础上提出了基于计算免疫系统的信息隐藏盲检测算[11],因而也是针对于频率域图像信息隐藏的检测。
这种算法的具体做法是:首先建立不含隐藏信息的图像和含有隐藏信息的载体图像数据库,并对库中所有图像进行小波分解得到所需的统计特征数据;其次引入以生物免疫系统为基础发展起来的计算免疫系统技术,将统计数据区分成活跃的本体和禁止或异常活跃的非本体,接着按计算免疫系统方法分类的要求,将统计特征编码成比特串,以随机选取的方式从种群中生成最初的检测器,使整个解空间都能被覆盖到,再以负选择来淘汰与本体发生碰撞的检测器;接着引入遗传算法,按照遗传算法的流程依次反复对特征向量进行随机抽取、杂交、变异、计算适合度值、类聚、自然选择等处理,直到生成成熟的检测器。
当形成成熟的检测器后,即可对被检测对象进行快速分类,将含有隐藏信息的图像检测出来,从而实现隐藏信息的盲检测。
这种隐藏信息检测算法弥补了小波变换检测算法的不足,通用性强,检测速度快,具有较好的应用前景。
另外,Niels Provos和Peter Honeyman等人提出了一种专门针对JPEG图像的信息隐藏盲检测算法[9,12] ,它采用的检测算法也是x 2检验法,只不过检测的统计特征不再是时空域的像素灰度或颜色值分布,而是频率域的DCT系数的分布。
该检测算法实现简单,具有很高的灵敏性,甚至可以检测到单个像素的改变,而且对于嵌入信息量较大的图像,还可以估计出嵌入信息的长度。
目前该算法能够检测出多种JPEG隐藏软件隐藏的图像,如JSteg,JPhide,OutGuess 等。
(3)基于空域和频域统计特征分析的盲检测算法目前能够同时利用图像的空域和频域统计特征进行盲检测的算法主要有两种,一种是Lin G S和Lie W N提出的同时适用于时空域和频率域的图像信息盲检测算法,其主要实现过程是:在时空域,它定义了一个描述相邻像素点之间灰度连续性和光滑性的特征量,成为梯度能量,当隐藏信息嵌入后会增加梯度能量;在频率域,定义了一个描述DCT系数的拉普拉斯分布,以描述频域图像的状态。