图像隐藏与提取的问题

来源:互联网 发布:mac的ppt模版 编辑:程序博客网 时间:2024/05/14 13:03

  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矩阵生成');

得到如下结果

同样的数据矩阵,同样的调色板矩阵生成了两幅不一样的图像。

问题出在哪里呢?很奇怪!

原创粉丝点击