美文网首页
LSB密写分析-信息量估计法

LSB密写分析-信息量估计法

作者: 科科Cole | 来源:发表于2020-07-18 10:59 被阅读0次

    信息量估计法的实现,简单说,先计算原图像F1,F2判断是否经过密写,再二次密写,在不同密写率下计算不同的F1,F2,将得到的点进行直线拟合,求得f1,f2两直线交点,由交点横坐标计算出密写率p。

    1. 信息量估计法主程序
    image='ste_cover.bmp';
    ste_cover=imread(image);
    ste_cover=double(ste_cover);
    [f1(1),f2(1)]=CalF(ste_cover); %得到初始f1,f2
    fprintf('F1=%d,F2=%d\n',f1(1),f2(1));
    %判断f2是否显著性大于f1(0.05)
    if f2(1)<=(f1(1)*1.05) %判断是否含秘密信息
        fprintf('不含秘密信息\n');
    else
        fprintf('含有秘密信息\n');
        rate(1)=0;
        i=2;
        for r=0.1:0.1:1 %二次嵌入
            ste2_cover=LSB(ste_cover,r);
            [f1(i),f2(i)]=CalF(ste2_cover);
            rate(i)=r;
            i=i+1;
        end
        %对f1,f2线性拟合,F=a*rate+b
        f1s=polyfit(rate,f1,1); %一次方程
        f2s=polyfit(rate,f2,1);
        a1=f1s(1);
        b1=f1s(2);
        a2=f2s(1);
        b2=f2s(2);
        plot(rate,f1,'o',rate,polyval(f1s,rate));
        hold on;
        plot(rate,f2,'o',rate,polyval(f2s,rate));
        legend('F1','F1','F2','F2');
        xlabel('Embedding rate alpha');
        ylabel('Values of F1 and F2');
        syms x y; %将x y设为符号变量
        eq1=y==a1*x+b1;
        eq2=y==a2*x+b2;
        p=solve([eq1,eq2],[x,y]); %求y1,y2两直线交点
        pb=p.x;
        pf=p.y;
        alpha=(abs(pb))/(1+abs(pb));
        alpha=double(alpha);
        format bank;
        fprintf('嵌入率为%d\n',alpha);
    end
    
    1. 信息量估计法中求F1,F2值的程序
    function [f1,f2]=CalF(matrix)
        n=hist(matrix(:),[0:255])'; %得到matrix的直方图
        h2i=n([1:2:255]); %h(2i)
        h2ip1=n([2:2:256]); %h(2i+1)
        h2ip2=n([3:2:255]); %h(2i+2)
        f1=0;
        f2=0;
        for i=1:127
            f1=f1+abs(h2ip1(i)-h2i(i));
            i=i+1;
        end
        for i=1:126
            f2=f2+abs(h2ip2(i)-h2ip1(i));
            i=i+1;
        end
    
    1. 信息量估计法中引用到的LSB密写程序
    function ste_cover=LSB(cover,rate)
        ste_cover=double(cover); %将图像矩阵的类型转换成双精度型,便于后续的运算
        [m,n]=size(ste_cover); %读取ste_cover的行和列
    
        %根据rate计算秘密信息位的长度并生成秘密信息
        msg_len=floor(m*n*rate);
        msg=randsrc(1,msg_len,[0 1;0.5 0.5]);
    
        p=1; %p为秘密信息的位计数器
        %按照产生的秘密信息依次将图片层的最后一位替换为秘密消息
        for f2=1:n
            for f1=1:m      
                if p>=msg_len
                    break;
                end
                ste_cover(f1,f2)=ste_cover(f1,f2)-mod(ste_cover(f1,f2),2)+msg(1,p);
                p=p+1;
            end
            if p==msg_len
                break;
            end
        end
    

    相关文章

      网友评论

          本文标题:LSB密写分析-信息量估计法

          本文链接:https://www.haomeiwen.com/subject/sexvghtx.html