Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
 
 
主题工具 显示模式
旧 2009-04-02, 15:49   #1
melody510515
初级会员
 
注册日期: 2009-03-02
年龄: 37
帖子: 8
声望力: 0
melody510515 正向着好的方向发展
默认 [求助]Subscript indices must either be real positive integers or logicals.错误

主程序
function [count,msg,result]=hidedctadv(image,imagegoal,msg,key,alpha)
frr=fopen(msg,'r');
[msg,count]=fread(frr,'ubit1');
fclose(frr);
data0=imread(image);
data0=double(data0)/255;
data=data0(:,:,1);
T=dctmtx(8);
DCTrgb=blkproc(data,[8 8],'P1*x*P2',T,T');
[row,col]=size(DCTrgb);
row=ceil(row/8);
col=ceil(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
temp=0;
for i=1:count
if msg(i,1)==0
if DCTrgb(k1(i)+4,k2(i)+1) > DCTrgb(k1(i)+3,k2(i)+2) 提示这一行出错
temp=DCTrgb(k1(i)+4,k2(i)+1);
DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+3,k2(i)+2);
DCTrgb(k1(i)+3,k2(i)+2)=temp;
end
else
if DCTrgb(k1(i)+4,k2(i)+1) < DCTrgb(k1(i)+3,k2(i)+2)
temp=DCTrgb(k1(i)+4,k2(i)+1);
DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+3,k2(i)+2);
DCTrgb(k1(i)+3,k2(i)+2)=temp;
end
end
if DCTrgb(k1(i)+4,k2(i)+1)>DCTrgb(k1(i)+3,k2(i)+2)
DCTrgb(k1(i)+3,k2(i)+2)=DCTrgb(k1(i)+3,k2(i)+2)-alpha;
else
DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+4,k2(i)+1)-alpha;
end
end
DCTrgb1=DCTrgb;
data=blkproc(DCTrgb,[8 8],'P1*x*P2',T',T);
result=data0;
result(:,:,1)=data;
imwrite(result,imagegoal);

下面是调用的randinterval程序
function [row,col] = randinterval(matrix,count,key)
% 计算间隔的位数
[m,n] = size(matrix);
interval1 = floor(m * n/count)+1;
interval2 = interval1 - 2;
if interval2 == 0
error('载体太小不能将秘密信息隐藏进去!');
end
% 生成随机序列
rand('seed',key);
a = rand(1,count);
%
row = zeros([1 count]);
col = zeros([1 count]);
% 计算row 和 col
r=1;
c=1;
row(1,1)=r;
col(1,1)=c;
for i=2:count
if a(i)>=0.5
c=c+interval1;
else
c=c+interval2;
end
if c>n
r=r+1;
if r>m
error('载体太小不能将秘密信息隐藏进去!');
end
c=mod(c,n);
if c==0
c=1;
end
end
row(1,i)=r;
col(1,i)=c;
end
主程序运行时产生的错误:
??? Subscript indices must either be real positive integers or logicals.
Error in ==> F:\melody\hidedctadv.m
On line 22 ==> if DCTrgb(k1(i)+4,k2(i)+1) > DCTrgb(k1(i)+3,k2(i)+2)
请问上面的程序具体是错在哪个位置啊,万分感谢!
melody510515 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
[MATLAB基础] 如何不输出matlab的警告信息 在线等 wangfanee MATLAB论坛 1 2009-05-11 19:04


所有时间均为北京时间。现在的时间是 15:35


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.