A. 数字图像LSB代码
LSB算法是数字图像信息隐藏应用较早较普遍的算法[3],是在图像信息的最不重要二进制位嵌入秘密信息。根据24位BMP图像文件的结构特点,每个文件只能非压缩地存放一幅彩色图像;文件头由54个字节的数据段组成,其中包含有该位图文件的类型、大小、图像尺寸及打印格式等;从第55个字节开始,是该文件的图像数据部分,由一系列的字节所组成,每连续3个字节便描述图像一个像素点的颜色信息,这三个字节分别代表蓝、绿、红三基色在此像素中的亮度。LSB算法是用图像数据部分每个字节中最低位来隐藏信息。这样每8个字节就可隐藏1个字节的信息[4]。
嵌入信息的方法为:首先,将待隐藏的秘密信息转化为二进制数据码流;然后,将BMP文件图像数据部分的每个字节的最低位替换为需隐藏的信息位。最后,原样复制其他不需要继续隐藏信息的原始数据。从对位图文件的分析,得知偏移量为0x06的4个字节为系统保留,可将被隐藏文件的大小写入该位置,以便提取信息时提前知道有用信息的长度,提高解码效率。对文件头部的其他50个字节,原样复制即可。隐藏过程如图1所示。
图1. LSB图像隐藏算法示意图
Fig.1 LSB data hiding algorithm
信息提取是把隐藏的信息从载体图像中读取出来,其过程和步骤正好与信息嵌入相反。首先,到隐藏信息后的图像文件的0x06处读取被隐藏信息的字节数;然后,从0x36处开始,求取BMP文件图像数据部分每个字节最低位,每够8个字节,便将输出的8位二进制数组成一个字节。经过上述处理,得到一系列8位二进制数,便是隐藏信息的代码,将代码转换成文本、或图像、或声音,就是隐藏的信息。提取过程如图2所示。
由于原始24位BMP图像文件隐藏信息后,其数据部分字节数值最多变化为1,该字节代表的像素颜色值最多只变化了1/256,所以,已隐藏信息的BMP图像与未隐藏信息的BMP图像,用肉眼是看不出差别的。将信息直接嵌入像素RGB值的优点是嵌入信息的容量与所选取的掩护图像的大小成正比。使用这种方法,一个大小为32k的24位BMP图像文件,可以隐藏约32k/8=4k的信息(忽略文件头不能隐藏数据的54个字节),该方法具有较高的信息隐藏率。
图2. LSB图像提取算法示意图
Fig.2 LSB data extracting algorithm
由于该算法是通过调整原始数据的最低位来隐藏信息,使一般用户对于隐藏信息,在视觉和听觉上很难察觉。但作为数字水印算法,该算法因其基本原理限制,所隐藏的数字水印信息是极为脆弱的,无法经受一些无损和有损的信号处理。
3 新的数字水印算法
这种技术的改进,是在基于LSB图像隐藏技术的基础上,对待隐藏的水印信息进行反复的隐藏,因为图片布满水印信息,所以,有很强的抗剪裁能力。
对载体图片进行剪裁后,极有可能会破坏水印信息原有的位置,使我们无法对水印信息进行定位,也就无从实现提取了。因此,这种算法的关键在于如何对水印信息进行同步。下面,提出一种同步的方法:
(1)在数字水印信息前依次连续写入同步信号0000,1111,1111数遍(4遍以上),然后写入前标识符1001,0001,再写入隐藏信息,最后写入后标识符1001,0001。
(2)读入被剪裁后的载体图片的信息位,如果首位是0则跳过,从非0的位开始读取,连续读入8位,判断该数据是否为同步字FF,如果不是同步字FF则继续从非0的位开始读其后的8位,直到连续读出2组同步字FF,证明已经同步,然后一直到读出前标识符,说明其后为隐藏信息位,读出数据,直到读入后标识符,说明隐藏信息已经完整的读完,至此读出一条完整的信息。如图3所示,无论从第1个同步字的任何一位开始读取,可以保证到第3个同步字时已经完成同步操作,第4个同步字完成确认同步并等待前标识的到来。
B. 这是基于LSB算法隐藏信息的一段代码,求指导,谁能详细讲解一下啊
我帮你解释一下:这个非常简单,首先介绍一下LSB隐藏的原理,原始图像版数据一般采用权字节表示,每个字节是8个比特,最后一个比特就是所谓的LSB(Least significant bit)-就是最不重要位的意思,LSB隐藏就是将要隐藏的信息(一般已经转换为比特)替换原始图像数据的LSB比特。
下面介绍一下这段代码的意思:m_data表示原始数据,strByteBuffer表示将要隐藏的信息,不过这里还是字节的形式,(strByteBuffer[i]>>(7-j)) & 0x01表示就是将strByteBuffer的第i个字节的第j个比特取出来,注意,取出来的值不是0就是1(因为最后与0x01进行与操作,0x01表示是十六进制,二进制实际上为00000001,就相当于取出最末一个比特),(m_data[i*8+j+32] & 0xfe)表示将原始数据里面的将最末一比特置0后的值取出来,然后加上刚才得到的待隐藏的信息,就相当于用隐藏的信息替换了原始数据的最后一比特的信息。注意0xfe是表示16进制,二进制为11111110。
C. 什么是LSB算法
LSB(LeastSignificant Bits)算法:将秘密信息嵌入到载体图像像素值的最低有效位,也称最不显著位,改变这一位置对载体图像的品质影响最小。
基本原理:
对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感。因此LSB算法最初是用于脆弱性水印的。
LSB算法基本步骤:
1.将得到的隐藏有秘密信息的十进制像素值转换为二进制数据;
2.用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位;
3.将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像。
%信息嵌入
Picture=imread(‘c:\test.tif’);
%读入载体图像
Double_Picture=Picture;
Double_Picture=double(Double_Picture);
%将图像转换为二进制
‘c:\test.txt’_id=fopen(‘c:\test.txt’,'r');
%读取秘密信息文件
[msg,len]=fread(‘c:\test.txt’_id,'ubit1');
[m,n]=size(Double_Picture);
p=1;
%p为秘密信息的位计数器
forf2=1:n
forf1=1:m
Double_Picture(f1,f2)=Double_Picture(f1,f2)-mod(Double_
Picture(f1,f2),2)+msg(p,1);
%将秘密信息按位隐藏入连续的像素中
ifp==len
break;
end
p=p+1;
end
ifp==len
break;
end
end
Double_Picture=uint8(Double_Picture);
imwrite(Double_Picture,‘c:\result.tif’);
%生成秘密信息
subplot(121);imshow(Picture);title('未嵌入信息的图片');
subplot(122);imshow(Double_Picture);title('嵌入信息的图片');
%信息提取
Picture=imread(‘c:\result.tif’);
%读入隐秘信息的图像
Picture=double(Picture);
[m,n]=size(Picture);
frr=fopen(‘c:\result.txt’,'a');
len=8;
%设定隐秘信息长度
p=1;
forf2=1:n
forf1=1:m
ifbitand(Picture(f1,f2),1)==1
%顺序提取图像相应像素LSB的秘密信息
fwrite(frr,1,'bit1');
result(p,1)=1;
else
fwrite(frr,0,'bit1');
result(p,1)=0;
end
ifp==len
%判断秘密信息是否读完
break;
end
p=p+1;
end
ifp==len
break;
end
end
fclose(frr);
D. lsb算法(把一个bmp图像隐藏到另一个图像中,用Matlab实现,求源码,谢谢,急
基于LSB算法的。就是修改最低位的那个。请吧程序贴出来,再解释下每条代码毕业设计要的。还要吧波形读出来。 回答的好继续加分。 理解算法
E. 基于LSB隐藏的SPA隐写分析方法用MATLAB软件实现代码怎么写。。
这有篇英文论文,可以参考一下:(图像处理方面的)
A LSB STEGANOGRAPHY APPROACH AGAINST PIXELS SAMPLE
PAIRS STEGANALYSIS
http://www.ijicic.org/05-054.pdf
还有一个语音信号信息隐藏的例子:
http://www.ecice06.com/qikan/manage/wenzhang/080450.pdf
其实关键还在于算法的理解,只要算法搞懂了,编写代码就很简单了