Hola!
ha sido buscar en google / bing “Kinect Fusion” y después de 10 minutos, pensar que mejor lo intento explicar yo. Asi vamos por el principio, QUE NO ES KINECT FUSION.
- Kinect Fusion NO es una aplicación para Kinect
- Kinect fusion NO es un software para modelado en 3D
Y ahora MI DEFINICION DE KINECT FUSION
Kinect Fusion es una sería de libraries incluidas en el SDK de Kinect que nos permiten utilizar los sensores de Kinect para obtener información de la cámara y del sensor de profundidad con el que podemos crear modelos 3D. El procesamiento de estos sensores desde diferentes puntos de vista, permite crear los modelos 3D.
Listo! es tan simple como eso, En la página oficial de Kinect Fusion es posible encontrar más información o viendo el siguiente esquema seguro que a más de uno le aclara las ideas:
Ahora bien, lo interesante es que esto es parte del SDK y en el mismo tenemos bastante código para agregar esta funcionalidad en nuestras aplicaciones. Más adelante si tengo tiempo haré un Step by Step para explicar como crear una app desde cero, por ahora lo imporante es conocer el funcionamiento básico.
Una vez que agregas a tu solución “Microsoft.Kinect.Toolkit.Fusion”, la primera clase con la que debes familiarizarte es “Reconstruction.cs”.
La misma es la encargada de crear los modelos 3D con la información que recibe del sensor Kinect. Esto lo hace con la función FusionCreateReconstruction, que por suerte viene bastante bien documentada.
Nota: Zas en toda la cara para los no amigos de la documentación, por ahi un poco te ahorra un buen viaje entre el código.
1: /// <summary>
2: /// Initialize a Kinect Fusion 3D Reconstruction Volume.
3: /// Voxel volume axis sizes must be greater than 0 and a multiple of 32.
4: /// Users can select which device the processing is performed on with
5: /// the <paramref name="reconstructionProcessorType"/> parameter. For those with multiple GPUs
6: /// the <paramref name="deviceIndex"/> parameter also enables users to explicitly configure
7: /// on which device the reconstruction volume is created.
8: /// </summary>
9: /// <param name="reconstructionParameters">
10: /// The Reconstruction parameters to define the size and shape of the reconstruction volume.
11: /// </param>
12: /// <param name="reconstructionProcessorType">
13: /// the processor type to be used for all calls to the reconstruction volume object returned
14: /// from this function.
15: /// </param>
16: /// <param name="deviceIndex">Set this variable to an explicit zero-based device index to use
17: /// a specific GPU as enumerated by NuiFusionGetDeviceInfo, or set to -1 to automatically
18: /// select the default device for a given processor type.
19: /// </param>
20: /// <param name="initialWorldToCameraTransform">
21: /// The initial camera pose of the reconstruction volume with respect to the world origin.
22: /// Pass identity as the default camera pose.
23: /// </param>
24: /// <returns>The Reconstruction instance.</returns>
25: /// <exception cref="ArgumentNullException">
26: /// Thrown when the <paramref name="reconstructionParameters"/> parameter is null.
27: /// </exception>
28: /// <exception cref="ArgumentException">
29: /// Thrown when the <paramref name="reconstructionParameters"/> parameter's <c>VoxelX</c>,
30: /// <c>VoxelY</c>, or <c>VoxelZ</c> member is not a greater than 0 and multiple of 32 or the
31: /// <paramref name="deviceIndex"/> parameter is less than -1 or greater than the number of
32: /// available devices for the respective processor type.
33: /// </exception>
34: /// <exception cref="OutOfMemoryException">
35: /// Thrown when the memory required for the Reconstruction volume processing could not be
36: /// allocated.
37: /// </exception>
38: /// <exception cref="InvalidOperationException">
39: /// Thrown when the Kinect Runtime could not be accessed, the Kinect device is not
40: /// connected or the Reconstruction volume is too big so a GPU memory
41: /// allocation failed, or the call failed for an unknown reason.
42: /// </exception>
43: public static Reconstruction FusionCreateReconstruction(
44: ReconstructionParameters reconstructionParameters,
45: ReconstructionProcessor reconstructionProcessorType,
46: int deviceIndex,
47: Matrix4 initialWorldToCameraTransform)
Una vez le has pasado la información del sensor a Reconstruction, el siguiente paso es crear el mundo virtual, aquí tenemos la función GetCurrentWorldToVolumeTransform, también dentro de Reconstruction.
1: /// <summary>
2: /// Get current internal world to volume transform.
3: /// Note: A right handed coordinate system is used, with the origin of the volume (i.e. voxel 0,0,0)
4: /// at the top left of the front plane of the cube. Similar to bitmap images with top left origin,
5: /// +X is to the right, +Y down, and +Z is forward from origin into the reconstruction volume.
6: /// The default transform is a combination of translation in X,Y to locate the world origin at the
7: /// center of the front face of the reconstruction volume cube, and scaling by the voxelsPerMeter
8: /// reconstruction parameter to convert from world coordinate system to volume voxel indices.
9: /// </summary>
10: /// <returns>The current world to volume transform. This is a similarity transformation
11: /// that converts world coordinates to volume coordinates.</returns>
12: /// <exception cref="InvalidOperationException">
13: /// Thrown when the call failed for an unknown reason.
14: /// </exception>
15: public Matrix4 GetCurrentWorldToVolumeTransform()
Una vez que tenemos esta “vista” (podríamos pensarlo como si fuese un “frame”), ya podemos continuar girando el sensor Kinect para buscar la siguiente y finalmente armar un modelo 3D.
Nota: Aquí entra en juego otra clase importante que es FusionPointCloudImageFrame, aunque no me animo a explicar la misma si no tengo un contexto claro de uso.
Y creo que por ahora con eso ya tengo bastante para explicar las 3 cosas básicas que tienes que mirar para crear apps que usen Kinect Fusion!
Recursos
- Kinect Fusion
http://msdn.microsoft.com/en-us/library/dn188670.aspx - Kinect Dev Center
http://www.microsoft.com/en-us/kinectforwindowsdev/default.aspx
Saludos @ Home
El Bruno
Leave a reply to jesus Cancel reply