콘텐츠로 건너뛰기
STAGING SERVER
DEVELOPMENT SERVER

측정 결과 처리 (Stereo ace)#

이 주제에서는 Basler Stereo ace 카메라의 측정 결과 처리 방법에 대해 설명합니다.

개요#

Basler Stereo ace 카메라는 보정된 스테레오 이미지 쌍을 사용하여 시차(Disparity), 오차 및 신뢰도 이미지를 연산합니다.

보정 후, 객체 포인트는 왼쪽 및 오른쪽 이미지 모두에서 동일한 행에 투영되도록 보장됩니다. 그러나 오른쪽 이미지에서 해당 포인트가 투영되는 열은 항상 왼쪽 이미지의 동일한 포인트 열보다 더 왼쪽(즉, 더 낮거나 같음)에 위치합니다. 시차는 오른쪽 이미지와 왼쪽 이미지 간의 열 차이이며, 카메라에서 객체 포인트의 깊이 또는 거리를 나타냅니다. 시차 이미지에는 왼쪽 카메라 이미지의 모든 픽셀에 대한 시차 값이 저장됩니다. 시차가 클수록 객체 포인트가 더 가깝습니다. 시차가 0이라는 것은 객체 포인트의 투영이 동일한 이미지 열에 있으며 객체 포인트가 무한한 거리에 있음을 의미합니다.

시차의 안정적인 계산을 방해하는 요인은 다음과 같습니다.

  • 가림(Occlusions): 가림은 오른쪽 카메라에 보이지 않는 객체의 왼쪽 영역입니다. 시야에서 "가려져" 있으므로 시차를 결정할 수 없습니다.
  • 텍스처 부족: Stereo ace의 프로젝터를 사용하면 빛을 전혀 반사하지 않는 완전한 검은색 객체 같은 극단적인 경우를 제외하고 텍스처를 생성할 수 있습니다.

시차를 결정할 수 없는 픽셀은 시차 값 0을 할당하여 유효하지 않은 것으로 표시됩니다. 유효하지 않은 시차 측정값과 무한히 먼 거리에 있는 객체의 시차 측정값 0을 구분하기 위해, 후자의 시차 값은 0보다 큰 최소 시차 값으로 설정됩니다.

시차 값을 연산하기 위해 스테레오 매칭 알고리즘은 왼쪽 및 오른쪽 카메라 이미지에서 해당 객체 포인트를 찾아야 합니다. 이는 장면에서 동일한 객체 포인트를 나타내는 포인트입니다. 스테레오 매칭을 위해 Basler Stereo ace는 SGM(Semi-Global Matching)을 사용합니다.

깊이 이미지 및 포인트 클라우드 연산#

시차 이미지에는 16비트 부호 없는 정수 값이 포함됩니다. 이러한 값은 다음 항목에 지정된 배율 값과 곱해야 합니다. Scan3dCoordinateScale 시차 값을 얻기 위한 매개변수 d (단위: 픽셀). 시차 값에서 3D 객체 좌표를 연산하려면 초점 거리, 베이스라인 및 주점(Principal Point)이 필요합니다. 이러한 매개변수는 다음 항목에서 확인할 수 있습니다. Scan3dFocalLength, Scan3dBaseline, Scan3dPrincipalPointU및 Scan3dPrincipalPointV 기능. 초점 거리와 주점은 선택한 컴포넌트의 이미지 해상도에 따라 다릅니다. 이러한 값을 알면 픽셀 좌표와 시차를 카메라 좌표계의 3D 객체 좌표로 변환할 수 있습니다.

정보

읽기 전에 Scan3dFocalLength, Scan3dBaseline, Scan3dPrincipalPointU및 Scan3dPrincipalPointV, 다음을 설정해야 합니다. ComponentSelector 매개변수: Disparity 이러한 값은 컴포넌트에 따라 다르기 때문입니다.

d16이라고 가정할 때ik 은(는) 열의 16비트 시차 값입니다. i 및 행 k 시차 이미지의 경우, 픽셀 단위의 부동 소수점 시차 dik 은(는) 다음 공식으로 주어집니다.

$$ d_{ik}=d16_{ik} \cdot \mathrm{Scan3dCoordinateScale} $$

미터 단위의 3차원 재구성은 다음 파라미터를 사용하여 표현할 수 있습니다.

$$ P_x=\left(i+0.5-\mathrm{Scan3dPrincipalPointU}\right) \frac{\mathrm{Scan3dBaseline}}{d_{ik}}\ $$

$$ P_y=\left(k+0.5-\mathrm{Scan3dPrincipalPointV}\right) \frac{\mathrm{Scan3dBaseline}}{d_{ik}}\ $$

$$ P_z=\mathrm{Scan3dFocalLength} \frac{\mathrm{Scan3dBaseline}}{d_{ik}} $$

디스패리티 이미지로부터 계산된 모든 오브젝트 포인트 집합은 포인트 클라우드를 형성하며, 이는 3D 모델링 애플리케이션에 사용할 수 있습니다. 디스패리티 이미지는 각 픽셀의 디스패리티 값을 Pz 값으로 대체하여 깊이 이미지로 변환됩니다.

팁

파라미터를 직접 읽는 대신 Chunk Data를 사용할 수 있습니다. 이 방법을 사용하면 3D 계산에 필요한 정보가 ChunkScan3dCoordinateScale, ChunkScan3dFocalLength, ChunkScan3dBaseline, ChunkScan3dPrincipalPointU및 ChunkScan3dPrincipalPointV chunk 파라미터에 의해 모든 이미지에 추가됩니다. Chunk Data를 활성화하려면 다음을 설정하십시오. ChunkModeActive 매개변수: true. 이러한 Chunk Data를 읽기 전에 다음을 설정해야 합니다. ChunkComponentSelector 매개변수: Disparity.

거리 계산#

포인트 좌표가 (x,y,z) mm 단위로 주어질 때, 카메라 광학 중심에서 해당 포인트까지의 거리는 다음 공식을 사용하여 계산할 수 있습니다.

$$ d = sqrt( x * x + y * y + z * z ) $$