图像信息隐藏(索引图象)

索引图象隐写术

1.索引图像

索引图像包含一个调色板和一个索引板,每个像素值都由一个(索引值->色彩值)表示,常见的基于索引的图象格式有gif和8位的BMP图像。

2.基于索引图像的隐写术

基于索引图象的隐写术大抵分为两类,一是对调色板进行隐写,这种方法不会使图片有较大的色彩跳变,但缺点是容量较小;另一类是对索引版进行隐写,这种方法弥补了前者容量较小的缺点但载体图片容易产生较大的色彩跳变。

3.现有索引图象隐写术

隐写算法简单介绍
Gifshuffle:调色板排序隐藏利用调色板的顺序来隐藏信息
EZstego:有序调色板下索引板LSB基于某种距离准则对调色板排序降低索引版LSB出现色彩跳变的可能
Fridrich:索引版“LSB”对索引版做LSB,特殊的是修改索引值为LSB满足要求且颜色与原值相似的索引值。(可行的预处理:最佳奇偶分配密写)
Hide&Seek:
颜色的量化索引调制:

4.matlab实现Fridrich

隐写函数
function [ newdata, newmap ] = FridrichHiding( data,map, msgstr )
newmap = map;
map=uint8(map*256);
newdata = data;
[n,m] = size(data);

len = length(msgstr);  %信息的长度
lenstr=uint8(1);
for i = 1:n
    for j = 1:m
        if (lenstr) > len
            break;
        end
        if newdata(i,j) == 0
            continue
        end        
        if rem(newdata(i,j),2) == msgstr(lenstr) 
            lenstr=lenstr+1;
            continue
        else
            newdata(i,j) = findpal(map,map(newdata(i,j),:),msgstr(lenstr));
            lenstr=lenstr+1;
        end
    end
    if lenstr > len
            break;
    end    
end

function index = findpal(map, mark , flag)
[n,m]=size(map);
minn=10;
for i = 1:n
    if rem(i,2)== flag
        option=judge(map(i,:),mark);
        if(option<minn)
            minn=option;
            index=i;
        end    
    end
end

function ansum=judge(a,b)
r = double((a(1) - b(1)) / 255);
g = double((a(2) - b(2)) / 255);
b = double((a(3) - b(3)) / 255);
diff = sqrt(r*r + g*g + b*b) / 3;
ansum = 1-diff;
提取函数
function info = ExtractFromSortPallet( newdata ,len )
infostr = zeros(14,8);
[n,m]=size(newdata);
inow=1;
jnow=1;

num=0;
for i=1:n
    for j=1:m
        if(newdata(i,j)==0)
            continue
        end
        num=num+1;

        infostr(inow,jnow)=rem(newdata(i,j),2);
        if((inow-1)*8+jnow)==len
            break;
        end 
        jnow=jnow+1;
        if jnow == 9
            jnow = 1;
            inow = inow +1;
        end
    end
    if((inow-1)*8+jnow) == len
               break;
    end
end
msgasc = bi2de(uint8(infostr));   
message = char(msgasc);
message = message';
info = message;

end
隐写测试
%隐写部分
im = imread('down.png');
[data, map] = rgb2ind(im, 256);

msg='Hello World!';
msgasc = double(msg);
msgstr = de2bi(msgasc,8); %将信息转为一维的二进制串
msgstr=msgstr.';
msgstr=msgstr(:);
len = length(msgstr);  %信息的长度

[newdata, newmap] = FridrichHiding(data, map, msgstr);
imwrite(newdata,newmap,'result.bmp');

imshow(data, map);title('origin');
figure;
imshow(newdata, newmap);title('stegano');

%提取部分
[newdata,newmap]=imread('result.bmp');
[n,m]=size(newmap);
info = ExtractFromSortPallet(newdata,len);
fprintf('The secret info is:%s\n', info);

5.参考资料

[1] 《基于调色板图像的隐写术.ppt》;任德斌

[2] csdn:《Matlab实现简单的GifShuffle算法隐藏信息》《Matlab实现简单的hide&seek算法隐藏信息》;Spwpun

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值