LSB順序替換嵌入與提取實現

一:代碼

%LSB順序替換嵌入和提取
%輸入:載體圖像C,秘密消息M
%顯示:載體圖像、載密圖像、LSB平面分布情況
%嵌入消息明文message.txt,提取消息為secret.txt

C='Lena.bmp';
M='message.txt';
C1=imread(C);
%調用嵌入函數lsbshide
[C_M,C_C,L]=lsbshide(C,M);
%調用提取函數lsbsget
lsbsget('Lena_S.bmp',L);

%畫圖展示
subplot(1,3,1);imshow(C1);title('載體圖像','FontSize',20);
subplot(1,3,2);imshow(C_M);title('載密圖像','FontSize',20);
subplot(1,3,3);imshow(mat2gray(C_C));title('LSB平面分布情況圖','fontsize',20);

調用的子函數:lsbshide.m

% LSB順序替換嵌入算法--2016年6月24日
% 輸入:載體C、秘密消息M。
% 輸出:載密圖像C_M、位平面C_C
% 1、將秘密消息M轉化為二進制M1;
% 2、將轉化為二進制的秘密消息M1嵌入到載體圖像的LSB平面
%3、將載密圖像C_M減去載體圖像C,查看嵌入信息情況
% ---------------------------------------------------
% 函數功能介紹:實現LSB順序替換嵌入
% 使用示例:function      [C_M,C_C,L]=lsbshide('Lena.bmp','message.txt');
%輸入輸入參數介紹:
%C:載體圖像
%M:秘密消息
%C_M:載密圖像
%C_C:lsb平面

function [C_M,C_C,L]=lsbshide(C,M)
C=imread(C);%讀取圖像并存放到C中
C_M=C;
fileID=fopen(M,'r');%打開文件
[M,L]=fread(fileID,'ubit1');%讀取文件的內容,并以二進制方式存放到向量M中

%將二進制的秘密消息M嵌入到載密圖像的LSB面
[m,n]=size(C);
p=1;%嵌入計數器
for i=1:m
    for j=1:n
        C_M(i,j)=C(i,j)-mod(C(i,j),2)+M(p,1);%嵌入方法是先將LSB置零,然后加上秘密消息中的對應的0或1
        if L==p   %嵌入終止條件:當嵌入的個數為秘密消息的長度時,跳出循環,不再嵌入
         break;
        end
       p=p+1;
 end
 if L==p    %嵌入終止條件:當嵌入的個數為秘密消息的長度時,跳出循環,不再嵌入
    break;
 end
end

imwrite(C_M,'Lena_S.bmp','bmp');

 %查看嵌入信息情況:將載密圖像減去載體圖像
for i=1:m
    for j=1:n
        C_C(i,j)=C_M(i,j)-C(i,j);
   end
 end

調用子函數:lsbsget.m

%LSB順序替換提取--2016年6月27
%輸入:載密圖像C_M,嵌入長度L
%輸出:秘密消息向量S
%輸入輸出格式:S=lsbsget('Lena_S.bmp',L)
%步驟:
%1、讀取載密圖像C_M
%2、讀出LSB平面中0、1存入S中
%3、將二進制向量S轉化為ASCII碼并存放到文本文件secret.txt中

function S=lsbsget(C_M,L)
%讀取載密圖像矩陣
C_M1=imread(C_M);
[m,n]=size(C_M1);
S=zeros(1,L);
%讀出LSB平面中0、1存入S中
for i=1:m
    for j=1:n
        if (i-1)*m+j>L%判斷嵌入長度是否大于L,若大于L,則終止循環
            break;
        end
        S(1,(i-1)*m+j)=mod(C_M1(i,j),2);
    end
    if (i-1)*m+j>L%判斷嵌入長度是否大于L,若大于L,則終止循環
         break;
    end
end

%將二進制向量S轉化為ASCII碼并存放到文本文件secret中
fileID=fopen('secret.txt','w');
a=L/8;%計算字符個數
SC=zeros(1,a);
for i=1:a
    b=0;
    for j=1:8
        b=b+S(1,(i-1)*8+j)*power(2,j-1);
    end
    SC(1,i)=b;
    fwrite(fileID,SC(1,i),'char');
end
fclose(fileID);

二、實驗結果展示
1、載體圖像、載密圖像、LSB平面分布情況

Paste_Image.png

2、嵌入的消息message.txt,提取的消息secret.txt

Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容