1. 程式人生 > >影象低4位資訊隱藏

影象低4位資訊隱藏

本文參考:https://blog.csdn.net/qq_38253732/article/details/82916433
將輸入的資訊影象通過加密放置於載體影象的低4位。
原理:一個灰度影象是由一個個的灰度畫素組成的,在MATLAB中灰度畫素可用uint8型別表示,即由8bit表示0-255的灰度值。經過試驗,將一個影象所有畫素的低4位置0在視覺上並不會有任何差異,故可認為畫素後4位是冗餘位。

函式操作是將載體影象和資訊影象低4位都置0,並將資訊影象的高4位放到載體影象的4位上去。

%% 各變數含義
img_carrier_path='D:\MATLAB\資訊保安\1.png';
img_msg_path=
'D:\MATLAB\資訊保安\2.png'; img_carrier=imread(img_carrier_path); %載體影象 img_msg=rgb2gray(imread(img_msg_path)); %資訊影象,必須是灰度圖,且與載體影象同分辨率 img_msg_low4_0=[]; %資訊影象低4位置0 img_jiami=[]; %加密後圖像 tmp=[]; %載體影象的R分量,用於變換 %% 提取影象資訊並分層 [m,n,t] = size(img_carrier); %載體圖片的行數m,列數n tmp = img_carrier(:,:,1); %% 置載體影象R
層的低4bit為0,與11110000(240)相與,即會把後4位置0 for i = 1:m %遍歷 for j = 1:n tmp(i,j) = bitand(tmp(i,j),240); %為後4位置0的載體影象R分量 end end img_msg_low4_0 = bitand(img_msg,240); % 置資訊影象的低4bit為0 %% 將祕密影象的高4bit右移4位 img_msg_rightshift4 = bitshift(img_msg_low4_0,-4); %例如:bitshift(81)=168的二進位制是10001表示左移一位 %% 影象隱藏 for
i = 1:m %遍歷 for j = 1:n tmp(i,j) = bitor(tmp(i,j),img_msg_rightshift4(i,j)); %將移位的載體影象和祕密影象合併,存在tmp裡:高4位為載體影象,低4位為祕密影象 end end %% 顯示 img_jiami=img_carrier; img_jiami(:,:,1) = tmp; %把變換後的tmp存入替換載體影象的R分量 %% 解密 tmp1=img_jiami(:,:,1); %加密影象的R分量給tmp1 tmp1=bitand(tmp1,15); %4位置0 img_recover=bitshift(tmp1,4); imshow(img_carrier),title('載體影象'); figure,imshow(img_msg),title('資訊影象'); figure,imshow(img_jiami),title('加密後圖像'); figure,imshow(img_recover),title('解密的影象');

執行結果:
在這裡插入圖片描述