影象低4位資訊隱藏
阿新 • • 發佈:2018-12-03
本文參考: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(8,1)=16,8的二進位制是1000,1表示左移一位
%% 影象隱藏
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('解密的影象');
執行結果: