Sdílet prostřednictvím


Použití transformací obrázků sady Azure Kinect Sensor SDK

Při používání a transformaci obrázků mezi koordinovanými systémy fotoaparátů v Azure Kinect DK postupujte podle konkrétních funkcí.

funkce k4a_transformation

Všechny funkce s předponou k4a_transformation fungují na celých obrázcích. Vyžadují obslužnou rutinu transformace k4a_transformation_t získanou prostřednictvím k4a_transformation_create() a nepřidělují se prostřednictvím k4a_transformation_destroy(). Můžete se také podívat na příklad transformace sady SDK, který ukazuje, jak používat tři funkce v tomto tématu.

Probíráme následující funkce:

k4a_transformation_depth_image_to_color_camera

Přehled

Funkce k4a_transformation_depth_image_to_color_camera() transformuje hloubkovou mapu z pohledu hloubkové kamery na pohled barevné kamery. Tato funkce je navržená tak, aby vytvářela takzvané obrázky RGB-D, kde D představuje další kanál obrázku, který zaznamenává hodnotu hloubky. Jak je vidět na obrázku níže, barevný obrázek a výstup k4a_transformation_depth_image_to_color_camera() vypadají, jako by byly převzaty ze stejného pohledu, tj. zobrazení barevné kamery.

Transformace obrázků

Implementace

Tato transformační funkce je složitější než pouhé volání k4a_calibration_2d_to_2d() pro každý pixel. Vytáhnou se trojúhelníkové mřížky z geometrie hloubkové kamery do geometrie barevné kamery. Trojúhelníková síť se používá k tomu, aby se zabránilo generování otvorů v transformované hloubkové imagi. Vyrovnávací paměť Z zajišťuje správné zpracování okluzí. Akcelerace GPU je pro tuto funkci ve výchozím nastavení povolená.

Parametry

Vstupní parametry jsou úchyt transformace a obrázek hloubky. Rozlišení hloubky obrázku se musí shodovat se depth_mode zadaným při vytváření transformačního úchytu. Pokud se například transformační úchyt vytvořil pomocí režimu 1024x1024 K4A_DEPTH_MODE_WFOV_UNBINNED , rozlišení obrázku hloubky musí být 1024 × 1024 pixelů. Výstup je transformovaná hloubková image, kterou musí uživatel přidělit voláním k4a_image_create(). Rozlišení transformovaného obrázku hloubky musí odpovídat zadanému color_resolution při vytváření transformačního úchytu. Pokud je například nastavené K4A_COLOR_RESOLUTION_1080Prozlišení barev, musí být rozlišení výstupního obrázku 1920 × 1080 pixelů. Výstupní krok obrázku je nastaven na width * sizeof(uint16_t), protože image ukládá 16bitové hloubkové hodnoty.

k4a_transformation_depth_image_to_color_camera_custom

Přehled

Funkce k4a_transformation_depth_image_to_color_camera_custom() transformuje hloubkovou mapu a vlastní obrázek z pohledu hloubkové kamery na pohled barevné kamery. Jako rozšíření k4a_transformation_depth_image_to_color_camera() je tato funkce navržená tak, aby vytvářela odpovídající vlastní obrázek, pro který každý pixel odpovídá odpovídajícím souřadnicům pixelu barevné kamery navíc k transformované hloubkové fotce.

Implementace

Tato transformační funkce vytvoří transformovaný obrázek hloubky stejným způsobem jako k4a_transformation_depth_image_to_color_camera(). K transformaci vlastního obrázku poskytuje tato funkce možnosti použití lineární interpolace nebo interpolace nejbližšího souseda. Použití lineární interpolace může vytvořit nové hodnoty v transformované vlastní imagi. Použití interpolace nejbližšího souseda zabrání tomu, aby se hodnoty, které nejsou přítomné na původním obrázku, zobrazovaly ve výstupním obrázku, ale výsledkem bude méně hladký obrázek. Vlastní image by měla být 8bitová nebo 16bitová. Akcelerace GPU je pro tuto funkci ve výchozím nastavení povolená.

Parametry

Vstupní parametry jsou úchyt transformace, hloubkový obrázek, vlastní obrázek a typ interpolace. Obrázek hloubky a vlastní rozlišení obrázku musí odpovídat zadanému depth_mode při vytváření transformačního úchytu. Pokud se například transformační úchyt vytvořil pomocí režimu 1024x1024 K4A_DEPTH_MODE_WFOV_UNBINNED , rozlišení hloubkového obrázku a vlastního obrázku musí být 1024 × 1024 pixelů. Mělo interpolation_type by to být buď K4A_TRANSFORMATION_INTERPOLATION_TYPE_LINEAR nebo K4A_TRANSFORMATION_INTERPOLATION_TYPE_NEAREST. Výstup je transformovaná hloubková image a transformovaná vlastní image, kterou musí uživatel přidělit voláním k4a_image_create(). Rozlišení transformovaného hloubkového obrázku a transformovaného vlastního obrázku musí odpovídat zadanému color_resolution při vytváření transformačního úchytu. Pokud je například nastavené K4A_COLOR_RESOLUTION_1080Prozlišení barev, musí být rozlišení výstupního obrázku 1920 × 1080 pixelů. Obrázek hloubky výstupu je nastavený na width * sizeof(uint16_t), protože image ukládá 16bitové hodnoty hloubky. Vstupní vlastní obrázek a transformovaný vlastní obrázek musí být ve formátu K4A_IMAGE_FORMAT_CUSTOM8 nebo K4A_IMAGE_FORMAT_CUSTOM16musí být odpovídajícím způsobem nastaven odpovídající krok obrázku.

k4a_transformation_color_image_to_depth_camera

Přehled

Funkce k4a_transformation_color_image_to_depth_camera() transformuje barevný obrázek z pohledu barevné kamery na pohled hloubkové kamery (viz obrázek výše). Dá se použít ke generování obrázků RGB-D.

Implementace

U každého pixelu hloubkové mapy použije funkce hodnotu hloubky pixelu k výpočtu odpovídající souřadnice subpixelu v barevném obrázku. Pak vyhledáme hodnotu barvy na této souřadnici na obrázku barev. Bilineární interpolace se provádí na barevném obrázku za účelem získání hodnoty barvy při přesnosti subpixelu. Pixel, který nemá přidružené hloubkové čtení, je přiřazen k hodnotě [0,0,0,0] BGRA ve výstupním obrázku. Akcelerace GPU je pro tuto funkci ve výchozím nastavení povolená. Vzhledem k tomu, že tato metoda vytváří díry v transformované barevném obrázku a nezpracuje okluze, doporučujeme místo toho použít funkci k4a_transformation_depth_image_to_color_camera().

Parametry

Vstupními parametry jsou transformační úchyt, hloubkový obrázek a barevný obrázek. Rozlišení hloubkových a barevných obrázků musí odpovídat depth_mode a color_resolution zadané při vytváření transformačního úchytu. Výstup je transformovaný barevný obrázek, který musí uživatel přidělit voláním k4a_image_create(). Rozlišení transformovaného barevného obrázku musí odpovídat depth_resolution zadané při vytváření transformačního úchytu. Výstupní obrázek ukládá čtyři 8bitové hodnoty představující BGRA pro každý pixel. Proto je krok obrázku width * 4 * sizeof(uint8_t). Pořadí dat je prokládání pixelů, tj. modrá hodnota - pixel 0, zelená hodnota - pixel 0, červená hodnota - pixel 0, alfa hodnota - pixel 0, modrá hodnota - pixel 1 atd.

k4a_transformation_depth_image_to_point_cloud

Přehled

Funkce k4a_transformation_depth_image_to_point_cloud() převede 2D hloubkovou mapu pořízenou kamerou do 3D bodového cloudu v souřadnicovém systému stejné kamery. Fotoaparát může být hloubka nebo barevná kamera.

Implementace

Funkce poskytuje ekvivalentní výsledky spuštění k4a_calibration_2d_to_2d() pro každý pixel, ale je výpočetně efektivnější. Při volání k4a_transformation_create()předkomputujeme tzv. vyhledávací tabulku xy, která ukládá faktory x a y pro každý pixel obrázku. Při volání k4a_transformation_depth_image_to_point_cloud() získáme souřadnici 3D X pixelu vynásobením faktoru x měřítka pixelu souřadnicí Z pixelu. Podobně se souřadnice 3D Y vypočítá pomocí násobení s faktorem měřítka y. Příklad rychlého cloudu sady SDK ukazuje, jak se vypočítá tabulka xy. Uživatelé můžou podle ukázkového kódu implementovat vlastní verzi této funkce, například zrychlit kanál GPU.

Parametry

Vstupní parametry jsou transformační úchyt, specifikátor kamery a hloubkový obrázek. Pokud je specifikátor fotoaparátu nastavený na hloubku, musí rozlišení hloubkového obrázku odpovídat depth_mode zadané při vytváření transformačního úchytu. Pokud je specifikátor nastavený na barevnou kameru, musí rozlišení odpovídat rozlišení zvoleného color_resolution. Výstupní parametr je image XYZ, kterou musí uživatel přidělit voláním k4a_image_create(). Rozlišení obrázku XYZ musí odpovídat rozlišení vstupní hloubkové mapy. Pro každý pixel ukládáme tři 16bitové souřadnicové hodnoty v milimetru. Obrázek XYZ je proto nastaven na width * 3 * sizeof(int16_t). Pořadí dat je prokládání pixelů, tj. souřadnice X – pixel 0, souřadnice Y – pixel 0, souřadnice Z – pixel 0, souřadnice X – pixel 1 atd. Pokud pixel nelze převést na 3D, funkce přiřadí hodnoty [0,0,0] pixelu.

Ukázky

Příklad transformace

Další kroky

Teď už víte, jak používat funkce transformace obrázků sady Azure Kinect Sensor SDK, dozvíte se také

Můžete také zkontrolovat

Souřadnicové systémy