Udostępnij za pośrednictwem


Używanie 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 obsługi transformacji k4a_transformation_t uzyskanych 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.

Opisano 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łębi w punkt widzenia kamery kolorów. Ta funkcja jest przeznaczona do tworzenia tak nazywanych obrazów RGB-D, gdzie D reprezentuje dodatkowy kanał obrazu rejestrujący wartość głębokości. Jak pokazano na poniższej ilustracji, obraz kolorów 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. Odchyli siatkę trójkąta z geometrii aparatu głębi w geometrię 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 określoną wartością depth_mode podczas tworzenia uchwytu przekształcania. Jeśli na przykład uchwyt przekształcania został utworzony przy użyciu trybu 1024x1024 K4A_DEPTH_MODE_WFOV_UNBINNED , rozdzielczość obrazu głębokości musi mieć rozmiar 1024x1024 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 color_resolution z określoną wartością podczas tworzenia uchwytu przekształcania. Jeśli na przykład rozdzielczość kolorów została ustawiona na K4A_COLOR_RESOLUTION_1080P, rozdzielczość obrazu 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 niestandardowy obraz z punktu widzenia kamery głębokości w punkt widzenia kamery kolorów. Jako rozszerzenie k4a_transformation_depth_image_to_color_camera(), ta funkcja jest przeznaczona do tworzenia odpowiedniego obrazu niestandardowego, dla którego każdy piksel pasuje do odpowiednich współrzędnych pikseli kamery kolorów dodatkowej 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 tworzyć nowe wartości na 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 mniej płynnego obrazu. Obraz niestandardowy powinien być pojedynczy 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łcania został utworzony przy użyciu trybu 1024x1024 K4A_DEPTH_MODE_WFOV_UNBINNED , rozdzielczość obrazu głębokości i obrazu niestandardowego musi mieć rozmiar 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 należy przydzielić użytkownikowi za pośrednictwem wywołania k4a_image_create(). Rozdzielczość przekształconego obrazu głębokości i przekształconego obrazu niestandardowego musi być zgodna color_resolution z określonym podczas tworzenia uchwytu przekształcania. Jeśli na przykład rozdzielczość kolorów została ustawiona na K4A_COLOR_RESOLUTION_1080P, rozdzielczość obrazu 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 wartości głębokości 16-bitowej. Wejściowy obraz niestandardowy i przekształcony obraz niestandardowy muszą mieć format K4A_IMAGE_FORMAT_CUSTOM8 lub K4A_IMAGE_FORMAT_CUSTOM16odpowiednio ustawić odpowiedni krok obrazu.

k4a_transformation_color_image_to_depth_camera

Omówienie

Funkcja k4a_transformation_color_image_to_depth_camera() przekształca obraz kolorów z punktu widzenia kamery 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, aby obliczyć odpowiednią współrzędną 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 z dokładnością subpixel. Piksel, który nie ma skojarzonego odczytu głębokości, jest przypisany do wartości [0,0,0,0] BGRA na obrazie wyjściowym. Przyspieszanie procesora GPU jest domyślnie włączone dla tej funkcji. Ponieważ ta metoda tworzy otwory na przekształconym obrazie kolorów i nie obsługuje okluzji, zalecamy zamiast tego 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 to przeplatane 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()prekompilujemy tak zwaną tabelę odnośników xy, która przechowuje czynniki x- i y dla każdego piksela obrazu. Podczas wywoływania k4a_transformation_depth_image_to_point_cloud()uzyskujemy współrzędną X 3D pikseli, mnożąc współczynnik x-scale piksela ze współrzędną Z pikseli. Analogicznie współrzędna 3D Y 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ą skorzystać z przykładowego kodu, aby zaimplementować własną wersję tej funkcji, na przykład w celu przyspieszenia potoku procesora GPU.

Parametry

Parametry wejściowe to uchwyt transformacji, 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 transformacji. W przeciwnym razie, jeśli specyfikator jest ustawiony na kamerę kolorów, rozdzielczość musi być zgodna z rozdzielczością wybranej color_resolution. Parametr wyjściowy to obraz 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 milimetrze dla każdego piksela. W związku z tym krok obrazu XYZ jest ustawiony na width * 3 * sizeof(int16_t)wartość . Kolejność danych to przeplatane pikselami, 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 itd. Jeśli nie można przekonwertować piksela na 3D, funkcja przypisuje wartości [0,0,0] do piksela.

Samples

Przykład przekształcenia

Następne kroki

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

Możesz również przejrzeć

Układy współrzędnych