7

これは精度の問題ではないと思います。答えは約 0.226 になるはずです。正確なコードは次のとおりです。

val = I(i,j)
bucketSize    
pos = val / bucketSize

I値を取得している単なるマトリックスです。MATLAB からの出力は次のとおりです。

val =

   29

bucketSize =

   128

pos =

   0

私は何が欠けていますか?

4

4 に答える 4

17

私の推測では、マトリックスは画像ファイルIからロードされたピクセル データであり、通常は符号なし 8 ビット整数の値を持ちます。既に述べたように、両方の整数値を倍精度値に変換すると、MATLAB は整数除算ではなく浮動小数点除算を実行します (結果が四捨五入されます)。

1 つの値を倍精度に変換するだけでは不十分です。

1 つのオペランドが整数データ型 (64 ビット整数を除く) の配列であり、もう 1 つのオペランドがスカラー double であるすべてのバイナリ演算では、MATLAB は要素単位の倍精度演算を使用して演算を計算し、結果を元の演算に変換します。整数データ型。

MATLAB のさまざまな数値データ型について詳しく知りたい場合は、このドキュメントを参照してください。

于 2010-09-11T03:44:26.633 に答える
12

試す:

double(val)/double(bucketSize)
于 2010-09-11T02:57:15.907 に答える
1

問題は、何らかの理由で行列に double ではなく uint8 が含まれていたことです。val=I(i,j) を val=double( I(i,j) ) に変更しただけで、すべて問題ありません。ありがとう。

于 2010-09-11T03:02:29.960 に答える
0

これらの変数は、おそらく double や long ではなく int です。1/2 は .5 を返しますか? 他の操作は機能しますか?

于 2010-09-11T02:52:41.280 に答える