当前位置:文档之家› 二值图像信息隐藏-游程编码

二值图像信息隐藏-游程编码

end
[row col]=size(oi);
oi=oi(:
);
len=size(oi);
i=1;
j=1;
while(i<len
(1))
or=oi(i);
count=1;
while(i<len
(1)&&oi(i+1)==or)
i=i+1;
count=count+1;
end
RLE(j)=count;
j=j+1;
A=oi;
fori=1:length(oi)
if(oi(i)<128)
A(i)=0;
else
A(i)=1;
end
end
4.提取算法源代码RLEextract.m文件
clc;
clear all;
oi=imread('marked.bmp');
if(length(size(oi))==3)
oi=rgb2gray(oi);
for l=1:msgcount
modpoint=0;
for x=1:2*l
modpoint=modpoint+RLE(x,2);
end
ifmsg(l)==0
if ((mod(RLE(2*l,2),2)~=0)&&(RLE(2*l+1,2)~=1))
oi(modpoint+1)=mod(oi(modpoint+1)+1,2);
%RLE(l+1,2)=RLE(l+1,2)-1;
%end
%else
%if((mod(RLE(l,2),2)==0)&&(RLE(l+1,2)~=1))
%oi(RLE(l+1,1))=mod(oi(RLE(l+1,1))+1,2);
%RLE(l+1,2)=RLE(l+1,2)-1;
%end
%end
% end
count=count+1;
end
RLE(j,:
)=[t,count];%RLE为游程
j=j+1;
i=i+1;
t=t+count;
end
ifi==len
(1)
RLE(j,:
)=[i,1];
end
% RLE=RLE';
msgfid=fopen('hidden.txt','r');
[msg,msgcount]=fread(msgfid);
fclose(msgfid);
msg=uint8(dec2bin(msg)-48);
[htxt,ltxt]=size(msg);
mmsg=zeros(htxt,8);
if(ltxt<8)
n=8-ltxt;
mm=zeros(htxt,n);
fori=1:htxt
mmsg(i,:
)=[mm(i,:
),msg(i,:
注:
本代码来源于《信息隐藏于数字水印实验教程》,但是源程序在Matlab2012版本上面无法正确运行,因此本人进行简单的修改后可以顺利运行,但是提取的数据还是不对。。。
1.隐藏算法源代码RLEhiding.m文件
clc;
clear all
oi=imread('lena.bmp');
if(length(size(oi))==3)
)];
end
end
msg=mmsg';
msgcount=msgcount*8;
% for l=1:msgcount
%if msg(l)==0
%if((mod(RLE(l,2),2)~=0)&&(RLE(l+1,2)~=1))
%oi(RLE(l+1,1))=mod(oi(RLE(l+1,1))+1,2);
len=size(ot);
A=zeros(len
(1),1);
fori=1:len
(1)
sum=0;
for j=7:(-1):0
sum=sum+ot(i,8-j)*2^j;
end
A(i)=sum;
End
i=i+1;
end
ifi==len
(1)
RLE(j)=1;
end
RLE=RLE';
msgcount=72;%必须知道水印的长度
msg=zeros(msgcount,1);
n=0;
for l=1:msgcount
if mod(RLE(2*l),2)==0
msg(l)=0;
else
msg(l)=1;
end
பைடு நூலகம்end
else
if ((mod(RLE(2*l,2),2)==0)&&(RLE(2*l+1,2)~=1))
oi(modpoint+1)=mod(oi(modpoint+1)+1,2);
end
end
end
m1=Vector2Matrix(oi,row);
m1=m1';
imwrite(m1,'marked.bmp');
oi=rgb2gray(oi);
end
[row col]=size(oi);
oi=oi(:
);
oi=ToBin(oi);
len=size(oi);
i=1;
j=1;
t=1;
whilei<len
(1)
or=oi(i);
count=1;
while (i<len
(1)&&oi(i+1)==or)
i=i+1;
%将数组转换成二位数组,row为行数
cl=length(oi)/row;
A=zeros(row,cl);
fori=1:row
for j=1:cl
A(i,j)=oi(cl*(i-1)+j);
end
end
3.ToBin.m子函数
function A=ToBin(oi)
%将像素点的值转换为0和1,oi为一维二值图像数组
figure;
subplot(1,2,1);imshow('lena.bmp');title('original image');
subplot(1,2,2);imshow('marked.bmp');title('watermarked image');
2.Vector2Matrix.m子函数
function A=Vector2Matrix(oi,row)
end
ot=Vector2Matrix(msg,msgcount/8);
out=bit2str(ot);
fid=fopen('message.txt','wt');
fwrite(fid,out);
fclose(fid);
5.bit2str.m子函数
function A=bit2str(ot)
%二进制转换为十进制,ot为二进制一维向量
相关主题