数字图像处理 信息隐藏 直方图平移

通过改变像素值的细微差异实现无损信息隐藏,利用MATLAB进行图像处理。误差预测直方图方法依赖于相邻像素的相关性,通过中值预测误差直方图,选择像素差接近0/1的点作为数据嵌入的载体,确保秘密信息的嵌入和提取过程不会影响图像质量。
摘要由CSDN通过智能技术生成

改变两个大小相近的像素值,人的肉眼无法察觉出区别,所以将二进制的01作为是否改变的依据进行载体图像的修改,然后再根据修改后的载体图像进行倒推得到嵌入的秘密数据,从而实现无损的嵌入和提取。
误差预测直方图是利用图像中相邻像素值之间的相关性,构建原始图像的预测误差直方图,嵌入秘密信息。中值预测误差直方图的方法,原理是对像素点I(i,j),选取周围点A(i,j+1);B(i+1,j+1);C(i,j+1),算出中值与I的像素差,用像素差相近,即为0/1的点作为载体嵌入数据。

直方图平移法:
嵌入函数:
function [stego_I,emD] = Embed(origin_I,Data,PK,Z)
% 函数说明:根据峰值点和零值点嵌入信息
% 输入:origin_I(原始图像),Data(秘密数据),PK(峰值点),Z(零值点)
% 输出:stego_I(载密图像),emD(嵌入的秘密信息)

[m,n] = size(origin_I); %统计图像的行列数
num = numel(Data); %秘密信息个数
stego_I = origin_I;
%% 根据峰值点PK和零值点Z嵌入信息
t = 0; %计数,嵌入信息的个数
for i=1:m
    for j=1:n
        if t >= num %秘密信息已嵌完
            break;
        end
        if stego_I(i,j)>PK && stego_I(i,j)<Z %将峰值点PK和零值点Z之间的像素向右平移
            stego_I(i,j) = stego_I(i,j) + 1;
        elseif stego_I(i,j)==PK
            t = t+1;
            stego_I(i,j) = stego_I(i,j) + Data(t);
        end
    end
end
%% 统计嵌入的秘密信息
emD = Data(1:t);
end

提取函数:
function [recover_I,reImg,exD] = Extract(stego_I,bitsnum,PK,Z,test)
% 函数说明:在载密图像中提取信息
% 输入:stego_I(载密图像),num(秘密数据个数),PK(峰值点),Z(零值点)
% 输出:recover_I(回复图像),exD(提取的秘密数据)

[m,n] = size(stego_I); %统计图像的行列数
recover_I = stego_I;
exD = zeros();
%% 根据峰值点PK和零值点Z提取信息
t = 0; %计数,提取信息的个数
for i=1:m
    for j=1:n
        if t >= bitsnum %秘密信息已提取结束
            break;
        end
        if recover_I(i,j)>PK+1 && recover_I(i,j)<=Z %将峰值点PK+1和零值点Z之间的像素向左平移
            recover_I(i,j) = recover_I(i,j) - 1;
        elseif recover_I(i,j)==PK %提取0
            recover_I(i,j) = recover_I(i,j);
            t = t+1;
            exD(t) = 0;
        elseif recover_I(i,j)==PK+1 %提取1
            recover_I(i,j) = recover_I(i,j)-1;
            t = t+1;
            exD(t) = 1;   
        end
    end
end

[h w] = size(test);
reImg = uint8(zeros(h,w));
k = 0;
for i = 1:h*w
        %bin2dec:将一个字符串表示的二进制数转换成一个十进制数
        %num2str:将数组exD中的数转换成字符串表示形式
        %显示图像,用unit8(无符号8位整型)调整为图像的标准数据格式
        reImg(i) = uint8(bin2dec(num2str(exD(
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值