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 imagemat = 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的消息,总的来说,容量还是足够大的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)