Necesito obtener el Center of Mass (Centroide) para los componentes en un conjunto de imágenes binarias con precisión subpixel.ComponentMeasurements [_, "Centroid"] resultados offset
Mathematica 8 viene con una buena adición:
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.}}
*)
Pero pasó por algunas dificultades cuando esos resultados mostraron algunas inconsistencias con otros cálculos hechos en otros lugares.
Así que rodó mi propia, tal vez no es agradable:
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}}
*)
Se puede ver que hay un 0,5 desplazamiento entre estos resultados:
Thread[Subtract[m1, f[i]]]
(*
-> {{-0.5, -0.5, -0.5, -0.5}, {0.5, 0.5, 0.5, 0.5}}
*)
Al principio me pensó que el problema estaba relacionado con las dimensiones de la imagen que eran pares o impares, pero ese no es el caso.
Preferiría usar ComponentMeasurements[ ..,"Centroid"]
y corregir los resultados, pero me temo que las futuras versiones de Mma pueden modificar este comportamiento y echar a perder los resultados.
También podría ejecutar una "calibración" previa con una imagen conocida y calcular los desplazamientos, por lo que se autocorregirá, pero me gustaría entender lo que está sucediendo primero.
¿Esto es un error?
¿Alguna idea sobre por qué sucede esto?
supongo que esto podría tener que ver con la convención en la que los centros de píxeles se encuentran en relación con la cuadrícula de coordenadas. Si un algoritmo supone que la cuadrícula de coordenadas se alinea con los límites de los píxeles y el otro asume que la cuadrícula está alineada con los centros de píxeles, se obtienen resultados inconsistentes. –