回 帖 发 新 帖 刷新版面

主题:matlab 程序运行出错,请高手指点,万分感谢!

主程序
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)
请问上面的程序具体是错在哪个位置,应该怎样修改呢.
万分感谢!

回复列表 (共2个回复)

沙发


请大虾们帮帮忙,感激不尽.

板凳

请大虾们帮帮忙,我实在是解不出来了,请帮帮我!

我来回复

您尚未登录,请登录后再回复。点此登录或注册