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에서 해상도를 얻는 방법에는 여러 가지가 있습니다.

소스로 이동

source

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;

The generated point cloud consists of 8 million points. Since there is a 1:1 correlation between pixels and points, it is possible to obtain XYZ (mm), RGB (8-bit), and SNR for every pixel, where SNR is the Signal-to-Noise Ratio. Internally on the GPU the 3D coordinates, color values, and SNR values are stored as separate 2D arrays of size 2816 x 2816. On the user’s side (CPU memory) the data can be stored in different formats, depending on how it is requested. See Point Cloud Tutorial for a detailed explanation.

생성된 포인트 클라우드는 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 파일 형식에 대한 내보내기 옵션.

The Zivid Data File (*.zdf) is the native Zivid file format. If you are using the API, you can loop over the point cloud and save the X, Y, Z, R, G, B, and SNR data in whichever format you prefer. Check out our Samples to see how to read or convert Zivid data using C++, C#, and Python.

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

Added support for Zivid 3 XL250.

2.16.0

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