[딥러닝 컴퓨터비전] 스테레오 비전을 이용한 3차원 위치추정 알고리즘
안녕하세요 오늘은 스테레오비전을 통하여 객체의 3차원 위치를 측정하는 방법을 알아보겠습니다.
우선 depth map을 만들려면 다른 위치의 두 카메라가 같은 물체를 촬영한 두 영상이 필요합니다.
우리가 펜을 들고 왼쪽 눈, 오른쪽 눈으로만 펜을 보게 될때, 펜의 위치가 바뀌게 되는 것처럼 보이는 것을 느낄 수 있는데, depth map을 만드는데 이와 같은 원리가 적용되는 것입니다.
따라서 스테레오 비전은 서로 다른 위치의 두 카메라가 같은 물체를 촬영한 두 영상에서 동일 객체의 영상 내 위치 차이를 이용하여 물체의 깊이정보를 구합니다. input으로 두 이미지를 받고 output으로 두 input 영상을 통해 depth map을 출력하는 것입니다.
이때 노란색 삼각형의 닮음을 활용한 비례식과 초록색 삼각형의 닮음을 활용한 비례식 두개를 활용하여 식을 전개하면 다음과 같은 식을 얻을 수 있고, 이를 통해 구한 깊이를 픽셀마다 구해 만든 행렬이 depth map 입니다.
b와 f는 카메라의 내부 파라미터이고, 두 영상 좌표의 차이값을 구해내면 우리가 원하는 물체와의 거리 z를 구할 수 있습니다.
이는 x좌표 뿐만 아니라 y좌표에도 동일하게 적용될 수 있고, 이를 3차원상에 표현하면 다음과 같습니다.
A가 실제 물체이고 a는 영상평면상에 대응되는 물체, 카메라 렌즈가 O(원점) 입니다. 위에서 구한 z(distance)를 통하여 A의 x,y 좌표 또한 삼각형의 닮음비로 구해낼 수 있습니다.
다음 수식과 같은 과정을 거쳐 3차원 공간에서 물체가 카메라와 x,y,z 축 상에서 얼마나 떨어져있는지를 구할 수 있습니다.