サブピクセル精度のバイナリイメージのコンポーネント内のコンポーネントの中心(セントロイド)を取得する必要があります。ComponentMeasurements [_、 "Centroid"]結果のオフセット
のMathematica 8は素晴らしい追加が付属しています:
i = [email protected]"http://i.stack.imgur.com/2pxrN.png";
m1 = ComponentMeasurements[MorphologicalComponents[i], "Centroid"] /.
Rule[_, x_] -> x
(*
-> {{403.229, 453.551}, {660.404, 371.383}, {114.389, 434.646}, {295.5, 206.}}
*)
しかし、これらの結果は、他の場所で行われ、他の計算をして、いくつかの矛盾を示したとき、私はいくつかのトラブルを通り抜けました。
だから私は多分素敵ではない、自分の圧延:
あなたは、これらの結果の間のオフセット0.5があることがわかりますi = [email protected]"http://i.stack.imgur.com/2pxrN.png";
f[i_] := [email protected]{#[[2]], ImageDimensions[i][[2]] - #[[1]]} & /@
(Mean /@
Function[x, Map[
Position[x, #, 2] &,
Complement[[email protected][x], {0}]]]
[MorphologicalComponents[i]]);
f[i]
Show[i, Graphics[{Red, Disk[#, 10] & /@ f[i]}]]
(*
-> {{403.729, 453.051}, {660.904, 370.883}, {114.889, 434.146}, {296., 205.5}}
*)
:
Thread[Subtract[m1, f[i]]]
(*
-> {{-0.5, -0.5, -0.5, -0.5}, {0.5, 0.5, 0.5, 0.5}}
*)
最初に私が問題は画像の大きさが偶数か奇数かに関係していると考えましたが、そうではありません。
私はComponentMeasurements[ ..,"Centroid"]
を使用して結果を修正することをお勧めしますが、将来のMmaのバージョンがこの動作を修正し、結果を損なう恐れがあります。
既知の画像で以前の「キャリブレーション」を実行してオフセットを計算することもできるので、自動的に修正されますが、最初に何が起こっているのかを理解したいと思います。
これはバグですか?
これはなぜ起こっているのですか?
これは、ピクセル中心が座標グリッドを基準にして配置されている規則に関係していると思います。 1つのアルゴリズムで座標グリッドがピクセル境界に揃えられ、他のアルゴリズムでグリッドがピクセル中心に揃えられていると仮定すると、矛盾した結果が得られます。 –