Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Postępuj zgodnie z określonymi funkcjami, aby używać i przekształcać obrazy między skoordynowanymi systemami kamer w urządzeniu Azure Kinect DK.
funkcje k4a_transformation
Wszystkie funkcje poprzedzone k4a_transformation przetwarzają całe obrazy. Wymagają one uchwytu przekształcenia k4a_transformation_t uzyskanego za pomocą k4a_transformation_create() i są zwolnione za pomocą k4a_transformation_destroy(). Możesz również zapoznać się z przykładem transformacji w zestawie SDK Przykład Transformacji, który pokazuje, jak używać trzech funkcji w tym temacie.
Omówiono następujące funkcje:
k4a_transformation_depth_image_to_color_camera()k4a_transformation_depth_image_to_color_camera_custom()k4a_transformation_color_image_to_depth_camera()k4a_transformation_depth_image_to_point_cloud()
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 kolorowy i wynik k4a_transformation_depth_image_to_color_camera() wyglądają tak, jakby zostały zrobione z tego samego punktu widzenia, czyli punktu widzenia kamery kolorowej.
Implementacja
Ta funkcja przekształcania jest bardziej złożona niż po prostu wywoływanie k4a_calibration_2d_to_2d() dla każdego piksela. Wprowadza siatkę trójkątów z geometrii kamery głębokości do geometrii kamery kolorowej. Siatka trójkąta służy do unikania generowania otworów na przekształconym obrazie głębokości. Bufor Z zapewnia prawidłową obsługę zasłon. Przyspieszanie procesora GPU jest domyślnie włączone dla tej funkcji.
Parametry
Parametry wejściowe to uchwyt transformacji i obraz głębokości. Rozdzielczość obrazu głębokości musi odpowiadać tej depth_mode określonej podczas tworzenia uchwytu transformacji. 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), ponieważ obraz przechowuje 16-bitowe wartości głębokości.
transformacja_obrazu_głębi_do_kamery_koloru_niestandardowa
Omówienie
Funkcja k4a_transformation_depth_image_to_color_camera_custom() przekształca mapę głębokości i obraz niestandardowy z punktu widzenia kamery głębokości w punkt widzenia kamery kolorowej. Jako rozszerzenie k4a_transformation_depth_image_to_color_camera(), ta funkcja została zaprojektowana w celu utworzenia odpowiedniego obrazu niestandardowego, w którym każdy piksel odpowiada odpowiednim współrzędnym pikseli kamery kolorowej, oprócz 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 zapobiegnie pojawianiu się w obrazie wyjściowym wartości, których nie ma w oryginalnym obrazie, ale spowoduje 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ą odpowiadać depth_mode, które zostało określone w momencie tworzenia uchwytu transformacji. 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 wynosić 1024x1024 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ą przy tworzeniu uchwytu transformacji. 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), 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_transformacja_obraz_koloru_do_kamery_głębi
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ędnej na obrazie kolorowym. 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 kolorowym obrazie 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łębi i kolorów muszą odpowiadać trybowi głębokości i rozdzielczości koloru określonym podczas tworzenia uchwytu transformacji. 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ść obrazu przekształconego pod względem kolorów musi być zgodna z rozdzielczością głębi określoną podczas tworzenia uchwytu transformacji. 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.
Transformacja obrazu głębi na chmurę punktów k4a
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. Kamera może być więc kamerą głębi lub kolorową.
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 obliczamy tak zwaną tabelę wyszukiwania xy, która przechowuje współczynniki skali 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 szybkiej chmury punktów z zestawu SDK pokazuje, jak obliczana jest 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 GPU.
Parametry
Parametry wejściowe to uchwyt transformacji, specyfikator aparatu i obraz głębokości. Jeśli specyfikator kamery jest ustawiony na tryb głębokości, rozdzielczość obrazu głębokości musi być zgodna z trybem głębokości określonym podczas tworzenia uchwytu transformacji. W przeciwnym razie, jeśli specyfikator jest ustawiony na kamerę kolorową, rozdzielczość musi być zgodna z rozdzielczością wybranej rozdzielczości_kolorów. 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). Kolejność danych jest przeplatana współrzędnymi pikseli, czyli współrzędna X – piksel 0, współrzędna Y – piksel 0, współrzędna Z – piksel 0, współrzędna X – piksel 1 i tak dalej. Jeśli nie można przekonwertować piksela na 3D, funkcja przypisuje wartości [0,0,0] do piksela.
Przykłady
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ć