我需要獲得質量爲(質心)的質心,用於具有亞像素精度的一組二進制圖像中的組件。ComponentMeasurements [_,「質心」]結果偏移量
數學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.}}
*)
但我通過一些麻煩去當這些結果表明一些不一致的地方與其他地方做過其他計算。
所以我推出我自己的,也許不是很好:
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}}
*)
你可以看到,有一個0.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版本可能會修改此行爲並破壞結果。
我也可以用一個已知的圖像運行一個先前的「校準」並計算偏移量,所以它會自動校正,但我想先了解是怎麼回事。
這是一個錯誤?
有關爲什麼會發生這種情況的任何想法?
我想這可能與像素中心相對於座標網格定位的慣例有關。如果一個算法假定座標網格與像素邊界對齊,另一個算法假定網格與像素中心對齊,則會得到不一致的結果。 –