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
其實關鍵還在於演算法的理解,只要演算法搞懂了,編寫代碼就很簡單了