Point Cloud Structure and Output Formats

Organized point cloud

Zivid는 기본적으로 체계적으로 구성된 포인트 클라우드를 출력합니다. 즉, 포인트 클라우드는 이미지와 유사한 구조의 2차원 포인트 배열로 구성됩니다.

이 구조에는 몇 가지 장점이 있습니다.

  • 2D 배열이 1D 배열로 해석될 수 있기 때문에 조직화되지 않은 포인트 클라우드용으로 설계된 알고리즘은 조직화에서도 작동합니다. 이것은 반대 방향으로 항상 사실이 아닙니다.

  • 정렬된 포인트 클라우드는 2D 이미지(색상 및 깊이)의 픽셀과 포인트 클라우드의 3D 포인트 간에 1:1 상관 관계가 있습니다. 이것은 이미지의 인접 픽셀이 포인트 클라우드의 인접 포인트임을 의미합니다. 이를 통해 2D 연산 및 알고리즘을 2D 이미지에 적용하고 결과를 포인트 클라우드에 직접 적용할 수 있습니다. 예를 들어 객체 감지 및 분할의 경우 2D 이미지를 분할하고 원하는 픽셀에서 3D 포인트를 직접 추출할 수 있습니다.

  • 포인트의 질서는 계산 속도를 높이고 특정 알고리즘, 특히 인접 포인트를 사용하는 작업의 비용을 낮춥니다.

Unorganized point cloud

비정형(unorganized) 포인트 클라우드는 1차원 배열의 포인트 목록입니다. 각 포인트는 정형(organized) 포인트 클라우드와 동일한 정보를 포함합니다.

비정형 포인트 클라우드에도 장점이 있습니다.

  • 센서 픽셀에 대한 매핑이 유지되지 않으므로, 정보가 없는 점(NaN)도 마찬가지입니다. 결과적으로, 비정형 포인트 클라우드는 정형 포인트 클라우드보다 크기가 작을 수 있습니다.

  • 여러 개의 포인트 클라우드를 결합하면 이를 단일의 비정형 포인트 클라우드로 병합하는 것이 더 쉽습니다.

참고

비정형 포인트 클라우드에서 픽셀 인덱스를 복원하는 것은 가능합니다. 이는 Intrinsics 함수를 사용하여 수행할 수 있습니다. 그러나 Intrinsics 함수 모델은 카메라의 전체 캘리브레이션을 다루지 않습니다. 정확한 픽셀 매핑을 얻는 유일한 방법은 체계화된 포인트 클라우드를 사용하는 것입니다. 자세한 내용은 Camera Intrinsics 을 참조하세요.

Zivid point cloud

서로 다른 Zivid 카메라 모델은 서로 다른 해상도의 센서를 사용하여 장면의 포인트 클라우드를 캡처합니다.

Camera

Megapixels (MP)

Resolution

Zivid 3

8

2816 x 2816

Zivid 2+

5

2448 x 2048

Zivid 2

2.3

1944 x 1200

SDK에서 해상도를 얻는 방법에는 여러 가지가 있습니다.

소스로 이동

소스

const auto cameraInfo = camera.info();

auto defaultSettings = Zivid::Experimental::SettingsInfo::defaultValue<Zivid::Settings>(cameraInfo);
defaultSettings.acquisitions().emplaceBack(
    Zivid::Experimental::SettingsInfo::defaultValue<Zivid::Settings::Acquisition>(cameraInfo));

defaultSettings.set(
    Zivid::Settings::Color{
        Zivid::Experimental::SettingsInfo::defaultValue<Zivid::Settings2D>(cameraInfo)
            .copyWith(
                Zivid::Settings2D::Acquisitions{
                    Zivid::Experimental::SettingsInfo::defaultValue<Zivid::Settings2D::Acquisition>(
                        cameraInfo) }) });


std::cout << "Camera resolution for default settings:" << std::endl;
const auto resolution = Zivid::Experimental::SettingsInfo::resolution(cameraInfo, defaultSettings);
std::cout << "  Height: " << resolution.height() << std::endl;
std::cout << "  Width: " << resolution.width() << std::endl;

std::cout << "Point cloud (GPU memory) resolution:" << std::endl;
const auto pointCloud = camera.capture2D3D(defaultSettings).pointCloud();
std::cout << "  Height: " << pointCloud.height() << std::endl;
std::cout << "  Width: " << pointCloud.width() << std::endl;

std::cout << "Point cloud (CPU memory) resolution:" << std::endl;
const auto data = pointCloud.copyPointsXYZColorsRGBA_SRGB();
std::cout << "  Height: " << data.height() << std::endl;
std::cout << "  Width: " << data.width() << std::endl;

생성된 포인트 클라우드는 800만 개의 포인트로 구성됩니다. 픽셀과 포인트 간에 1:1 상관 관계가 있으므로 모든 픽셀에 대해 XYZ(mm), RGB(8비트), SNR(신호 대 잡음비)을 얻을 수 있습니다. 여기서 SNR은 신호 대 잡음비입니다. GPU 내부에서는 3D 좌표, 색상 값, SNR 값이 2816 x 2816 크기의 개별 2D 배열로 저장됩니다. 사용자 측(CPU 메모리)에서는 요청 방식에 따라 다양한 형식으로 데이터를 저장할 수 있습니다. 자세한 내용은 Point Cloud Tutorial 을 참조하세요.

생성된 포인트 클라우드는 5백만 개의 포인트로 구성됩니다. 픽셀과 점 사이에는 1:1 상관 관계가 있으므로 모든 픽셀에 대해 XYZ(mm), RGB(8비트) 및 SNR을 얻을 수 있습니다. 여기서 SNR은 신호 대 잡음비입니다. 내부적으로 GPU에서 3D 좌표, 색상 값 및 SNR 값은 2448 x 2048 크기의 별도 2D 배열로 저장됩니다. 사용자 측(CPU 메모리)에서 데이터는 요청 방식에 따라 다른 형식으로 저장할 수 있습니다. 자세한 설명은 Point Cloud Tutorial 참조하십시오.

생성된 포인트 클라우드는 230만 포인트로 구성되어 있습니다. 픽셀과 점 사이에는 1:1 상관 관계가 있으므로 모든 픽셀에 대해 XYZ(mm), RGB(8비트) 및 SNR을 얻을 수 있습니다. 여기서 SNR은 신호 대 잡음비입니다. GPU 내부에서 3D 좌표, 색상 값 및 SNR 값은 1944 x 1200 크기의 별도 2D 배열로 저장됩니다. 사용자 측(CPU 메모리)에서 데이터는 요청 방식에 따라 다른 형식으로 저장할 수 있습니다. 자세한 설명은 Point Cloud Tutorial 참조하십시오.

Structured point cloud

컬러 이미지와 Depth 맵은 Zivid 포인트 클라우드에서 직접 추출할 수 있습니다. 이를 수행하는 방법의 예는 GitHub repository 를 참조하십시오.

Zivid output formats

Zivid Studio에서 Zivid Data File (*.zdf) 에 포인트 클라우드를 저장할 수 있습니다. 또한 다음과 같은 형식으로 포인트 클라우드(File → Export)를 내보낼 수 있습니다.:

  • Polygon (PLY)

  • Point Cloud Data (PCD)

  • ASCII (XYZ)

Zivid Studio에서 내보낼 때 각 형식에 대해 color spacenormals 와 같은 다양한 내보내기 옵션 중에서 선택할 수 있습니다.

PLY, PCD, XYZ 파일 형식에 대한 내보내기 옵션.

Zivid 데이터 파일(*.zdf)은 Zivid의 기본 파일 형식입니다. API를 사용하는 경우, 포인트 클라우드를 반복하여 X, Y, Z, R, G, B 및 SNR 데이터를 원하는 형식으로 저장할 수 있습니다. C++, C#, Python 을 사용하여 Zivid 데이터를 읽거나 변환하는 방법을 알아보려면 샘플을 확인하세요.

Zivid 포인트 클라우드를 보는 가장 쉬운 방법은 ZDF 파일을 PC에 복사하고 Zivid Studio 를 사용하는 것입니다. 또는 API를 사용하여 ZDF를 PLY로 변환(또는 Python script 사용)하고 3D 뷰어(예: MeshLab , CloudCompare ) 를 사용하는 것입니다.

ASCII points (*.xyz)

ASCII 문자는 데카르트 좌표를 저장하는 데 사용됩니다. XYZ는 공백으로 구분됩니다. 우리 버전에서는 RGB 값도 각 포인트에 추가됩니다. 각각의 새 점은 newline character로 구분됩니다. 이 파일은 일반 텍스트 편집기에서 볼 수 있습니다.

PLY file (*.ply)

PLY는 Stanford에서 개발한 파일 형식입니다. Learn more about PLY.

Point Cloud Data file (*.pcd)

PCD는 Point Cloud Library 고유의 파일 형식입니다. Learn more about PCD.

Experimental::PointCloudExport::exportFrame API를 사용하여 Zivid SDK를 통해 포인트 클라우드를 원하는 형식으로 내보냅니다.

Frame::save API를 사용하여 포인트 클라우드를 PCD로 내보내는 방법을 읽어보세요.

Organized PCD format

Frame::save 사용할 때 Zivid SDK는 정리되지 않은 포인트 클라우드를 나타내는 헤더와 함께 정리된 포인트 클라우드를 저장합니다. SDK 2.5부터 Config.yml 파일을 사용하여 SDK를 구성하여 정리된 포인트 클라우드를 나타내는 올바른 헤더와 함께 PCD를 내보낼 수 있습니다. 해당 파일이 이미 존재하고 Windows의 경우 %LOCALAPPDATA%\Zivid\API 또는 Ubuntu의 "${XDG_CONFIG_HOME-$HOME/.config}"/Zivid/API 에 있는 경우 Configuration/APIBreakingBugFixes/FileFormats/PCD/UseOrganizedFormat 업데이트하세요.

파일이 존재하지 않는 경우:

  1. Config.yml 파일을 다운로드합니다.

    설정 파일에는 다음 정보가 포함되어 있습니다.

    __version__:
        serializer: 1
        data: 12
    Configuration:
        APIBreakingBugFixes:
            FileFormats:
                PCD:
                    UseOrganizedFormat: yes
    
  2. 설정 파일을 다음 디렉터리에 배치합니다.

    mkdir %LOCALAPPDATA%\Zivid\API
    move %HOMEPATH%\Downloads\Config.yml %LOCALAPPDATA%\Zivid\API\
    
    mkdir --parents "${XDG_CONFIG_HOME-$HOME/.config}"/Zivid/API
    mv ~/Downloads/Config.yml "${XDG_CONFIG_HOME-$HOME/.config}"/Zivid/API/
    

    조심

    기존의 모든 설정 파일이 덮어쓰여집니다.

조심

Zivid 구성 파일은 .yaml이 아닌 .yml 파일 확장자를 사용해야 합니다.

Version History

SDK

Changes

2.17.0

Zivid 3 XL250에 대한 지원이 추가되었습니다.

2.16.0

Zivid::UnorganizedPointCloud 에 대한 지원이 추가되었습니다.