これは精度の問題ではないと思います。答えは約 0.226 になるはずです。正確なコードは次のとおりです。
val = I(i,j)
bucketSize
pos = val / bucketSize
I
値を取得している単なるマトリックスです。MATLAB からの出力は次のとおりです。
val =
29
bucketSize =
128
pos =
0
私は何が欠けていますか?
これは精度の問題ではないと思います。答えは約 0.226 になるはずです。正確なコードは次のとおりです。
val = I(i,j)
bucketSize
pos = val / bucketSize
I
値を取得している単なるマトリックスです。MATLAB からの出力は次のとおりです。
val =
29
bucketSize =
128
pos =
0
私は何が欠けていますか?
私の推測では、マトリックスは画像ファイルI
からロードされたピクセル データであり、通常は符号なし 8 ビット整数の値を持ちます。既に述べたように、両方の整数値を倍精度値に変換すると、MATLAB は整数除算ではなく浮動小数点除算を実行します (結果が四捨五入されます)。
1 つの値を倍精度に変換するだけでは不十分です。
1 つのオペランドが整数データ型 (64 ビット整数を除く) の配列であり、もう 1 つのオペランドがスカラー double であるすべてのバイナリ演算では、MATLAB は要素単位の倍精度演算を使用して演算を計算し、結果を元の演算に変換します。整数データ型。
MATLAB のさまざまな数値データ型について詳しく知りたい場合は、このドキュメントを参照してください。
試す:
double(val)/double(bucketSize)
問題は、何らかの理由で行列に double ではなく uint8 が含まれていたことです。val=I(i,j) を val=double( I(i,j) ) に変更しただけで、すべて問題ありません。ありがとう。
これらの変数は、おそらく double や long ではなく int です。1/2 は .5 を返しますか? 他の操作は機能しますか?