二值图像信息隐藏

介绍

二值图像又称为黑白图像,一般用1或0表示色或白色素点,利用二值图像信息隐藏的方法主要是根据二值图像中白色像素数量的比较来隐藏信息

理论描述

二值图像信息隐藏的方法是把一个二值图像分成一系列矩形图像区域B,某个图像区域B中黑色像素的个数大于一半,则表示嵌入0,如果白色像素的个数大于一半,则表示嵌入1,但是当需要嵌入的比特与所选区域的黑白像素的比例不一致,为了达到与像素关系,刚需要修改一些像素的color.

此方法的缺点是没有明确界定哪些像素可以修改以便于隐藏秘密信息,二值图像中某些像素的修改可能会引起二值图像视觉效果上的较大变化,相应的水印嵌入算法可能在较大程度上破坏图像质量。

参考代码

clc;
clear all;

msgfid = fopen('hidden.txt','r');
[msg, count] = fread(msgfid);
fclose(msgfid);

msg = str2bit(msg);
count =count*8;

[fn,pn] = uigetfile({'*.bmp','bmpfile(*.bmp)';},'chose file');
io =reamd(strcat(pn,fn));
watermarklen = count;
[row col] =size(io);
l1=floor(row/watermarklen);
l2=floor(col/watermarklen);

pixelcount = l1*l2;
percent = ceil(pixelcount/2);
iw =io;

ioblack(1,watermarklen)=0;
iowhite(1,watermarklen)=0;
n =1;

while n<=watermarklen
    for i =l1*(n-1)+1:l1*n
        for j =l2*(n-1)+1:l2*n
            if io(i,j) ==0
                ioblack(1,n) =ioblack(1,n)+1;
            else
                iowhite(1,n) =iowhite(1,n)+1;
            end
        end
    end
    n =n+1;
end

n =1;
while n <=watermarklen
    if msg(n,1) ==1;
        if ioblack(1,n)>=perecent;
            modcount(1,n)=ioblack(1,n)-percent+1;
            k =1;
            for i =l1*(n-1)+1:l1*n
                for j =l2*(n-1)+1:l2*n
                    if(iw(i,j) ==0&&k<=modcount(1,n))
                        iw(i,j) =1;
                        k =k+1;
                    end
                end
            end
        end
    else
        if iowhite(1,n) >=percent;
            modcount(1,n) = iowhite(1,n)-percent +1;
            k =1;
            for i =l1*(n-1)+1:l1*n
                for j =l2*(n-1)+1:l2*n
                     if(iw(i,j) ==1&&k<=modcount(1,n))
                        iw(i,j) =1;
                        k =k+1;
                     end
                end
            end
        end
    end
    n =n+1;
    end
    
    n =1;
    iwblack(i,watermarklen) =0;
    iwwhite(i,watermarklen) =0;
    while n<=watermarklen
         for i =l1*(n-1)+1:l1*n
             for j =l2*(n-1)+1:l2*n
                 if(iw(i,j) ==0)
                     iwblack(1,n)=iwblack(1,n)+1;
                 else
                     iwwhite(1,n)=iwwhite(1,n)+1;
                 end
             end
         end
         n=n+1;
    end
    
    figure;
    imshow('hunter.bmp');
    imwrite(iw,'huntermarked.bmp');
    figure;
    imshow('huntermarked.bmp');


关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.

你可能感兴趣的:(【Image,Engineering】,【MATLAB/SCILAB】,图像工程基础与实践,图像分析,图像信息隐藏,二值图像)