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

发布时间:2024-11-25

包括RLEhiding,RLEextract,bit2str等文件,完成二值图像信息的隐藏和提取。

注:本代码来源于《信息隐藏于数字水印实验教程》,但是源程序在Matlab2012版本上面无法正确运行,因此本人进行简单的修改后可以顺利运行,但是提取的数据还是不对。。。

1. 隐藏算法源代码RLEhiding.m文件

clc;

clear all

oi=imread('lena.bmp');

if(length(size(oi))==3)

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;

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

包括RLEhiding,RLEextract,bit2str等文件,完成二值图像信息的隐藏和提取。

mmsg(i,:)=[mm(i,:),msg(i,:)];

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); % 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

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);

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');

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)

%将数组转换成二位数组,row为行数

包括RLEhiding,RLEextract,bit2str等文件,完成二值图像信息的隐藏和提取。

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为一维二值图像数组 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);

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;

i=i+1;

包括RLEhiding,RLEextract,bit2str等文件,完成二值图像信息的隐藏和提取。

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

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为二进制一维向量 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

二值图像信息隐藏-游程编码.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219