一、簡介
1 LSB演算法簡介
LSB全稱為 Least Significant Bit(最低有效位),是一種簡單而有效的資料隱藏技術,LSB隱寫的基本方法是用欲嵌入的秘密資訊取代載體影像的最低位元位,原來的影像的高位平面與代表秘密資訊的最低平面組成含隱蔽資訊的新影像,

灰度化的影像為單通道格式存盤像素,每個像素值在0~255內,而像素的位平面則是對應二進制的像素的各個位,以上圖為例,某個像素的值為78,其二進制01001110,從左到右位權依次降低,最左邊為最高有效位(MSB,其位權為 2 7 2^72
7
),最右邊位最低有效位(LSB,位權為2 0 2^02
0
),把每個像素的相同位抽取出來組成一個新的平面,就是所謂的圖的位平面,而LSB隱寫演算法,如其名字,是在LSB也就是最低位平面進行資訊嵌入/隱藏,
需要注意的一點是,LSB嵌入的時候,載體影像格式應該為灰度圖格式
以著名的Lena圖為例,一下是灰度圖Lena原圖:

下面是其各個位平面圖,從左到右、從上到下位平面依次降低:

可以看到,位平面越高包含的原影像資訊越多,對影像的灰度值貢獻越大,并且相鄰位元的相關性也越強,反之則相反,LSB最低位平面基本上不包含影像資訊了,類似隨機的噪點/噪聲,因此,可以在此處填入水印/秘密資訊,
嵌入示意圖如下:

選取不同位平面嵌入時,LSB演算法的保真度:
2 演算法原理
通俗來講我們看到的圖片都是由一個個小的像素點來構成的,所有像素點擺在一起,構成一個大方塊,這個大方塊就是我們所見的影像,灰度影像(也就是我們平時所說的黑白影像)是由一層像素點組成的,而彩色影像是由三層這樣的灰度影像組成的,這里拿灰度影像舉例,我們之所以能在影像上看到黑色和白色,是因為每個像素點的像素值不同,0表示純黑,255表示純白,灰色就是由這兩個數字之間的值構成,越靠近0越黑,越靠近255越白,那為什么是0和255呢?因為計算機是二進制,它會用8個位元來表示一個像素點(也可以用更多的位元,這樣影像的顏色分級就越多,同時影像也會占用更大的空間,但是普通人的眼睛并不能辨認這么多的顏色,除非你異于常人),所以最大值是255,最小是0,lsb就是基于2進制這一特點來隱藏資訊的,因為人眼并不是很精密的顏色或亮度的感知器,所以把像素灰度上下微調1是不會被人眼察覺的,也就是修改8位二進制碼中最小的一位,當我們把圖片每個像素的最后一位按照我們的想法改變,使他表現為我們想要的資訊,但用戶卻不能看出,也不會影響圖片的內容,這就是lsb數字水印,
3 LSB演算法的基本特點:
LSB是一種大容量的資料隱藏演算法
LSB的魯棒性相對較差(當stego影像遇到信號處理,比如:加噪聲,有損壓縮等,在提取嵌入資訊時會丟失)
4 常見LSB演算法的嵌入方法:
秘密資訊在最低位平面連續嵌入至結束,余下部分不作任何處理(典型軟體MandelSteg)
秘密資訊在最低位平面連續嵌入至結束,余下部分隨機化處理(也稱沙化處理,典型軟體PGMStealth)
秘密資訊在最低位平面和次低位平面連續嵌入,并且是同時嵌入最低位平面和次低位平面
秘密資訊在最低位平面嵌入,等最低位平面嵌入完全嵌入之后,再嵌入次低位平面
秘密資訊在最低位平面隨機嵌入
以上五種方式,當嵌入容量不同時,魯棒性不同
二、源代碼
clc;
clear all;
fid=fopen('1.wav','r');%讀入音頻檔案
oa=fread(fid,inf,'uint8');
fclose(fid);
n=10;%n為a的長度,為10
d=randsrc(1,n,[0,1]);%產生亂數列即水印
M=oa;
for i=45:45+n-1
M(i)=bitset(M(i),1,d(i-44));%進行LSB嵌入水印
end
unction A=Vector2Matrix(oi,row)
%將陣列轉換成二位陣列,row為行數
cl=length(oi)/row;
A=zeros(row,cl);
for i=1:row
for j=1:cl
end
end
marklength=5394;%提取的水印影像大小,已知
row=58; %row是水印影像行數,已知
fid=fopen('marked.wav','r');
oa=fread(fid,inf,'uint8');
status=fseek(fid,44,'bof');
a=fread(fid,marklength,'uint8');
for i=1:marklength
w1(i)=bitget(a(i),1);
end
w1=w1';
m=Vector2Matrix(w1,row);
imwrite(m,'markedbupt.bmp','bmp');
figure;
imshow('markedbupt.bmp');title('extracted watermark');
fid=fopen('2.wav','rb');
oa=fread(fid,inf,'uchar');
n=length(oa)-44;%wav檔案從檔案頭到資料前面共有44位元組的格式說明
fclose(fid);
io=imread('bupt.bmp');
[row,col]=size(io);
io=io';
wi=io(:);
if row*col>n
error('載體太小,請更換載體');
end
markedaudio=oa;
marklength=row*col;
fprintf('嵌入影像的長度為:%.0d\n',marklength);
for k=1:row*col
markedaudio(44+k)=bitset(markedaudio(44+k),1,wi(k));
end
三、運行結果


四、備注
完整代碼或者代寫添加QQ 1564658423
往期回顧>>>>>>
【信號處理】基于matlab HMM的睡眠狀態檢測【含Matlab原始碼 050期】
【信號處理】基于matlab CDR噪聲和混響抑制【含Matlab原始碼 051期】
【信號處理】基于matlab最小二乘法解決稀疏信號恢復問題【含Matlab原始碼 052期】
【信號處理】基于matlab小波變換的音頻水印嵌入提取【含Matlab原始碼 053期】
【信號處理】基于matlab ICA演算法信號分離【含Matlab原始碼 054期】
【信號處理】基于matlab GUI界面的脈搏信號之脈率存檔【含Matlab原始碼 237期】
【信號處理】基于matlab GUI界面的虛擬信號發生器(各種波形)【含Matlab原始碼 271期】
【信號處理】基于matlab GUI界面信號發生器之電子琴【含Matlab原始碼 272期】
【信號處理】基于matlab的數字電子琴設計與實作【含Matlab原始碼 273期】
【雷達通信】基于matlab的雷達數字信號處理【含Matlab原始碼 281期】
【雷達通信】基于matlab線性調頻(LFM)脈沖壓縮雷達仿真【含Matlab原始碼 283期】
【雷達通信】基于mtatlab距離多普勒(RD)、CS、RM演算法的機載雷達成像【含Matlab原始碼 284期】
【雷達通信】《現代雷達系統分析與設計》大作業【含Matlab原始碼 285期】
【信號處理】基于matlab GUI語音信號綜合處理平臺【含Matlab原始碼 290期】
【信號處理】基于matlab GUI語音信號采集【含Matlab原始碼 291期】
【信號處理】基于matlab GUI語音幅度調制【含Matlab原始碼 292期】
【信號處理】基于matlab GUI語音合成【含Matlab原始碼 293期】
【信號處理】基于matlab GUI語音基頻識別【含Matlab原始碼 294期】
【信號處理】基于matlab GUI語音信號加密解密【含Matlab原始碼 295期】
【信號處理】基于matlab小波變換的語音增強【含Matlab原始碼 296期】
【信號處理】基于matlab GUI語音傅立葉變換降噪混頻【含Matlab原始碼 297期】
【信號處理】基于matlab GUI維納濾波之語音增強【含Matlab原始碼 298期】
【音頻處理】基于matlab GUI語音信號處理2【含Matlab原始碼 299期】
【雷達通信】基于matlab GUI雷達定位【含Matlab原始碼 302期】
【雷達通信】基于matlab GUI雷達脈沖壓縮【含Matlab原始碼 303期】
【雷達通信】基于matlab GUI雷達定位模擬【含Matlab原始碼 304期】
【雷達通信】基于matlab SVM識別雷達資料【含Matlab原始碼 305期】
【雷達影像】SAR合成孔徑雷達成像及處理【含Matlab原始碼 307期】
【資訊處理】基于GUI數字波束的演算法庫【含Matlab原始碼 313期】
【通信】基于matlab的OFDM-MIMO通信建模與仿真【含Matlab原始碼 314期】
【通信】基于matlab的OFDM仿真【含Matlab原始碼 315期】
【信號處理】基于matlab窗函式法的FIR數字濾波器設計【含Matlab原始碼 316期】
【通信】基于matlab FIR低通數字濾波器設計【含Matlab原始碼 323期】
【通信】基于matlab FIR IIR數字濾波器設計【含Matlab原始碼 324期】
【信號處理】基于matlab的語音信號頻譜分析儀【含Matlab原始碼 325期】
【調制信號】基于matlab GUI數字調制信號仿真【含Matlab原始碼 336期】
【通信】基于matlab的擴頻通信系統設計【含Matlab原始碼 337期】
【通信】基于matlab多徑衰落信道的仿真【含Matlab原始碼 338期】
【語音識別】基于matlab BP神經網路的語音情感識別【含Matlab原始碼 349期】
【信號處理】基于matlab音頻水印嵌入與提取【含Matlab原始碼 350期】
【音頻水印】基于matlab小波變換的量化音頻數字水印【含Matlab原始碼 351期】
【語音去噪】基于matlab低通和自適應濾波去噪【含Matlab原始碼 352期】
【信號處理】基于matlab 8級m序列【含Matlab原始碼 353期】
【情感識別】基于matlab GUI語音情感分類識別【含Matlab原始碼 354期】
【信號處理】基于matlab FIR與IIR濾波器低通、高通、帶通設計【含Matlab原始碼 360期】
【語音處理】基于matlab語音信號的預處理【含Matlab原始碼 364期】
【語音識別】基于matlab 傅立葉變換0-9的數字語音識別【含Matlab原始碼 384期】
【語音識別】基于matlab GUI DTW的0-9數字語音識別【含Matlab原始碼 385期】
【語音播放】基于matlab GUI MP3設計【含Matlab原始碼 425期】
【語音處理】基于人耳掩蔽效應的語音增強演算法信噪比計算【含Matlab原始碼 428期】
【語音去噪】基于matlab譜減法去噪【含Matlab原始碼 429期】
【語音識別】基于matlab帶動量項的BP神經網路語音識別【含Matlab原始碼 430期】
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265916.html
標籤:其他
