Fingiendo cámara de imagen térmica con aforge o cualquier otra solución de .NET, emgucv, tbeta

StackOverflow https://stackoverflow.com/questions/3541809

Pregunta

Estoy simulando un efecto de cámara térmica. Tengo una cámara web en una fiesta apuntó a las personas frente a una pared. Fui con fondo técnica de sustracción y el uso de Aforge blobcounter I Get manchas que quiero llenar de color degradado. Mi problema = GetBlobsEdgePoints no vuelve nube de puntos ordenados así que no puedo usarlo con, por ejemplo, PathGradientBrush de GDI + para dibujar simplemente gradientes.

  1. Busco sencillo, rápido algoritmo para manchas de seguimiento en ruta (puede cometer errores).
  2. Una manera de realizar un seguimiento de manchas recibidos por blobcounter.
  3. Una sugerencia para alguna otra forma de simular el efecto.

Me echó un vistazo rápido a Emgu.CV.VideoSurveillance pero no hacerlo funcionar (los ejemplos son para v1.5 y yo fuimos con v2 +) pero me dieron por vencidos porque la gente dice que es lento en los foros.

gracias por leer.

código de ejemplo de la eliminación del fondo aforge

            Bitmap bmp =(Bitmap)e.VideoFrame.Clone();
        if (backGroundFrame == null)
        {
            backGroundFrame = (Bitmap)e.VideoFrame.Clone();
            difference.OverlayImage = backGroundFrame;
        }

        difference.ApplyInPlace(bmp);
        bmp = grayscale.Apply(bmp);
        threshold.ApplyInPlace(bmp);
¿Fue útil?

Solución 2

Esta es la dirección que yo voy a tomar (se ve mejor por ahora):

  1. Definir un conjunto de puntos de la burbuja por mi propia lógica (color de manchas de la piel debe ser más caliente, etc ..)
  2. dibujar gradientes en torno a esos puntos

                GraphicsPath gp=new GraphicsPath();
                var rect = new Rectangle(CircumferencePoint.X - radius, CircumferencePoint.Y - radius, radius*2, radius*2);
                gp.AddEllipse(rect);
                GradientShaper = new PathGradientBrush(gp);
                GradientShaper.CenterColor = Color.White;
                GradientShaper.SurroundColors = surroundingColors;
                drawBmp.FillPath(GradientShaper,gp);
    
  3. enmascarar los gradientes con forma blob

                blobCounter.ExtractBlobsImage(bmp,blob,true);
                mask.OverlayImage = blob.Image;
                mask.ApplyInPlace(rslt);
    
  4. colorear con el color de reasignación

TNX por la ayuda @Albin

Otros consejos

Bueno, ¿podría enviar alguna imagen muestra del resultado de GetBlobsEdgePoints, entonces podría ser más fácil de entender qué tipos si se necesitan algoritmos de procesamiento de imágenes.

1) Usted puede tratar de un algoritmo voraz, primero seleccione un punto al azar, marca ese punto como "tomada", elegir el punto más cercano no marcado como "tomado" y así sucesivamente.
Es necesario encontrar las condiciones adecuadas de terminación. Si puede haber varios caminos disjuntos es necesario encontrar una definición de lo lejos que los puntos tienen que ser para ser parte de caminos disjuntos.

3) Si usted tiene un fondo estático se puede tratar de crear una diferencia entre dos imágenes desplazadas en el tiempo, al igual que 200 ms de diferencia. Solo hacer un pixel por pixel y utilización diferencia abs (dif) como índice en el mapa de color de calor. Eso le dará más como un efecto de borde brillo de los objetos en movimiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top