2012-04-14 14 views
6

Tengo un lienzo con una imagen dibujada.buscando un algoritmo para encontrar el límite de la región de color

Cuando el usuario hace clic en la imagen, necesito encontrar la región de color en la que el usuario hizo clic. Una región se define como un conjunto de píxeles conectados de 4 vías con el mismo color que el píxel en el que se hizo clic.

necesito la región en una forma que podría utilizar para configurar un trazado de recorte en el lienzo, para que pudiera llenar el área con, por ejemplo, un gradiente, etc.

¿Existen algoritmos eficientes para encontrar ¿un límite? Algo más óptimo que los algoritmos de relleno de inundación (no es necesario que lo complete, solo necesito encontrar un camino alrededor de mi región).

+0

¿Qué desea que suceda si no hay un solo límite, p. haciendo clic en un toro, o en las mejillas de una [cara sonriente] (http://phrogz.net/svg/svg_in_xhtml5.xhtml)? – Phrogz

+0

para mi aplicación, sería suficiente obtener una ruta que describa la región exterior, a menos que obtener un conjunto de rutas que describan tanto las regiones exterior como interior no sea mucho más costoso. Sospecho que necesito algún tipo de algoritmo de etiquetado de píxeles seguido de una fase que unifica etiquetas mediante el cálculo de componentes conectados. – akonsu

Respuesta

4

Creo que el algoritmo de seguimiento de Moore Neighborhood hará lo que quiera. Por definición, el vecindario de Moore mira la conectividad de 8, pero debería ser capaz de ajustarlo fácilmente a 4 conexiones. Es probable que las regiones resultantes sean mejores si prueba la 8 conexión, pero su aplicación puede tener requisitos específicos.

Wikipedia tiene un buen resumen del algoritmo here. Trabajé con esto en el pasado y tuve un gran éxito, es muy rápido.

+0

gracias. el único problema con este enfoque es cómo encontrar un pixel de declaración. en mi caso, necesito rastrear un contorno de una región y no es la única región en la imagen, por lo que no puedo escanear la imagen comenzando en la esquina. – akonsu

+0

Si comienza su iteración en la ubicación del clic del mouse del usuario, el contorno resultante será de la región deseada. La idea general es que camines de izquierda a derecha hasta que toques un píxel de un color diferente. Al encontrar ese píxel, miras a todos los vecinos en el sentido de las agujas del reloj y te mueves al primer píxel que forma parte de la región actual. Eventualmente terminas con un esquema. No tiene que escanear la imagen comenzando en la esquina. – Xenethyl

+0

Supongamos que hago clic en un píxel blanco en algún lugar en el medio de la región (quiero delinear una región blanca), y no tiene píxeles negros (mi fondo) en su vecindad. ¿Entonces, qué hago? – akonsu

Cuestiones relacionadas