这是我的代码:
function [im,sindx,end1]=alln(im,i,j,secret,sindx,end1)
slen=length(secret);
p=im(i,j);
neigh= [im(i-1,j) im(i+1,j) im(i,j-1) im(i,j+1) im(i-1,j-1) im(i+1,j-1) im(i-1,j+1) im(i+1,j+1)];
minpix = min (neigh)
maxpix = max (neigh)
if minpix < p < maxpix
lowlim = minpix+1;
highlim = maxpix-1;
range = highlim-lowlim+1;
nbits=floor(log2(abs(range)));
if sindx+nbits-1>slen
end1=1;
return
end
for k=1:nbits
bin(k)=secret(sindx+k-1);
end
b = bin2dec(bin);
newvalue1 = abs (minpix + b);
newvalue2 = abs (maxpix - b);
if abs(p-newvalue1)<= abs(p-newvalue2)
im(i,j) = newvalue1;
else
im(i,j) = newvalue2;
end
sindx=sindx+nbits;
end
end
我的主程序调用此函数。当我运行该程序时,我收到以下错误消息:
??? Undefined function or variable "bin".
Error in ==> alln at 34
b = bin2dec(bin);
我知道有很多专家对他们来说根本不是问题。我是MATLAB的新手。请大家指点一下,代码中哪种类型的修改可以解决这个问题?
答案 0 :(得分:1)
首先,文件中是否缺少一些行?也许你从顶部删除了一些评论?因为错误消息说明了
b = bin2dec(bin);
是第34行,但它是你出现的代码中的第22行。
好的,那边......
错误消息显示'bin'未定义,但我看到它正在线上设置......
bin(k)=secret(sindx+k-1);
这告诉我,这条线没有运行。
我看到bin = ...行在'for'循环中,所以我怀疑for循环运行了零次,这意味着'bin'永远不会被定义。什么是nbits?是1还是不到1?这会阻止循环运行。
尝试从
的末尾删除分号nbits=floor(log2(abs(range)));
再次排队并运行您的代码。
不使用分号将强制在命令窗口中打印nbits的值。我打赌你会发现它是1或更少。如果是这样的话,那么开始看看如何计算nbits nbits,我打赌你会发现问题。
答案 1 :(得分:0)
函数alln
的输入参数是,您收到错误了吗?
假设nbits
为0,则以下循环不会运行:
for k=1:nbits
bin(k)=secret(sindx+k-1);
end
因此,bin
将是未定义的。所以,错误发生了。这是可能发生错误的情况之一。有很多这样的可能案例。