數字水印 LSB信息隱藏算法實驗內容(matlab) 嵌入1~3個位平面並提取


LSB信息隱藏算法實驗內容(matlab)

https://github.com/SKPrimin/HomeWork/tree/main/DigitalWatermarking/BworkLSB%E4%BF%A1%E6%81%AF%E9%9A%90%E8%97%8F%E7%AE%97%E6%B3%95%E5%AE%9E%E9%AA%8C%E5%86%85%E5%AE%B9

1.將載體圖片分成8個位平面,並顯示。
2.制作水印圖片,可以嵌入1個位平面的、2個位平面的、3個位平面的。
3.使用LSB信息隱藏算法,分別嵌入1bit/pixel、2bit/pixel、3bit/pixel,並顯示偽裝圖像。
4.提取嵌入的秘密信息。

將載體圖片分成八個位平面,並顯示。

  1. 載體圖片

在這里插入圖片描述

  1. 相關代碼

    %% 第一張 風車
    imgW = imread('7.bmp');
    imgW=imresize(imgW,0.5);
    imgWsize=size(imgW);
    %提取bitplane
    bitPlaneW=zeros(imgWsize(1),imgWsize(2),8);
    for i =1:8
    for ro=1:imgWsize(1)
        for co=1:imgWsize(2)
        bitPlaneW(ro,co,i)=bitget(imgW(ro,co), i);
        end        
    end    
    end
    % 繪制bitplane
    figure;
    for i =1:8
    subplot(2,4,i)
    imshow(uint8(255*bitPlaneW(:,:,i)))
    title(['Bitplane' num2str(i)])
    end
    
  2. 八位平面展示

在這里插入圖片描述

制作水印圖片,嵌入1個位平面、嵌入2個位平面、嵌入3個位平面

  1. 選擇Lena圖片作為想要隱藏的圖片

在這里插入圖片描述

  • 相關代碼段

  • 分別讀入載體照片和插入照片

    %% 第一張 摩天輪
    img = imread('7.bmp');
    img=imresize(img,0.5);
    imgsize=size(img);
    %提取bitplane比特平面
    bitPlane=zeros(imgsize(1),imgsize(2),8);
    for i =1:8
        for ro=1:imgsize(1)% ro: row圖片行號,y
            for co=1:imgsize(2) %co: column圖片,x
            bitPlane(ro,co,i)=bitget(img(ro,co), i);
            end        
        end    
    end
    % 繪制bitplane
    figure;
    for i =1:8
        subplot(2,4,i)
        imshow(uint8(255*bitPlane(:,:,i)))
        title(['Bitplane' num2str(i)])
    end
    %%  lena
    imgW = imread('9.bmp');
    imgW=imresize(imgW,0.5);
    imgWsize=size(imgW);
    [length,width,~]=size(imgW);
    %提取bitplane
    bitPlaneW=zeros(imgWsize(1),imgWsize(2),8);
    for i =1:8
        for ro=1:imgWsize(1)
            for co=1:imgWsize(2)
            bitPlaneW(ro,co,i)=bitget(imgW(ro,co), i);
            end        
        end    
    end
    % 繪制bitplane
    figure;
    for i =1:8
        subplot(2,4,i)
        imshow(uint8(255*bitPlaneW(:,:,i)))
        title(['Bitplane' num2str(i)])
    end
    
  • 構造新的照片

    • 嵌入1個位平面
    	%% 構造新的bitPlane
    	newbitPlane=bitPlane;
    	newbitPlane(:,:,1) = bitPlaneW(:,:,8);
    
    • 嵌入2個位平面
    %% 構造新的bitPlane
    newbitPlane=bitPlane;
    newbitPlane(:,:,2) = bitPlaneW(:,:,8);
    newbitPlane(:,:,1) = bitPlaneW(:,:,7);
    
    • 嵌入3個位平面
    %% 構造新的bitPlane
    newbitPlane=bitPlane;
    newbitPlane(:,:,3) = bitPlaneW(:,:,8);
    newbitPlane(:,:,2) = bitPlaneW(:,:,7);
    newbitPlane(:,:,1) = bitPlaneW(:,:,6);
    
  • 合成新圖片及提取水印

    %% 產生新圖片(含水印)
    newimg=zeros(256,256);
    for i =1:8
        newimg=newimg+newbitPlane(:,:,i)*2^(i-1);
    end
    newimg=uint8(newimg);
    figure;
    imshow(newimg),title('含水印的新圖片');
    
    %% 效果展示
    %提取bitplane
    bitPlaneRec=zeros(imgsize(1),imgsize(2),8);
    for i =1:8
        for ro=1:imgsize(1)
            for co=1:imgsize(2)
            bitPlaneRec(ro,co,i)=bitget(newimg(ro,co), i);
            end        
        end    
    end
    % 繪制bitplane
    figure;
    for i =1:8
        subplot(2,4,i)
        imshow(uint8(255*bitPlaneRec(:,:,i)))
        title(['Bitplane' num2str(i)])
    end
    
    
  • 加水印的效果圖

  • 嵌入1個位平面

    • 嵌入2個位平面

    • 嵌入3個位平面

提取嵌入的秘密信息

  1. 提取圖片的信息
%% 水印提取過程
%提取bitplane
bitPlaneRec=zeros(imgsize(1),imgsize(2),8);
for i =1:8
    for ro=1:imgsize(1)
        for co=1:imgsize(2)
        bitPlaneRec(ro,co,i)=bitget(newimg(ro,co), i);
        end        
    end    
end
% 繪制bitplane
figure;
for i =1:8
    subplot(2,4,i)
    imshow(uint8(255*bitPlaneRec(:,:,i)))
    title(['Bitplane' num2str(i)])
end

% 復原水印圖
newimgW=zeros(imgsize(1),imgsize(2));
for i = 1 % 兩個位平面時i=1:2  / 3個位平面時 i=1:3
    newimgW=newimgW+bitPlaneRec(:,:,i)*2^(4+i);
end

figure;imshow(uint8(newimgW)),title('提取出的圖片')
  • 從嵌入1個位平面圖中提取圖片

  • 從嵌入2個位平面圖中提取圖片

  • 從嵌入3個位平面圖中提取圖片

小結討論

  • 了解了LSB信息隱藏算法的原理。通過圖片的權重分配,使得權重較小的位置可以藏匿我們想要的信息

  • 對於低位來說:嵌入1個位平面時,受影響的值只有01;嵌入2個位平面時,受影響的值有04;嵌入3個位平面時,受影響的值也僅有011。這相對於常規圖片的0255來說影響不大。

  • 而對於高位:嵌入1個位平面時,受影響的像素值就高達0127;嵌入2個位平面時,受影響的像素值達到了0190;嵌入3個位平面時,受影響的值更是漲到0~221。可以說具有舉足輕重的地位。

  • 那么我們將嵌入照片的高位嵌入載體照片的地位,便可以保存嵌入照片的眾多信息的同時對載體照片影響微乎其微。由此可以實現信息隱藏。
    平面時,受影響的值有04;嵌入3個位平面時,受影響的值也僅有011。這相對於常規圖片的0~255來說影響不大。

  • 而對於高位:嵌入1個位平面時,受影響的像素值就高達0127;嵌入2個位平面時,受影響的像素值達到了0190;嵌入3個位平面時,受影響的值更是漲到0~221。可以說具有舉足輕重的地位。

  • 那么我們將嵌入照片的高位嵌入載體照片的地位,便可以保存嵌入照片的眾多信息的同時對載體照片影響微乎其微。由此可以實現信息隱藏。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM