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);