2011-01-31 17 views
27

Recientemente he comenzado a piratear mi Kinect y quiero eliminar la sombra de profundidad. La sombra es causada por el emisor IR que se coloca ligeramente al costado de la cámara, por lo que cualquier objeto cercano obtendrá una gran sombra y el objeto distante menos o ninguna sombra.Eliminar la sombra de profundidad de Kinect

La longitud de la sombra se relaciona con la distancia entre el punto más cercano y el más lejano en cada lado de la sombra.

Mi objetivo es poder asignar correctamente la imagen de color a la profundidad. Esto no funciona sin procesar la sombra como muestra esta imagen:
enter image description here

+0

¿Tal vez algún tipo de cambio de tamaño trapezoidal funcionará? – chriszero

+2

Ayudaría a ser más explícito sobre los datos con los que debe trabajar, para Kinectless como yo. Parece que tiene una cuadrícula de píxeles de la cámara y una cuadrícula de distancias correspondiente del emisor IR. ¿Derecha? –

+0

Tengo la información que ve en las dos imágenes. El área negra es la sombra con el color 0. El resto tiene un valor de color que depende de la distancia. –

Respuesta

0

Método Kinect - MapDepthFrametoColorFrame

Obtener el [x,y] posiciones en el marco de profundidad, y use ese método para completar

3

¿La sombra de profundidad siempre sale en negro?

Si es así, puede usar un método simple como una mediana temporal para calcular el fondo de la imagen (más información aquí: http://www.roborealm.com/help/Temporal_Median.php) y cada vez que un píxel sea negro, configúrelo en el valor de fondo en esa ubicación de píxel.

2

No sé cómo es con C# pero openni C++ tiene una función llamada xnSetViewPoint() El único problema es que se pierden las 20 primeras filas de datos de imagen debido a la transformación.

la razón se debe al uso de dos sensores diferentes, que se colocan uno cerca del otro pero no exactamente en la misma posición.

3

Hice algunos trabajos preliminares sobre este problema hace algunas semanas. Mi código funciona directamente en un WriteableBitmap en lugar de los datos de profundidad, pero si solo está procesando la imagen, debería funcionar. El algoritmo no es perfecto y se beneficiaría con algunos ajustes adicionales. Si actualizas el código, avísame; ¡Estaría muy interesado en ver lo que estás haciendo!

El código fuente está publicado en mi blog:

http://richardpianka.com/2011/02/trackingni-depth-correction/

0

Siento decirlo, pero esa sombra es causada por el bloqueo de los puntos inferidos de golpear a ese punto de la habitación por lo que crea su cuerpo un punto negro ... Nada de lo que puede hacer, pero cambiar el fondo de base a un color diferente al negro por lo que no será una sombra perceptible

+0

Eso lo entiendo, pero si miras mi imagen, entonces ves que la sombra es una combinación perfecta, pero está mal alineada y dimensionada. El tamaño y la alineación dependen de la proximidad. si estuviera calibrado, podría volver a pintar a la perfección en primer plano mientras elimino el fondo. (Es fácil ver que todos los datos requeridos están allí.) –

+0

oh, veo lo que mencionas ... no puedo ayudar –

0

La cámara a color y la cámara de profundidad kinect no tienen las mismas dimensiones, y el origen de los puntos infrarrojos no es de la misma cámara, es un proyector IR a pocos cm aparte de eso (ya que ese desplazamiento se usa para calcular la profundidad).

Sin embargo, la solución es fácil aquí, sus datos de sombra están en el lado izquierdo. , por lo que debe extender los últimos datos de color conocidos antes de que se vuelva negro.

Y para que se adapte mejor, traslade los datos de la cámara de color a la derecha.

+0

Gracias. Este problema se resolvió con Kinect SDK. Marcado MapDepthFrametoColorFrame como respuesta correcta. :) –

Cuestiones relacionadas