Estoy buscando hacer una resta de fondo en una imagen. Soy nuevo en MATLAB y soy nuevo en el procesamiento/análisis de imágenes, así que lo siento si algo de esto suena estúpido. 1) Aparte de imsubtract() ¿hay otras formas de hacer resta de fondo (además de comparar una imagen con otra)? 2) En Math Works explanation para imsubtract() ¿por qué hacen que su elemento de estructuración sea un disco? ¡Esto parece bastante difícil hasta ahora porque cada vez que pruebo algo, termino no solo restando el ruido de fondo sino también perdiendo partes de la imagen que quiero ver!Restando el fondo en MATLAB
Respuesta
¿Con qué tipo de imagen trabajas?
Antecedentes sustracción es fácil. Si desea restar un valor constante, o un fondo con el mismo tamaño que su imagen, simplemente escriba img = img - background
. imsubtract
simplemente se asegura de que la salida sea cero siempre que el fondo sea más grande que la imagen.
Antecedentes estimación es difícil. Allí necesita saber qué tipo de imagen está mirando, de lo contrario, la estimación de fondo fallará.
Si tiene, por ejemplo, características de punto o línea que son oscuras o brillantes sobre fondo oscuro, puede pasar con un filtro local máximo (imdilate
) o un filtro local mínimo (imerode
), respectivamente , que es más grande que sus características, por lo que siempre que coloque la máscara de filtro, hay algunos píxeles que cubren el fondo. Además, desea que el filtro tenga una forma algo similar a las características. En su caso, si pierde parte de su imagen, puede intentar agrandar el filtro (pero no demasiado).
En lugar de restar el máximo o el mínimo, restar la mediana puede funcionar bien, aunque debe elegir el tamaño del filtro de manera que normalmente haya una mayoría de píxeles de fondo dentro de la máscara del filtro. Desafortunadamente, la filtración mediana es bastante lenta.
Para restar la imagen de fondo, necesita un modelo del fondo. El modelo más simple es una imagen capturada como fondo junto con alguna desviación permisible (+/- 0-255). Entonces, la resta de fondo en MATLAB es bastante simple:
imagen (buscar (abs (imagen-fondo) < = umbral)) = 0;
Se vuelve más difícil cuando se usa un modelo estadístico, pero esencialmente restar el fondo es bastante fácil. imsubtract NO es una sustracción de fondo; es un filtro de resta como el que encontrarías en photoshop. No le importa el fondo frente al primer plano, que luego derrota al punto.
Dado que la sustracción de fondo en sí es bastante fácil, la pregunta se vuelve más sobre la estimación de fondo. Esto es un poco más complicado, y generalmente requiere más cuadros y entrenamiento para construir modelos estadísticos del fondo (por ejemplo, mirando los píxeles como distribuciones gaussianas o mezclas de gaussianos, o buscando flujo óptico para determinar lo que no se mueve).
Si tiene acceso a artículos técnicos (a través del trabajo o la escuela), "Pfinder: seguimiento en tiempo real del cuerpo humano" por Wren y otros ofrece un enfoque bastante simple. O simplemente puede buscar en Google una única sustracción de fondo gaussiana. Hay una serie de métodos implementados con OpenCV aquí ->http://dparks.wikidot.com/source-code < - que pueden serle útiles.
El Computer Vision System Toolbox tiene el objeto vision.ForegroundDetector, que implementa una variante de la resta de fondo GMM de Stauffer y Grimson. La implementación es muy rápida, aprovechando múltiples núcleos. Consulte esto example de cómo usar la sustracción de fondo como un bloque de construcción de un sistema para rastrear objetos múltiples.
- 1. Ejecutando matlab en el fondo
- 2. Restando de un 'DateTime'
- 3. XSLT - restando días
- 4. Restando dos números sin usar el operador '-'
- 5. Restando de una fecha en VBA?
- 6. Restando el elemento actual y anterior en una lista
- 7. Restando un arrayList de otro arrayList
- 8. Javascript restando días de la fecha
- 9. resultado extraño cuando se duplica restando
- 10. Guardar la figura de MATLAB con diferente color de fondo
- 11. Cómo reemplazar el texto predeterminado en MATLAB
- 12. En MATLAB, ¿cómo cambio el color de fondo de una subtrama?
- 13. ¿Establecer el color de fondo de un diagrama en MATLAB usando la línea de comando?
- 14. Restando una fila de datos de otra en SQL
- 15. restando un DateTime de un DateTime en scala
- 16. Continuar descarga en el fondo
- 17. Iniciando AVAssetExportSession en el Fondo
- 18. Fondo en el icono WP7
- 19. UIWebView stringByEvaluatingJavaScriptFromString en el fondo
- 20. iphone - NSTimers en el fondo
- 21. Obtener un DateTime restando segundos desde la fecha actual
- 22. SQL - Restando un valor de agotamiento de las filas
- 23. Hacer un píxel transparente en Matlab
- 24. Bash: restando 10 minutos de un tiempo dado
- 25. características de extracto de matlab en matfile
- 26. Motor MATLAB versus librerías creadas por el compilador MATLAB?
- 27. obtener el código de funciones en Matlab?
- 28. ¿Implementar el código de matlab en C++?
- 29. ¿Cómo emulo el comportamiento 'incluir' en MATLAB?
- 30. MATLAB - variable en el título parcela
+1 ¡La estimación de fondo es difícil! – Geoff
La sustracción de fondo es un poco diferente de lo que sugirió. El imsubtract no es una resta de fondo, ni es lo que sugirió. La resta de fondo solo debería afectar a los píxeles de fondo, no a la imagen completa. Considera un fondo blanco. Ahora, una bola negra se mueve a través de la imagen. La sustracción de la imagen siempre ocluiría el objeto o distorsionaría el color (dependiendo de la implementación), mientras que la sustracción de fondo no debería afectar los píxeles lo suficientemente diferentes del modelo de fondo (primer plano). – Anthony
@Anthony: esto depende en gran medida del tipo de imagen con la que trabaje. Si las intensidades del primer plano y el fondo son aditivas (que es con lo que generalmente trabajo), el fondo se resta de toda la imagen. En su caso, la sustracción de fondo solo debería afectar a los píxeles que no son señal. – Jonas