二值图像又称为黑白图像,一般用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.
原文:http://blog.csdn.net/songzitea/article/details/19117955