声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1327|回复: 2

[图像处理] DCT信息隐藏中信息提取失败,求救

[复制链接]
发表于 2007-5-7 02:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
关于在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,[8 8],'P1*x*P2',T,T');
%产生随机的块选择,确定图像块的首地址
[row,col]=size(DCTcheck);
row=floor(row/8);
col=floor(col/8);
a=zeros([row col]);
[k1,k2]=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);
回复
分享到:

使用道具 举报

发表于 2007-5-7 09:35 | 显示全部楼层
frr=fopen(msg,'w');

问题出在上述语句上。事实上,extractdctadv 函数的输入只有4个参数,而你调用的时候有5个,估计前者漏了
 楼主| 发表于 2007-5-7 11:12 | 显示全部楼层
调用时参数的出错当时已经被改正了
后来发现
把fwrite(frr,1,'bit1);
中的bit1改为ubit1后可以提取了
奇怪的很
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 12:21 , Processed in 0.057723 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表