图像低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('解密的图像');

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34440148/article/details/84568449
今日推荐