Udostępnij za pośrednictwem


Korzystanie z przekształceń obrazów zestawu Azure Kinect Sensor SDK

Postępuj zgodnie z określonymi funkcjami, aby używać i przekształcać obrazy między skoordynowanymi systemami kamer w zestawie Azure Kinect DK.

funkcje k4a_transformation

Wszystkie funkcje poprzedzone k4a_transformation działają na całych obrazach. Wymagają one dojścia przekształcenia k4a_transformation_t uzyskanego za pośrednictwem k4a_transformation_create() i są nieprzydzielone za pośrednictwem k4a_transformation_destroy(). Możesz również zapoznać się z przykładem przekształcenia zestawu SDK, który pokazuje, jak używać trzech funkcji w tym temacie.

Omówiono następujące funkcje:

k4a_transformation_depth_image_to_color_camera

Omówienie

Funkcja k4a_transformation_depth_image_to_color_camera() przekształca mapę głębokości z punktu widzenia kamery głębokości w punkt widzenia kamery kolorów. Ta funkcja jest przeznaczona do tworzenia tak zwanych obrazów RGB-D, gdzie D reprezentuje dodatkowy kanał obrazu rejestrujący wartość głębokości. Jak pokazano na poniższej ilustracji, obraz koloru i dane wyjściowe k4a_transformation_depth_image_to_color_camera() wyglądają tak, jakby zostały pobrane z tego samego punktu widzenia, czyli punktu widzenia kamery kolorów.

Przekształcanie obrazu

Implementacja

Ta funkcja przekształcania jest bardziej złożona niż po prostu wywoływanie k4a_calibration_2d_to_2d() dla każdego piksela. Warps trójkąta siatki z geometrii aparatu głębokości do geometrii kamery kolorów. Siatka trójkąta służy do unikania generowania otworów na przekształconym obrazie głębokości. Bufor Z zapewnia prawidłowe obsługę okluzji. Przyspieszanie procesora GPU jest domyślnie włączone dla tej funkcji.

Parametry

Parametry wejściowe to uchwyt przekształcania i obraz głębokości. Rozdzielczość obrazu głębokości musi być zgodna z depth_mode określoną wartością podczas tworzenia uchwytu przekształcania. Jeśli na przykład uchwyt przekształcenia został utworzony przy użyciu trybu 1024x1024 K4A_DEPTH_MODE_WFOV_UNBINNED , rozdzielczość obrazu głębokości musi być 1024 x 1024 pikseli. Dane wyjściowe to przekształcony obraz głębokości, który musi zostać przydzielony przez użytkownika za pośrednictwem wywołania k4a_image_create(). Rozdzielczość przekształconego obrazu głębokości musi być zgodna z color_resolution określoną wartością podczas tworzenia uchwytu przekształcania. Jeśli na przykład rozdzielczość kolorów została ustawiona na , rozdzielczość K4A_COLOR_RESOLUTION_1080Pobrazu wyjściowego musi mieć rozdzielczość 1920x1080 pikseli. Krok obrazu wyjściowego jest ustawiony na width * sizeof(uint16_t)wartość , ponieważ obraz przechowuje 16-bitowe wartości głębokości.

k4a_transformation_depth_image_to_color_camera_custom

Omówienie

Funkcja k4a_transformation_depth_image_to_color_camera_custom() przekształca mapę głębokości i obraz niestandardowy z punktu widzenia aparatu głębokości w punkt widzenia kamery kolorów. Jako rozszerzenie k4a_transformation_depth_image_to_color_camera(), ta funkcja została zaprojektowana w celu utworzenia odpowiedniego obrazu niestandardowego, dla którego każdy piksel pasuje do odpowiednich współrzędnych pikseli aparatu kolorów dodatkowego do przekształconego obrazu głębokości.

Implementacja

Ta funkcja przekształcania tworzy przekształcony obraz głębokości w taki sam sposób jak k4a_transformation_depth_image_to_color_camera(). Aby przekształcić obraz niestandardowy, ta funkcja udostępnia opcje korzystania z interpolacji liniowej lub interpolacji najbliższego sąsiada. Użycie interpolacji liniowej może spowodować utworzenie nowych wartości w przekształconym obrazie niestandardowym. Użycie interpolacji najbliższego sąsiada uniemożliwi występowanie wartości na oryginalnym obrazie na obrazie wyjściowym, ale spowoduje to mniej gładki obraz. Obraz niestandardowy powinien mieć jeden kanał 8-bitowy lub 16-bitowy. Przyspieszanie procesora GPU jest domyślnie włączone dla tej funkcji.

Parametry

Parametry wejściowe to uchwyt przekształcania, obraz głębokości, obraz niestandardowy i typ interpolacji. Obraz głębokości i niestandardowa rozdzielczość obrazu muszą być zgodne z depth_mode określonym podczas tworzenia uchwytu przekształcania. Jeśli na przykład uchwyt przekształcenia został utworzony przy użyciu trybu 1024x1024 K4A_DEPTH_MODE_WFOV_UNBINNED , rozdzielczość obrazu głębokości i obrazu niestandardowego musi mieć rozmiar 1024 x 1024 pikseli. Element interpolation_type powinien mieć wartość K4A_TRANSFORMATION_INTERPOLATION_TYPE_LINEAR lub K4A_TRANSFORMATION_INTERPOLATION_TYPE_NEAREST. Dane wyjściowe to przekształcony obraz głębokości i przekształcony obraz niestandardowy, który musi zostać przydzielony przez użytkownika za pośrednictwem wywołania k4a_image_create(). Rozdzielczość przekształconego obrazu głębokości i przekształconego obrazu niestandardowego musi być zgodna z wartością color_resolution określoną podczas tworzenia uchwytu przekształcania. Jeśli na przykład rozdzielczość kolorów została ustawiona na , rozdzielczość K4A_COLOR_RESOLUTION_1080Pobrazu wyjściowego musi mieć rozdzielczość 1920x1080 pikseli. Krok obrazu głębokości wyjściowej jest ustawiony na width * sizeof(uint16_t)wartość , ponieważ obraz przechowuje 16-bitowe wartości głębokości. Wejściowy obraz niestandardowy i przekształcony obraz niestandardowy muszą mieć format K4A_IMAGE_FORMAT_CUSTOM8 lub K4A_IMAGE_FORMAT_CUSTOM16, należy odpowiednio ustawić odpowiedni krok obrazu.

k4a_transformation_color_image_to_depth_camera

Omówienie

Funkcja k4a_transformation_color_image_to_depth_camera() przekształca obraz koloru z punktu widzenia aparatu kolorów w punkt widzenia kamery głębi (patrz rysunek powyżej). Może służyć do generowania obrazów RGB-D.

Implementacja

Dla każdego piksela mapy głębokości funkcja używa wartości głębokości piksela do obliczenia odpowiedniej współrzędnej subpixel na obrazie kolorów. Następnie wyszukujemy wartość koloru na tej współrzędnych na obrazie kolorów. Interpolacja dwuliniowa jest wykonywana na obrazie kolorów w celu uzyskania wartości koloru w precyzji subpixel. Piksel, który nie ma skojarzonego odczytu głębokości, jest przypisany do wartości [0,0,0,0] BGRA w obrazie wyjściowym. Przyspieszanie procesora GPU jest domyślnie włączone dla tej funkcji. Ponieważ ta metoda generuje otwory w przekształconym obrazie kolorów i nie obsługuje okluzji, zalecamy użycie funkcji k4a_transformation_depth_image_to_color_camera().

Parametry

Parametry wejściowe to uchwyt przekształcania, obraz głębokości i obraz koloru. Rozdzielczości obrazów głębokości i kolorów muszą być zgodne z depth_mode i color_resolution określone podczas tworzenia uchwytu przekształcania. Dane wyjściowe to przekształcony obraz koloru, który musi zostać przydzielony przez użytkownika za pośrednictwem wywołania k4a_image_create(). Rozdzielczość przekształconego obrazu koloru musi być zgodna z depth_resolution określonym podczas tworzenia uchwytu przekształcania. Obraz wyjściowy przechowuje cztery 8-bitowe wartości reprezentujące BGRA dla każdego piksela. W związku z tym krok obrazu to width * 4 * sizeof(uint8_t). Kolejność danych jest przeplatona pikselami, czyli niebieska wartość — piksel 0, zielona wartość — piksel 0, czerwona wartość — piksel 0, wartość alfa — piksel 0, niebieska wartość — piksel 1 itd.

k4a_transformation_depth_image_to_point_cloud

Omówienie

Funkcja k4a_transformation_depth_image_to_point_cloud() konwertuje mapę głębokości 2D wykonaną przez aparat do chmury punktu 3D w układzie współrzędnych tego samego aparatu. Aparat może w ten sposób być głębią lub kolorową kamerą.

Implementacja

Funkcja daje równoważne wyniki uruchamiania k4a_calibration_2d_to_2d() dla każdego piksela, ale jest wydajniejszy obliczeniowie. Podczas wywoływania k4a_transformation_create() wstępnie skompilujemy tak zwaną tabelę odnośników xy, która przechowuje czynniki x- i y dla każdego piksela obrazu. Podczas wywoływania funkcji k4a_transformation_depth_image_to_point_cloud()uzyskujemy współrzędną 3D x pikseli, mnożąc współczynnik x-scale piksela ze współrzędną Z piksela. Analogicznie współrzędna Y 3D jest obliczana przez mnożenie ze współczynnikiem skali y. Przykład chmury szybkiego punktu zestawu SDK pokazuje, jak jest obliczana tabela xy. Użytkownicy mogą postępować zgodnie z przykładowym kodem, aby zaimplementować własną wersję tej funkcji, na przykład w celu przyspieszenia potoku procesora GPU.

Parametry

Parametry wejściowe to uchwyt przekształcania, specyfikator aparatu i obraz głębokości. Jeśli specyfikator aparatu jest ustawiony na głębokość, rozdzielczość obrazu głębokości musi być zgodna z depth_mode określonym podczas tworzenia uchwytu przekształcania. W przeciwnym razie, jeśli specyfikator jest ustawiony na aparat kolorów, rozdzielczość musi być zgodna z rozdzielczością wybranej color_resolution. Parametr wyjściowy jest obrazem XYZ, który musi zostać przydzielony przez użytkownika za pośrednictwem wywołania k4a_image_create(). Rozdzielczość obrazu XYZ musi być zgodna z rozdzielczością mapy głębokości wejściowej. Przechowujemy trzy podpisane 16-bitowe wartości współrzędnych w milimetrach dla każdego piksela. W związku z tym krok obrazu XYZ jest ustawiony na width * 3 * sizeof(int16_t)wartość . Kolejność danych jest przeplatane pikselami, czyli współrzędna X — współrzędna X, współrzędna Y — współrzędna 0 pikseli – współrzędna X — piksel 1 itd. Jeśli nie można przekonwertować piksela na 3D, funkcja przypisuje wartości [0,0,0] do piksela.

Przykłady

Przykład przekształcenia

Następne kroki

Teraz wiesz, jak używać funkcji przekształcania obrazów zestawu Azure Kinect Sensor SDK, możesz również dowiedzieć się więcej na temat

Możesz również przejrzeć

Układy współrzędnych