2011-01-24 23 views
8

Tengo una imagen que es un mapa de calor de profundidad que he filtrado algo más alejado que el primer 25% de la imagen.Detectando una mancha de color en una imagen

se ve algo como esto: enter image description here

Hay dos manchas de color en la imagen, se trata de mi mano (con parte de la cara detrás de él), y el otro es el escritorio en la parte inferior izquierda esquina. ¿Cómo puedo buscar la imagen para encontrar estos blobs? Me gustaría poder dibujar un rectángulo alrededor de ellos si es posible.

también puedo hacer esto (ignorar las sombras, y filtrar a negro o blanco): enter image description here

Respuesta

2

Puede ser exagerado para lo que necesita, pero hay una gran envoltura para C# para las bibliotecas de OpenCV.

He utilizado con éxito OpenCV en C++ para la detección de blobs, por lo que puede resultarle útil para lo que está intentando hacer.

http://www.emgu.com/wiki/index.php/Main_Page

y la página wiki en OpenCV:

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

Editado para añadir: Aquí es una biblioteca de reconocimiento de regiones de Emgu en C#. Incluso hay algunas características agradables de ordenar los blobs por el área descendente (útil para filtrar el ruido).

http://www.emgu.com/forum/viewtopic.php?f=3&t=205

Editar Una vez más:

Si Emgu es demasiado pesado, Aforge.NET también incluye algunos métodos de detección blob

http://www.aforgenet.com/framework/

2

Si la imagen es realmente sólo dos o más distintos colores (muy poca falta de definición entre los colores), es una forma fácil caso para un algoritmo edge detection.

+0

Puedo hacer exactamente dos colores, si es necesario. Estoy filtrando un mapa de calor – Malfist

+0

Entonces debería estar bien con un algoritmo de detección de bordes. El problema no está en los colores, sino en el cambio de píxeles. Si tiene diferencias muy marcadas, es muy fácil, y esto se aplica a un mapa de calor. Sin embargo, no puedo ayudarte con una implementación específica del algoritmo. – Femaref

1

Usted puede usar algo como el código de ejemplo de esta pregunta: find a color in an image in c#

que le ayudará a encontrar la x/y de colores específicos en su imagen. Entonces puede usar el mínimo x/máximo xy el mínimo y/máximo y para dibujar sus rectángulos.

3

Elija un píxel aleatorio como un píxel de inicialización. Esto se convierte en el área A. Expande repetidamente A hasta que A no se haga más grande. Esa es tu área.

La manera de ampliar Una es mediante la búsqueda de píxeles vecinos a A, de modo que tengan color parecido a al menos un píxel vecino en A.

Qué "color parecido" significa para usted es algo variable. Si puedes hacer exactamente dos colores, como dices en otra respuesta, entonces "similar" es "igual". De lo contrario, "similar" significaría colores que tienen valores RGB o no, donde cada componente de los dos colores se encuentra dentro de una pequeña cantidad el uno del otro (es decir, 255, 128, 128 es similar a 252, 125, 130).

También puede limitar los píxeles seleccionados, por lo que deben ser similares al píxel inicial, pero eso funciona mejor cuando un humano está recogiendo la semilla. (Creo que esto es lo que se hace en Photoshop, por ejemplo.)

Esto puede ser mejor que la detección de bordes porque puede tratar degradados sin filtrarlos y no necesita procesar el resultado detectado bordes en un área coherente. Tiene la desventaja de que un degradado puede ir desde el negro al blanco y se registrará como la misma área, pero eso puede ser lo que desee. Además, debe tener cuidado con la implementación o de lo contrario será demasiado lento.

0

Detectar objeto de imagen basada en el color del objeto por C#

Para detectar un objeto en función de su color, hay un algoritmo fácil para r que. debe elegir un método de filtrado. Pasos normalmente son

Tome la imagen Aplicar ur filtrado Aplicar greyscalling fondo restar y obtener ur objetos encontrar toda la posición de los objetos marcar los objetos Primera u tiene que elegir un método de filtrado, hay muchos método de filtrado proporcionada para C#. principalmente prefiero filtros aforge, para este fin tienen pocas filtro son

ColorFiltering ChannelFiltering HSLFiltering YCbCrFiltering EuclideanColorFiltering mi favorito es EuclideanColorFiltering es fácil y simple. para otros filtros puedes saber más sobre ellos aquí. U tiene que descargar Aforge dll para aplicar estos en nuestro código. Más información sobre los pasos exactos se puede encontrar aquí: Link

Cuestiones relacionadas