Esto se realiza por medio de un algoritmo de búsqueda.
EL proceso es el siguiente:
- Se agrega un primer elemento a la cola
- Posteriormente se checa con sus vecinos cual de ellos es apto para agregarlo a la cola
- Se agregan todos los elementos aptos y se cambian de color el elemento actual y al finalizar se elimina este elemento
- Se marca como visitado el elemento borrado
- Posteriormente si la cola llega en un tamaño de cero, esto nos indica que el objeto a sido pintado y verifica que elementos no han sido visitados
- Se agrega el nuevo elemento y se repite el proceso
- El algoritmo termina cuando todos los pixeles han sido recorrido
Para poder realizar este algoritmo es necesario que los bordes de la imagen estén bien cerrados, para esto se utilizo normalización y binarización para limpiar la imagen y hacer un poco más gruesos los bordes.
Aquí primero la imagen original:
Aquí la imagen con bordes:
Aquí con normalización para cerrar las líneas y haceras más gruesas:
Pintamos la imagen:
Para el punto del medio se realizó el siguiente método:
Primero se guardo en una lista los diferentes x e y para cada uno de los objetos. Posteriormente se verificó el punto del medio sacando el promedio entre la coordenada de x mayor y x menor para sacar la coordenada x final. De la misma manera con y. Estos valores se guardarón en un arreglo para pintar los diferentes círculos en grises.Aquí el código completo del programa:
Los discos de centros de masa son enormes :P Intenta cuidar la ortografía en los comentarios; en el gist, pon solamente el código relevante a la cosa nueva (por ejemplo aquí las normalizaciones y binarizaciones no son relevantes para ver) y deja el código completo en el Git, con liga en el blog. 5 pts.
ResponderEliminar