dicanonia 发表于 2007-5-7 02:44

DCT信息隐藏中信息提取失败,求救

关于在DCT域嵌入文本信息的matlab程序,载体图像使用256*256的lenna灰度图
用了两个函数,一个是信息嵌入,一个是信息提取
信息成功嵌入,但是在提取的过程中,虽然可以提取出和原来的txt文本文件同样大小的txt文件
但发现里面是空文件,没有文字....
不知道是否是fwrite的问题
求救。
信息提取程序如下


% extractdctadv.m
%用于DCT隐藏信息的提取
%输入格式举例:tt=extractdctadv('lennahide.jpg','jpg','2.txt',1982,40)
%参数说明
%image为已经藏有信息的图像
%msg为提取信息存放的位置
%key为密钥,用来控制随机选块
%count为信息的比特数,由藏入方给出
function result=extractdctadv(image,msg,key,count)
data0=imread(image);
data0=double(data0)/255;
%用图像第一层做提取
data=data0(:,:,1);
%分块做DCT变换
T=dctmtx(8);
DCTcheck=blkproc(data,,'P1*x*P2',T,T');
%产生随机的块选择,确定图像块的首地址
=size(DCTcheck);
row=floor(row/8);
col=floor(col/8);
a=zeros();
=randinterval(a,count,key);
for i=1:count
    k1(1,i)=(k1(1,i)-1)*8+1;
    k2(1,i)=(k2(1,i)-1)*8+1;
end
%准备提取并回写信息
frr=fopen(msg,'w');
for i=1:count
    if DCTcheck(k1(i)+4,k2(i)+1)<=DCTcheck(k1(i)+3,k2(i)+2);
      fwrite(frr,0,'bit1');
      result(i,1)=0;
    else
      fwrite(frr,1,'bit1');
      result(i,1)=1;
    end
end
fclose(frr);

eight 发表于 2007-5-7 09:35

frr=fopen(msg,'w');
问题出在上述语句上。事实上,extractdctadv 函数的输入只有4个参数,而你调用的时候有5个,估计前者漏了

dicanonia 发表于 2007-5-7 11:12

调用时参数的出错当时已经被改正了
后来发现
把fwrite(frr,1,'bit1);
中的bit1改为ubit1后可以提取了
奇怪的很
页: [1]
查看完整版本: DCT信息隐藏中信息提取失败,求救