所谓直接4bit 替换法, 就是直接用秘密图像像素值的高4bit 去替换载体图像像素值的低4bit
% 函数功能: 直接将秘密图像的高4bit 隐藏在RGB 载体图像的R, G, B 层中所选的那一层的低4bit,
% 并将秘密图像提取出来, 最后显示。要求载体图像的大小大于等于秘密图像的大小, 且秘密图像是二值或灰度图像
% 输入格式:
% data = imagehide( ‘c: \ lenna. bmp’, ‘c: \woman. bmp’,‘c: \mix. bmp’, ‘bmp’, 3 )
% 参数说明:
% cover 是载体图像的地址
% message 是秘密图像的地址
% goleimage 是隐藏后图像的地址
% permission 是图像的类型
% level 是作为载体的具体层, R 为1 , G 为2, B 为3
% data 是隐藏后图像的矩阵
function data = imagehide( cover, message, goleimage, permission, level)
% 提取图像信息并分层
cover = imread( cover, permission) ;
data = cover ;
msg = imread( message, permission) ;
[ row, col] = size( cover) ;
cover1 = cover(:,:, level) ;
% 置载体图像R 层的低4bit 为0
for i = 1:row
for j = 1:col /3
cover1( i, j) = bitand( cover1( i, j) , 240) ;%px&11110000 像素的低4bit置零
end
end
% 置秘密图像的低4bit 为0
takemsg4 = bitand( msg, 240) ;
% 将秘密图像的高4bit 右移4 位
shiftmsg4 = bitshift( takemsg4, - 4) ;
% 图像隐藏
for i = 1:row
for j = 1:col /3
cover1( i, j) = bitor( cover1( i, j) , shiftmsg4( i, j) ) ;
end
end
% 写回并保存
data(:,:, level) = cover1;
imwrite( data, goleimage, permission) ;
% 提取秘密图像信息, 检测隐藏效果
data = imread( goleimage, permission) ;
[ row, col] = size( data) ;
A = data(:,:, level) ;
for i = 1:row
for j = 1:col /3
A( i, j) = bitand( A( i, j) , 15) ;
end
end
A = bitshift( A, 4) ;
% 显示结果
subplot( 221) , imshow( cover) ; title( '载体图像') ;
subplot( 222) , imshow( message) ; title( '秘密图像') ;
subplot( 223) , imshow( data) ; title( '隐藏后的图像') ;
subplot( 224) , imshow( A) ; title( '提取的秘密图像') ;
显示结果,如下