0

这是我的代码:

    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 新手。请各位大神指路,代码中的哪种类型的修改可以解决这个问题?

4

2 回答 2

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,我敢打赌你会发现问题所在。

于 2013-03-09T06:46:36.383 回答
0

函数的输入参数是什么alln,你得到错误了吗?

让我们假设它nbits是 0,那么下面的循环将不会运行:

for k=1:nbits
    bin(k)=secret(sindx+k-1);
end

所以,bin将是未定义的。所以,错误发生了。这是可能发生错误的情况之一。这种可能的情况很多。

于 2013-03-09T06:47:56.157 回答