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行目です。

OK、それはさておき...

エラーメッセージには、「bin」が定義されていないことが示されていますが、行に設定されていることがわかります...

bin(k)=secret(sindx+k-1); 

それは、その行が実行されていないことを私に示唆しています。

そのbin=...行が'for'ループの内側にあることがわかります。したがって、forループは0回実行されていると思われます。つまり、'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未定義になります。したがって、エラーが発生します。これは、エラーが発生する可能性があるケースの1つです。そのような可能性のあるケースはたくさんあります。

于 2013-03-09T06:47:56.157 に答える