什么是LSB算法?

什么是LSB算法?,第1张

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 为秘密信息的位计数器 

for f2=1:n 

for f1=1:m 

Double_Picture(f1,f2)=Double_Picture(f1,f2)-mod(Double_ 

Picture(f1,f2),2)+msg(p,1) 

%将秘密信息按位隐藏入连续的像素中 

if p==len 

break 

end 

p=p+1 

end 

if p==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 

for f2=1:n 

for f1=1:m 

if bitand(Picture(f1,f2),1)==1 

%顺序提取图像相应像素LSB 的秘密信息 

fwrite(frr,1,'bit1') 

result(p,1)=1 

else 

fwrite(frr,0,'bit1') 

result(p,1)=0 

end 

if p==len  

%判断秘密信息是否读完 

break 

end 

p=p+1 

end 

if p==len 

break 

end 

end 

fclose(frr)

% read image

mat = imread('1.jpg')

mba = imread('2.bmp')

imgread = rgb2gray(mat)

mbt=imresize(mba,size(imgread))

mbt = uint8(mbt)

[maa,mab] = size(imgread)

[mba,mbb] = size(mbt)

md = ones(maa,mab)

ma = zeros(2*maa,2*mab)

ma = im2uint8(ma)

% progress the image

for i=1:1:maa

for j=1:1:mab

imgread(i,j)=imgread(i,j)-mod(imgread(i,j),4)

end

end

%========================

%enlarge image

%=======================

for j=1:1:mab

for i=1:1:maa

ma(2*i-1,2*j-1) = imgread(i,j)

ma(2*i,2*j-1) = imgread(i,j)

ma(2*i-1,2*j) = imgread(i,j)

ma(2*i,2*j) = imgread(i,j)

mb(2*i-1,2*j-1) = mbt(i,j)

mb(2*i,2*j-1) = mbt(i,j)

mb(2*i-1,2*j) = mbt(i,j)

mb(2*i,2*j) = mbt(i,j)

end

end

ma = ma+mb*3

%ma = ma-mb*3

%=======================

% attack

%=======================

noise = normrnd(0,0.2,2*maa,2*mab)%Gaussian, uniform,

% laplace,salt-pepper

ma = double(ma)

ma = ma+ noise

ma = uint8(ma)

figure(1)

subplot(2,2,1)imshow(imgread)

subplot(2,2,2)imshow(mbt,[0,1])

subplot(2,2,3)imshow(ma)

subplot(2,2,4)imshow(noise)%

%subplot(2,2,1)imshow(mb,[0,1])subplot(2,2,2)imshow(ma)subplot(2,2,3)imshow(mc)

%=======================

% watermark extraction

%=======================

for i=1:1:maa

for j=1:1:mab

a=mod(ma(2*i-1,2*j-1),2)+mod(ma(2*i,2*j-1),2)+mod(ma(2*i-1,2*j),2)+mod(ma(2*i,2*j),2)

a=(-a+mod(ma(2*i-1,2*j-1),4)+mod(ma(2*i,2*j-1),4)+mod(ma(2*i-1,2*j),4)+mod(ma(2*i,2*j),4))/2

if a<4

md(i,j)=0

else

md(i,j)=1

end

end

end

md = uint8(md)

figure(2)imshow(md,[0,1])

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

综上所述,LSB有如下缺点:

1) 嵌入消息较大时,所花时间较长。

2) 只能处理简单的流格式的文件。

3) 为了满足水印的不可见性,允许嵌入的水印强度较低,对空域的各种 *** 作较为敏感。

4) 基本的LSB算法抗JPEG压缩能力弱。

5) 鲁棒性差。

LSB算法有如下优点:

1) 算法简单,易于实现,计算速度也快。

2) 在基础算法上能够很快的进行改进,并在脆弱性水印中应用广泛。

3) 由于能在最低有效位(一般是最后两位)进行嵌入,故对于256色(8位)的RGB图像,在3层图像中均可插入1/8到1/4的消息,总的来说,容量还是足够大的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11854597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存