我需要获得质量为(质心)的质心,用于具有亚像素精度的一组二进制图像中的组件。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版本可能会修改此行为并破坏结果。
我也可以用一个已知的图像运行一个先前的“校准”并计算偏移量,所以它会自动校正,但我想先了解是怎么回事。
这是一个错误?
有关为什么会发生这种情况的任何想法?
我想这可能与像素中心相对于坐标网格定位的惯例有关。如果一个算法假定坐标网格与像素边界对齐,另一个算法假定网格与像素中心对齐,则会得到不一致的结果。 –