Detección de textura y propiedades de región en una imagen

9

Tengo un problema interesante que estoy tratando de resolver. Entonces, por ejemplo, si tenemos una imagen en blanco y negro que contiene dos texturas (A y B), estoy interesado en conocer los valores de píxeles de los límites que cubrirían completamente las texturas individuales.

Pensé en usar la correlación cruzada, lo que me daría un grupo de posiciones, de la plantilla (leyendas) en la imagen, pero ¿hay alguna forma de usar eso para obtener los valores de píxeles de los límites (generalmente son irregulares)? Además, ¿hay alguna otra mejor manera de hacer esto?

Un ejemplo real de esto sería detectar las regiones de lluvia en un mapa que muestra tres niveles de lluvia en un año. A cada nivel se le asigna una textura que está presente en la leyenda, que se utiliza para la coincidencia de textura en la misma imagen.

Lorem Ipsum
fuente
44
Sería útil si realmente compartido ejemplos y tal vez algunas soluciones preliminares que haya probado
Ivo Flipse
3
Definitivamente suba algunas imágenes de ejemplo para que entendamos lo que está haciendo. ¿Como algunas regiones están llenas de sólidos y otras tienen sombreados? nps.gov/sagu/naturescience/images/…
endolith
En caso de que tenga matlab, puede usar la caja de herramientas de procesamiento de imágenes. De lo contrario, su sitio web aún ofrece una buena visión general de los algoritmos estándar que puede utilizar, por ejemplo, la función bwconncomp .
Sr. White

Respuestas:

1

Aquí hay un proceso simple:

  1. Asigne medidas de textura a cada región de la imagen.
  2. Use un algoritmo de etiquetado / conectividad de región (o algoritmo de crecimiento de región) para unir regiones adyacentes que tengan la misma medida de textura.
  3. Implemente un algoritmo simple de seguimiento de bordes para trazar el contorno de cada región.

Las medidas de textura de Law son una técnica más antigua pero útil para determinar la textura de una imagen, y pueden ser suficientes para distinguir la textura A de la textura B en toda la imagen. Consulte la sección "Leyes de medidas de energía de textura" en el artículo de Wikipedia:

http://en.wikipedia.org/wiki/Image_texture

Como primer paso, calcule todas las medidas de textura y determine qué medida particular (por ejemplo, Borde o Punto) le permite distinguir una textura de la otra más fácilmente. (Si publicas algunas fotos, podría ayudarte a identificar una medida de textura).

Si solo tiene dos texturas, A y B, puede tratarlas como primer plano y fondo, y un algoritmo de etiquetado de región estándar funcionará. Para que sea más fácil ver lo que está sucediendo en el procesamiento, puede generar una nueva imagen asignando elementos de textura A (elementos de textura, pequeños fragmentos de textura) al color blanco y elementos de textura B al color negro. Los algoritmos de etiquetado de región y / o seguimiento de contorno encontrarían las regiones blancas y negras conectadas. La función findContours () en OpenCV funcionará bien.

http://en.wikipedia.org/wiki/Connected-component_labeling

El mismo artículo de Wikipedia incluye tanto el algoritmo multipass tradicional como un algoritmo de un solo paso. No he implementado el algoritmo de un solo paso descrito allí, pero he trabajado con el algoritmo de un solo paso descrito en el documento "Algoritmo de etiquetado de componentes usando la técnica de trazado de contorno" de Chen y Chang. El documento de Chen y Chang también describe un algoritmo estándar de seguimiento de contornos que se puede implementar rápidamente.

Si tiene más de dos texturas, puede usar un algoritmo de cambio de agua o de cambio medio para agrupar regiones después de reasignar las texturas a colores. Aunque esta reasignación de textura a color no es necesaria, hace que el proceso sea más fácil de depurar y comprender.

Repensar
fuente