2011-06-12 20 views
6

Al usar Kinect, puedo obtener una imagen de profundidad en la que cada píxel de la imagen de profundidad almacena la distancia (en milímetros) entre la cámara y el objeto. Ahora quiero guardarlos para poder usarlos más tarde. ¿Cuál es la mejor recomendación?¿Guardar la imagen de profundidad de Kinect en Matlab?

Estoy pensando en guardar la imagen de profundidad como una imagen (jpg/png, etc.). Sin embargo, el valor suele ser de 50 mm a 10000 mm, mientras que el elemento de imagen normal puede almacenar de 0 a 255. Entonces necesitaré escalar los datos al rango 0-255 y eso puede explotar los datos de alguna manera.

Respuesta

8

Puede usar cualquier formato como tiff o png que admita imágenes de escala de grises de 16 bits, ya que sus datos caben en 16 bits (2^16-1 = 65535).

La ventaja de utilizar estos formatos es, por supuesto, que podrá leerlos usando otro programa. Lo más probable es que no quiera usar el formato jpeg debido a artefactos de compresión.

Esto es lo que la documentación de MATLAB dice acerca imwrite para el formato PNG:

Por defecto, imwrite utiliza 8 bits por píxel, si la imagen es doble o uint8; 16 bits por pixel si la imagen es uint16; 1 bit por píxel si la imagen es lógica.

Así que ya estará bien si tiene sus datos almacenados como uint16.

2

Puede almacenar la matriz directamente en el disco usando el comando save() y load(). Pero entonces solo el matlab podrá leerlo. Esta es la mejor opción ya que no pierde precisión en absoluto.

Si debe escalar los valores a 0..255, no lo escale linealmente. Necesitas una mayor precisión para objetos más cercanos. Así que solo aplique la siguiente función a la matriz ln (Imagen Profundidad - 49) * 25 para obtener aproximadamente 0..255 valores. Ahora guarde la imagen y cuando la cargue, aplique la función de inversión. De esta forma (usando la función lan) se dañará su precisión menos

+0

Muchas gracias por su consejo. Es una buena sugerencia usar la función ln para escalar. Sin embargo, considere Depthimage = 100. Then ln (100-49) * 25 = 7.15. Cuando el valor 7.15 7.15 se almacena en una matriz (como una imagen), se convierte en 7.00. Y si aplico la función inversa, obtendré 92.86. Perdí mi precisión. – John

+0

De todos modos, usaré save() y load() – John

Cuestiones relacionadas