当前位置:首页 » 操作系统 » lsb提取算法

lsb提取算法

发布时间: 2022-05-27 17:42:49

⑴ LSB算法有什么优点和缺点,针对其缺点有什么改进方法

LSB(LeastSignificant Bits)算法:将秘密信息嵌入到载体图像像素值的最低有效位,也称最不显着位,改变这一位置对载体图像的品质影响最小。
LSB算法的基本原理:
对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。然而针对空域的各种处理,如游程编码前的预处理,会对不显着分量进行一定的压缩,所以LSB算法对这些操作很敏感。因此LSB算法最初是用于脆弱性水印的。
LSB算法基本步骤:
1 将得到的隐藏有秘密信息的十进制像素值转换为二进制数据;
2 用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位;
3 将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像。

⑵ 图像水印的LSB算法,VC++代码

因为8位像素值的最低位为1或0对整个像素值影响不大,LSB就是把水印信息放入这个最低位,同时保证原始图像基本无变化

void CDib::Embed()//嵌入
{
unsigned char bmdata;//BMP图像数据
unsigned char efdata;//嵌入的文件数据
int t = 7;
int x[8];
int s[8];
int last_bit; //记录字节最低位本来的bit

for(UINT i1 = 0, i2 = 0; i1 <= bitmap_size - 1, i2 <= embfile_size - 1; i1++)
{ //生产隐藏信息,并逐步嵌入到宿主图像各像素的最低位上
bmdata = *p;//p指向图像数据的每个像素,把当前像素值给bmdata

for (int j = 0; j <= 7; j++) //计算各bit位
{
x[j] = bmdata & 1;//提出bmdata最低位放入x[j]
bmdata >>= 1;//右移一位
}

last_bit = x[0];//原始图像的最低位值存入last_bit中
x[0] = x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];//使最低位值等于其他各位的异或

if (t == 7) //宿主图片每走过八个字节,计算一次s[]
{
efdata = *q;//q指向插入的水印数据
for (j = 0; j <= 7; j++)
{
s[j] = efdata & 1;//水印数据依次放入s[j]中
efdata >>= 1;//右移
}
}
x[0] ^= s[t];//隐藏信息,隐藏信息等于原图像高六位的异或再和文件数据异或
if (last_bit == 0) //嵌入隐藏信息
{
*p |= x[0];//如果该像素原本最低位为0;则将最终得到的异或水印值放入原像素
}
else
{
*p &= 254 + x[0]; //如果该像素原本最低位为1;则将最终得到的异或水印值放入原像素
}

p++;//指向下一个像素
t--;//t用来定时每8个字节插入一次完整的s
if (t == -1) //需要计算一次s[]
{
t = 7;
q++;//指向下一个作为待插入水印的文件数据
i2++;
}
}

}

void CDib::Pick()//提取
{
m_pFile = new unsigned char [embfile_size];//开辟等于插入文件数据大小的内存
unsigned char *q = m_pFile;//q指向该内存

unsigned char bmdata;//插入了水印的BMP图像数据

int x[8];
int s[8];
int t = 7;
for (UINT i1 = 0, i2 = 0; i1 <= bitmap_size - 1, i2 <= embfile_size - 1; i1++)
{
bmdata = *p; //p指向插入了水印的图像数据
for (int j = 0; j <= 7; j++) //计算各bit位
{
x[j] = bmdata & 1;//提取该图像字节的0~7位放入X[]数组
bmdata >>= 1;
}
s[t] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];//提取1~8个字节中的s[]
t--;
if (t == -1) //s[7]到s[0]组成一个字节
{
*q = s[7] * 128 + s[6] * 64 + s[5] * 32 + s[4] * 16 +
s[3] * 8 + s[2] * 4 + s[1] * 2 + s[0];//还原原始的图像数据
t = 7;
i2++;
q++;
}
p++;//指向下一像素
}

}

⑶ LSB算法的原理是什么

LSB算法
首先 将得到的隐藏有秘密信息的十进制像素值转换为二进制数据;
然后 用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位;
最后 将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像。

⑷ lsb算法(把一个bmp图像隐藏到另一个图像中,用Matlab实现,求源码,谢谢,急

基于LSB算法的。就是修改最低位的那个。请吧程序贴出来,再解释下每条代码毕业设计要的。还要吧波形读出来。 回答的好继续加分。 理解算法

⑸ 用C或C++怎样提取出bmp图像的像素点信息值用LSB算法做信息隐藏,位图是24位的。

CImage m_image;//m_image就是要处理的图像
int bit=m_Image.GetBPP();//获取每点像素的位数(8,24,32等),如果只处理24位图,则bit可直接赋值为24
int width=m_Image.GetWidth();//图像的宽度(单位为像素)
int height=m_Image.GetHeight();//图像的长度(单位为像素)
HBITMAP bitmap = m_Image.Detach();//
CBitmap *b_Image=CBitmap::FromHandle(bitmap);//获取CBitmap类的实例
DWORD totalbytes=width*height*bit/8;//要保存像素数据需要的总的字节数,24位图的话,每个像素需要3个字节
byte *lpBits=new byte[totalbytes];//字节型数组,每个单位存一个字节的数据
int bytes=b_Image->GetBitmapBits(totalbytes,lpBits);//把像素数据存到数组lpBits里,通过看bytes是否为0可以知道是否成功,为0则没有成功
//接下来遍历数组即可获取像素数据,因为24位图是3个字节构成一个像素,所以遍历时要注意间隔。

⑹ LSB算法的介绍

流载体的LSB方法 (1)嵌入:选择一个载体元素的子集{j1,j2,...jL(m)},其中共有L(m)个元素,用以信息隐藏信息的L(m)个Bit。然后在这个子集上执行替换操作,把cji的最低比特用m替换。(2)提取:找到嵌入信息的伪装元素的子集{j1,j2,...jL(m)},从这些伪装对象中抽取他们的最低比特位,排列组合后组成秘密信息。

⑺ 信息隐藏lsb算法的检测方法

h一种基于扫描相关度的LSB算法 教程,希望能给你带来帮助
ttp://www.cnki.com.cn/Article/CJFDTotal-JSJY200905047.htm

⑻ 数字图像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个同步字完成确认同步并等待前标识的到来。

⑼ LSB算法有何优缺点

你中南信安的吧。加分。我给你发实验报告,给20分最好了,这是我的新ID,没财富。

综上所述,LSB有如下缺点:
1) 嵌入消息较大时,所花时间较长。
2) 只能处理简单的流格式的文件。
3) 为了满足水印的不可见性,允许嵌入的水印强度较低,对空域的各种操作较为敏感。
4) 基本的LSB算法抗JPEG压缩能力弱。
5) 鲁棒性差。
LSB算法有如下优点:
1) 算法简单,易于实现,计算速度也快。
2) 在基础算法上能够很快的进行改进,并在脆弱性水印中应用广泛。
3) 由于能在最低有效位(一般是最后两位)进行嵌入,故对于256色(8位)的RGB图像,在3层图像中均可插入1/8到1/4的消息,总的来说,容量还是足够大的。

⑽ 用LSB算法实现BMP图片的信息隐藏与提取,1下面的原始载体BMp图像的空域像素值如何得到要求用C#实现。

不会哦

热点内容
安卓打字声音怎么关 发布:2024-10-28 01:16:30 浏览:673
自然语言处理的算法 发布:2024-10-28 01:08:38 浏览:417
linux软连接和硬链接的区别 发布:2024-10-28 01:02:38 浏览:613
asp数据库封装 发布:2024-10-28 00:54:52 浏览:948
python类是什么 发布:2024-10-28 00:48:05 浏览:377
android添加资源 发布:2024-10-28 00:47:53 浏览:107
传奇脚本编写 发布:2024-10-28 00:44:56 浏览:198
大华摄像头nas服务器地址 发布:2024-10-28 00:44:13 浏览:903
安全门密码锁上三个小孔是什么 发布:2024-10-28 00:36:12 浏览:352
myeclipse反编译插件在线安装 发布:2024-10-28 00:19:08 浏览:480