1

次のコードを使用して、matlab で画像の各ピクセルlogを見つけようとしていますbase 10

m1 = imread('owl','pgm');
for x = 1:size(m1,1)
    for y = 1:size(m1,2)
        m1(x,y) = log10(m1(x,y));  
    end
end

ここで、m1 は 221 X 201 のオーダーの 2 次元配列ですが、このエラーに直面しています。

??? Undefined function or method 'log2' for input arguments of type 'uint8'.

Error in ==> log10 at 20
y = log2(x);

Error in ==> q2 at 38
        m1(x,y) = log10(m1(x,y));

しかし、次のコードを使用してログ機能をデバッグすると

fprintf('log of 190 is %d', log10(190));

ループで同じコードを使用したときに何が起こったのかわかりません。

4

1 に答える 1

3

log10エラーメッセージは、問題が何であるかを示しています。関数をタイプの値に適用しようとしましたがuint8、関数はそのタイプの数値に対して定義されていません。あなたが気付いていないのはimread、画像ファイルが特定の基準を満たしている場合(それらの基準が何であるかについてはドキュメントを読んでください)、ピクセルデータをuint8実数ではなくsの配列にキャプチャするということです。

の対数を取りたい場合は、uint8そのような入力を受け取る独自の対数関数を定義するか、より簡単に、満足のいくuint8タイプにをキャストする必要があります。log10たとえば、次のように書くことができます。

log10(double(m1(x,y)))

これで、診断テストで有用な情報が得られなかった理由がわかります。コマンドMatlabを実行すると、デフォルトで、それがタイプであるとlog10(190)判断され、文句なしに対数が計算されます。 別の話をします。190doublelog10(uint8(190))

于 2012-11-02T13:56:50.057 に答える