6

Utilizando imágenes de prendas de vestir tomadas sobre un fondo coherente, me gustaría que todos los píxeles de la imagen sean transparentes, excepto la ropa. ¿Cuál es la mejor manera de hacerlo? Investigué los algoritmos que son comunes para esto y para la biblioteca de código abierto opencv. ¿Aparte de rodar el mío o usar opencv hay una manera fácil de hacer esto? Estoy abierto a cualquier idioma o plataforma.Detección de bordes y transparencia

Gracias

+0

qué tipo está usando la imagen: de 8 bits, 16 bits, blanco y negro, el color? de qué color es la ropa? ¿Están contrastados con el fondo? usted dice que quiere que el fondo sea transparente: cuéntenos un poco más acerca de su objetivo, ¿va a superponer la ropa sobre otra imagen? (¿tiene una imagen de muestra que podamos ver?) –

+0

¿Cuál es el fondo "coherente"? ¿Es un color? – Jacob

+0

también lo olvidé: parece que tiene muchas imágenes, ¿tiene el fondo del mismo color en todas las imágenes o el color de fondo cambia dependiendo de la imagen? –

Respuesta

6

Si el fondo se consistend en una imagen, pero inconsistentes en las imágenes podría ser complicado, pero aquí es lo que haría:

  1. separar la imagen en alguna forma intensidad/color, como YUV o laboratorio.
  2. Realice un histograma sobre la parte de color. Encuentre el color más visible, este es (más probable) su fondo (actualización), tal vez un truco mejor aquí sea encontrar el color más visible de todos los píxeles dentro de uno o dos píxeles desde el borde de la imagen.
  3. A partir de los bordes de la imagen, configure todos los píxeles que tengan ese color y que estén conectados al borde a través de los píxeles de ese color a transparente.
  4. El borde de la prenda ahora se verá un poco feo porque está formado por píxeles que obtienen su color tanto del fondo como de la prenda. Para combatir esto necesitas hacer un poco más de trabajo:

    1. Encuentra el borde de la prenda a través de algún mecanismo edge detection.
    2. Reemplace el color de los píxeles del borde con una combinación del color justo "dentro" del píxel del borde (es decir, el color de la ropa en esa región) y transparente (si el formato de imagen de salida lo admite).
    3. Si quieres ser realmente elegante, aumentas la transparencia dependiendo de cuánto "me gusta" el color de fondo del color de ese píxel.
+0

algo me dice que, si alguien toma una foto de una prenda de vestir, organizará su foto para que llene la imagen en su mayoría. el color más frecuente, por lo tanto, NO será el fondo. también con este algoritmo, si por casualidad, la ropa toca el borde, quitará toda la pieza de ropa de la imagen ... –

+0

Este es un buen punto. Por lo tanto, probablemente deberías mirar el color que prevalece más cerca del borde de la imagen. –

0

si conoce la intensidad del color exacto del fondo y nunca va a cambiar y las prendas de vestir que nunca coincidirán con este color, entonces esta es una simple aplicación de la sustracción del fondo, es decir todo lo que no es una intensidad de color particular se considera un píxel "encendido", uno de interés. A continuación, puede usar el etiquetado de componentes conectados (http://en.wikipedia.org/wiki/Connected_Component_Labeling) para descubrir grupos separados de objetos.

+0

Gracias por el consejo. Sin embargo, las imágenes serán tomadas por el usuario. Entonces no puedo saber el color exacto. –

0

una imagen en color, con el mismo fondo en cada imágenes:

  • convertir la imagen a VHS o HSL
  • determinar el valor de matiz del fondo (+/- 10): hacer este paso una vez, usando Photoshop por ejemplo, luego use el mismo valor en todas sus imágenes.
  • realiza un umbral de color: en el canal de matiz excluye el matiz del fondo ([0, matiz [+] matiz, 255] típicamente), para todos los demás canales incluye el rango de valores completo (0 a 255 típicamente). esto seleccionará píxeles que NO son el fondo.
  • realice una operación de "agujeros de relleno" (que normalmente se encuentra junto a funciones de análisis de blobs o etiquetado) para completar la parte de la ropa que puede haber sido del mismo color que el fondo.
  • ahora tiene una imagen que es una "máscara" de la ropa: píxeles distintos de cero representa la ropa, 0 píxeles representa el fondo.
  • este paso del proceso depende de cómo desea que los píxeles sean transparentes: normalmente, si guarda su imagen como PNG con un canal alfa (transparencia), utilice una operación lógica Y (también denominada "enmascaramiento") entre el alfa canal de la imagen original y la construcción de la máscara en el paso anterior.
  • voilà, el fondo desapareció, guarde la imagen resultante.
+0

bueno, acabo de leer el comentario sobre el fondo todo blanco o todo oscuro ...este algoritmo no se ajustará, ya que el fondo no será el mismo en todas las imágenes. –

2

Básicamente, busca el color del fondo y reste, pero supongo que ya lo sabías. Es un poco complicado hacer esto automáticamente, pero parece posible.

En primer lugar, eche un vistazo a detección de blobs con OpenCV y vea si esto se hace básicamente para usted.

para hacerlo usted mismo:

encontrar el fondo: Hay varias opciones. Probablemente lo más fácil es hacer un histograma de la imagen, y el gran número de píxeles con valores similares es el fondo, y si hay dos colecciones grandes, el fondo será el que tenga un gran agujero en el medio. Otro enfoque es tomar una banda alrededor del perímetro como el color de fondo, pero esto parece inferior ya que, por ejemplo, la reflexión desde un flash podría alegrar dramáticamente los píxeles de fondo más céntricos.

eliminar el fondo: una primera toma de esto sería el umbral de la imagen en función del color de fondo, y luego ejecutar los algoritmos "abrir" o "cerrar" en esto, y luego usar esto como una máscara para selecciona tu artículo de ropa (El objetivo de abrir/cerrar es no quitar elementos pequeños de color de fondo en la ropa, como botones negros en una blusa blanca o, por ejemplo, reflejos brillantes en la ropa negra.)

OpenCV es una buena herramienta para esto.

La parte más difícil de esto probablemente será en la sombra alrededor del objeto (por ejemplo, una chaqueta negra sobre un fondo blanco tendrá una sombra gris continua en algunos de los bordes y dónde hacer este corte?), Pero si llega hasta aquí, publica otra pregunta.

Cuestiones relacionadas