function [A,msg] = imagehide(cover,message,goleimage,permission,level)
%提取图像信息并分层
cover = imread(cover,permission);
data = cover;
Msg = imread(message,permission);
[msg,map] = rgb2ind(Msg,0.1);
%msg = im2bw(Msg,0.5);
[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);
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(cover1(i,j),15);
end
end
A = bitshift(A,4);
%显示效果
subplot(221),imshow(cover);title('载体图像');
subplot(222),imshow(Msg);title('秘密图像');
subplot(223),imshow(data);title('隐藏后的图像');
subplot(224),imshow(A,map);title('提取的秘密图像');
上面是一段将图像隐藏于另一幅图像的MATLAB代码,我的目的是将一张彩色图片隐藏到另外一张彩色图片,在隐藏之前,记录下这张图片的map,对data进行操作。最后得到的结果却跟我想要的结果有一定差距
所提取的秘密图像确是这么一幅人不人,鬼不鬼的图像。
我将所得到的msg(data)矩阵和A矩阵进行分析的时候,发现两个矩阵是完全一样的。
接着我输入如下命令
>> subplot(121),imshow(msg,map);title('msg矩阵生成');
>> subplot(122),imshow(A,map);title('A矩阵生成');
得到如下结果
同样的数据矩阵,同样的调色板矩阵生成了两幅不一样的图像。
问题出在哪里呢?很奇怪!