콘텐츠로 바로 가기
STAGING SERVER
DEVELOPMENT SERVER

측정 결과 처리 (Stereo ace)#

이 항목에서는 Basler Stereo ace 카메라의 측정 결과를 처리하는 방법을 설명합니다.

개요#

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

보정 후, 객체 포인트는 왼쪽 및 오른쪽 이미지 모두에서 동일한 행에 투영되도록 보장됩니다. 그러나 오른쪽 이미지에서 해당 포인트가 투영되는 열은 항상 왼쪽 이미지의 동일한 포인트 열보다 더 왼쪽(즉, 낮거나 같음)에 위치합니다. 시차는 오른쪽 이미지와 왼쪽 이미지의 열 간의 차이이며, 카메라에서 객체 포인트의 깊이 또는 거리를 나타냅니다. 시차 이미지는 왼쪽 카메라 이미지에 있는 모든 픽셀의 시차 값을 저장합니다. 시차가 클수록 객체 포인트가 더 가까이 있는 것입니다. 시차가 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 시차 이미지의 열 i 및 행 k 에서의 16비트 시차 값이라고 가정할 때, 픽셀 단위의 부동 소수점 시차 dik 는 다음 공식으로 제공됩니다.

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

미터 단위의 3D 재구성은 다음 매개변수를 사용하여 나타낼 수 있습니다.

$$ 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 값으로 대체하여 깊이 이미지로 변환됩니다.

팁

파라미터를 직접 읽는 대신 청크 데이터를 사용할 수 있습니다. 이를 통해 3D 계산에 필요한 정보가 ChunkScan3dCoordinateScale, ChunkScan3dFocalLength, ChunkScan3dBaseline, ChunkScan3dPrincipalPointU및 ChunkScan3dPrincipalPointV 청크 파라미터를 통해 모든 이미지에 추가됩니다. 청크 데이터를 활성화하려면 ChunkModeActive 파라메터 true. 이 청크 데이터를 읽기 전에 다음을 설정해야 합니다: ChunkComponentSelector 파라메터 Disparity.

거리 계산#

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

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