Condividi tramite


Usare le trasformazioni delle immagini di Azure Kinect Sensor SDK

Seguire le funzioni specifiche per usare e trasformare le immagini tra sistemi di fotocamera coordinati in Azure Kinect DK.

funzioni k4a_transformation

Tutte le funzioni precedute da k4a_transformation operano su immagini intere. Richiedono che l'handle di trasformazione k4a_transformation_t ottenuto tramite k4a_transformation_create() e non vengono allocate tramite k4a_transformation_destroy(). È anche possibile fare riferimento all'esempio diTrasformazione SDK che illustra come usare le tre funzioni relative a questo argomento.

Vengono illustrate le funzioni seguenti:

k4a_transformation_depth_image_to_color_camera

Panoramica

La funzione k4a_transformation_depth_image_to_color_camera() trasforma la mappa di profondità dal punto di vista della fotocamera di profondità al punto di vista della fotocamera a colori. Questa funzione è progettata per produrre le cosiddette immagini RGB-D, dove D rappresenta un canale di immagine aggiuntivo che registra il valore di profondità. Come illustrato nella figura seguente, l'immagine a colori e l'output di k4a_transformation_depth_image_to_color_camera() sembrano essere stati acquisiti dallo stesso punto di vista, ovvero il punto di vista della fotocamera a colori.

Image transformation

Implementazione

Questa funzione di trasformazione è più complessa che eseguire semplicemente la chiamata k4a_calibration_2d_to_2d() per ogni pixel. Distorce la mesh triangolare passando dalla geometria della fotocamera di profondità alla geometria della fotocamera a colori. La mesh triangolare viene usata per evitare di generare difetti nell'immagine di profondità trasformata. Un z-buffer garantisce che le occlusioni vengano gestite correttamente. Per questa funzione l'accelerazione GPU è abilitata per impostazione predefinita.

Parametri

I parametri di input sono l'handle di trasformazione e un'immagine di profondità. La risoluzione dell'immagine di profondità deve corrispondere a quella depth_mode specificata al momento della creazione dell'handle di trasformazione. Ad esempio, se l'handle di trasformazione è stato creato usando la modalità 1024x1024, K4A_DEPTH_MODE_WFOV_UNBINNED la risoluzione dell'immagine di profondità deve essere 1024x1024 pixel. L'output è un'immagine di profondità trasformata che deve essere allocata dall'utente eseguendo la chiamata k4a_image_create(). La risoluzione dell'immagine di profondità trasformata deve corrispondere a quella color_resolution specificata al momento della creazione dell'handle di trasformazione. Ad esempio, se la risoluzione del colore è stata impostata su K4A_COLOR_RESOLUTION_1080P, la risoluzione dell'immagine di output deve essere 1920x1080 pixel. Lo stride dell'immagine di output è impostato su width * sizeof(uint16_t), perché l'immagine archivia i valori di profondità a 16 bit.

k4a_transformation_depth_image_to_color_camera_custom

Panoramica

La funzione k4a_transformation_depth_image_to_color_camera_custom() trasforma la mappa di profondità e un'immagine personalizzata dal punto di vista della fotocamera di profondità al punto di vista della fotocamera a colori. Come estensione di k4a_transformation_depth_image_to_color_camera(), questa funzione è progettata per produrre un'immagine personalizzata corrispondente per cui ogni pixel corrisponde alle coordinate pixel corrispondenti della fotocamera a colori in aggiunta all'immagine di profondità trasformata.

Implementazione

Questa funzione di trasformazione produce l'immagine di profondità trasformata allo stesso modo di k4a_transformation_depth_image_to_color_camera(). Per trasformare l'immagine personalizzata, questa funzione offre opzioni per usare l'interpolazione lineare o l'interpolazione del vicino più prossimo. L'uso dell'interpolazione lineare potrebbe creare nuovi valori nell'immagine personalizzata trasformata. L'uso dell'interpolazione del vicino più prossimo impedirà che i valori non presenti nell'immagine originale vengano visualizzati nell'immagine di output, ma si otterrà un'immagine meno uniforme. L'immagine personalizzata deve essere a canale singolo a 8 bit o a 16 bit. Per questa funzione l'accelerazione GPU è abilitata per impostazione predefinita.

Parametri

I parametri di input sono l'handle di trasformazione, un'immagine di profondità, un'immagine personalizzata e il tipo di interpolazione. L'immagine di profondità e la risoluzione dell'immagine personalizzata devono corrispondere a quelle depth_mode specificate al momento della creazione dell'handle di trasformazione. Ad esempio, se l'handle di trasformazione è stato creato usando la modalità 1024x1024 K4A_DEPTH_MODE_WFOV_UNBINNED, la risoluzione dell'immagine di profondità e dell'immagine personalizzata deve essere 1024x1024 pixel. interpolation_type deve essere K4A_TRANSFORMATION_INTERPOLATION_TYPE_LINEAR o K4A_TRANSFORMATION_INTERPOLATION_TYPE_NEAREST. L'output è un'immagine di profondità trasformata e un'immagine personalizzata trasformata che devono essere allocate dall'utente eseguendo la chiamata k4a_image_create(). La risoluzione dell'immagine di profondità trasformata e dell'immagine personalizzata trasformata devono corrispondere a quelle color_resolution specificate al momento della creazione dell'handle di trasformazione. Ad esempio, se la risoluzione del colore è stata impostata su K4A_COLOR_RESOLUTION_1080P, la risoluzione dell'immagine di output deve essere 1920x1080 pixel. Lo stride dell'immagine di profondità di output è impostato su width * sizeof(uint16_t), perché l'immagine archivia i valori di profondità a 16 bit. L'immagine personalizzata di input e l'immagine personalizzata trasformata devono avere il formato K4A_IMAGE_FORMAT_CUSTOM8 o K4A_IMAGE_FORMAT_CUSTOM16; si deve impostare uno stride dell'immagine corrispondente.

k4a_transformation_color_image_to_depth_camera

Panoramica

La funzione k4a_transformation_color_image_to_depth_camera() trasforma l'immagine a colori dal punto di vista della fotocamera a colori al punto di vista della fotocamera di profondità (vedere figura precedente). Può essere usato per generare immagini RGB-D.

Implementazione

Per ogni pixel della mappa di profondità, la funzione usa il valore di profondità del pixel per calcolare la coordinata sub-pixel corrispondente all'immagine a colori. Poi si ricerca il valore di colore in corrispondenza di questa coordinata nell'immagine a colori. L'interpolazione bilineare viene eseguita nell'immagine a colori per ottenere il valore di colore alla precisione del sub-pixel. Un pixel che non ha la lettura di profondità associata viene assegnato a un valore BGRA di [0,0,0,0] nell'immagine di output. Per questa funzione l'accelerazione GPU è abilitata per impostazione predefinita. Poiché questo metodo produce difetti nell'immagine a colori trasformata e non gestisce le occlusioni, si consiglia, invece, di usare la funzione k4a_transformation_depth_image_to_color_camera()..

Parametri

I parametri di input sono l'handle di trasformazione, un'immagine di profondità e un'immagine a colori. Le risoluzioni delle immagini di profondità e a colori devono corrispondere alla depth_mode e alla color_resolution specificate al momento della creazione dell'handle di trasformazione. L'output è un'immagine a colori trasformata che deve essere allocata dall'utente eseguendo la chiamata k4a_image_create(). La risoluzione dell'immagine a colori trasformata deve corrispondere alla risoluzione della profondità specificata al momento della creazione dell'handle di trasformazione. L'immagine di output archivia quattro valori a 8 bit che rappresentano il BGRA per ogni pixel. Pertanto, lo stride dell'immagine è width * 4 * sizeof(uint8_t). L'ordine dei dati è in pixel interlacciato, ovvero valore blu - pixel 0, valore verde - pixel 0, valore rosso - pixel 0, valore alfa - pixel 0, valore blu - pixel 1 e così via.

k4a_transformation_depth_image_to_point_cloud

Panoramica

La funzione k4a_transformation_depth_image_to_point_cloud() converte una mappa di profondità 2D acquisita da una fotocamera in una nuvola di punti 3D nel sistema di coordinate della stessa fotocamera. La fotocamera quindi può essere la fotocamera di profondità o quella a colori.

Implementazione

La funzione fornisce risultati equivalenti all'esecuzione di k4a_calibration_2d_to_2d() per ogni pixel, ma è più efficiente a livello di calcolo. Eseguendo la chiamata k4a_transformation_create(), viene pre-calcolata una cosiddetta tabella XY che ricerca e archivia i fattori di scala x e y per ogni pixel di immagine. Eseguendo la chiamata k4a_transformation_depth_image_to_point_cloud(), si ottiene la coordinata x 3D di un pixel moltiplicando il fattore di scala x del pixel con la coordinata z del pixel. Analogamente, la coordinata y 3D si ottiene attraverso la moltiplicazione con il fattore di scala y. L'esempio pratico di nuvola di punti dell'SDK illustra come viene calcolata la tabella XY. Gli utenti possono seguire il codice di esempio per implementare la propria versione di questa funzione, ad esempio per velocizzare la pipeline della GPU.

Parametri

I parametri di input sono l'handle di trasformazione, un identificatore di fotocamera e un'immagine di profondità. Se l'identificatore della fotocamera è impostato sulla profondità, la risoluzione dell'immagine di profondità deve corrispondere alla depth_mode specificata al momento della creazione dell'handle di trasformazione. In caso contrario, se l'identificatore è impostato sulla fotocamera a colori, la risoluzione deve corrispondere alla risoluzione del colore scelta. Il parametro di output è un'immagine XYZ che deve essere allocata dall'utente eseguendo la chiamata k4a_image_create(). La risoluzione dell'immagine XYZ deve corrispondere alla risoluzione della mappa di profondità di input. Per ogni pixel vengono archiviati tre valori di coordinate firmati a 16 bit in millimetri. Lo stride dell'immagine XYZ è quindi impostato su width * 3 * sizeof(int16_t). L'ordine dei dati è in pixel interlacciato, ovvero coordinata x - pixel 0, coordinata y - pixel 0, coordinata z - pixel 0, coordinata x - pixel 1 e così via. Se un pixel non può essere convertito in 3D, la funzione assegna i valori [0,0,0] al pixel.

Esempi

Esempio di trasformazione

Passaggi successivi

Una volta appreso come usare le funzioni di trasformazione delle immagini di Azure Kinect Sensor SDK, è anche possibile acquisire informazioni su

È anche possibile esaminare

Sistemi di coordinate