2010-10-07 22 views
5

Digamos que está tomando un video (con la cámara en una posición estable) y un pájaro vuela a través de la vista de la cámara. Debería ser posible hacer una segmentación de imágenes y eliminar automáticamente este pájaro del video.¿Cuáles son las técnicas estándar para eliminar una segmentación (como un ser humano o un pájaro) de un video?

¿Cómo se llaman estos estilos de algoritmos y cómo se logran normalmente?

+0

¿Está tratando de eliminar una instancia específica (por ejemplo, un pájaro en particular que pueda marcar para eliminar) o todos los objetos no estáticos (por ejemplo, todas las personas en movimiento) de la escena? – Doug

+0

Me gustaría eliminar instancias específicas. Entonces, supongo que uno a la vez es suficiente. – amssage

Respuesta

3

Hay una técnica llamada Simple Image Object Extraction (SIOX) - utiliza una técnica para identificar objetos de primer plano y de fondo en imágenes fijas y de video. El editor de código abierto GIMP tiene una implementación de él, y está more information about it here.

Desde el resumen:

SIOX es sinónimo de extracción de objetos de un conjunto simple y es una solución para la extracción de primer plano de imágenes fijas con muy poca interacción con el usuario. SIOX es rápido, resistente al ruido y, por lo tanto, también se puede usar para la segmentación de videos. Evita muchos de los inconvenientes de los métodos de segmentación basados ​​en gráficos, pero funciona igual de bien en diferentes puntos de referencia. SIOX es abierto y gratuito (Licencia de Apache) y los autores intencionalmente no han patentado ninguna parte de la tecnología. Como resultado, se ha integrado en varios programas de manipulación de imágenes de código abierto en los últimos años. SIOX es el algoritmo subyacente de la herramienta de extracción de primer plano en el Programa de manipulación de imágenes de GNU (GIMP) y es parte de la herramienta trazadora en Inkscape. SIOX se origina en E-Chalk donde se segmenta a un instructor parado frente a una pizarra electrónica. Las variantes de SIOX se utilizan para la visión robótica y para mejorar la segmentación 3D de la cámara de tiempo de vuelo.

Aquí hay un enlace al Java Reference Implementation of SIOX.

Aquí hay un enlace al PDF with details sobre cómo funciona una variación del algoritmo.

Debe poder adaptarlo para utilizar la interpolación entre cuadros para eliminar un objeto de primer plano específico de cada cuadro de un video utilizando datos temporales de los marcos circundantes.

2

Si la cámara está fija y no hay demasiado movimiento en la escena, sugiero un método basado en la sustracción de fondo.

Paso 1: calcule el fondo de cada fotograma del video. Existen algoritmos complicados para hacer esto, pero uno muy simple y efectivo sería calcular el valor mediano de cada píxel en la imagen en una ventana de tiempo de 3 segundos. Más tiempo si el objeto en cuestión se mueve lentamente. Por cierto, si solo realizas este tipo de filtrado, eliminará la mayoría de los objetos en movimiento del video si la cámara está fija, por lo tanto, mi pregunta anterior sobre todos los objetos frente a un objeto.

Paso 2: Marque las regiones que desea eliminar en cada cuadro con una herramienta de pincel, y reemplácelas con los píxeles de fondo. No se moleste con un pincel fino o una herramienta de lazo, ya que los píxeles que no sean objetos que marca serán reemplazados con su versión filtrada. Probablemente pueda usar las mismas marcas de pincel para varios fotogramas ya que el límite no es tan importante. Si el objeto es lo único que se mueve en la escena, puede marcar todo el marco y reemplazarlo con el fondo.

De todos modos, para responder a su pregunta más general, el tema que desea investigar se llama inpainting para imágenes y video.Hay bastante literatura sobre el tema, lo que describí fue simplemente un método súper simple que podrías implementar en una hora más o menos con opencv.

Cuestiones relacionadas