일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- SQL
- 빠르게 실패하기
- sorted
- Batch Normalization
- 비지도학습
- DecisionTree
- 지도학습
- CASE WHEN
- 데이터 프로젝트
- recall
- layer normalization
- 정밀도
- 결정트리
- nvl2
- 강화학습
- Normalization
- NVL
- 오차 행렬
- 감정은 습관이다
- LAG
- 백엔드
- 웹서비스 기획
- 평가 지표
- NULLIF
- beautifulsoup
- 데이터 분석
- ifnull
- five lines challenge
- 데이터 전처리
- 재현율
- Today
- Total
Day to_day
[영상 처리] 2D 좌표에서 3D pointcloud로 변환하기 본문
포스팅 개요
이전 포스팅에서 카메라 캘리브레이션과 내부, 외부 파라미터에 대해서 알아보았다.
이번 포스팅에서는 앞서 구한 파라미터를 이용해서 3차원의 point cloud를 만드는 과정과 rgb 영상 좌표를 depth 영상 좌표로 변환, rgb 매핑하는 방법까지 정리하려고 한다.
일단 설명에 앞서 intel realsense D415 모델을 사용하여 데이터를 얻었다.
얻은 거리 정보를 가지고 point cloud 형태로 만들기 위해서는 2D인 depth map에서 3차원의 좌표로 변환하는 것이 이 과정의 핵심이다.
좌표계 변환 과정
첫 번째 이미지는 World 좌표계에서 2D 픽셀좌표계까지의 변환을 나타낸 것이다.
지금 우리가 구하려고 하는 depth map에서 depth point cloud를 구하는 과정은 픽셀 좌표계에서 카메라 좌표계까지 변환이다. 2D인 depth map에 depth 카메라의 intrinsic parameter를 인벌스시켜 곱하면 normalized image plane로 변환이 되는 것이고, 이에 거리 정보 Z를 곱하면 depth point cloud를 만들 수 있다.
수식으로 표현하자면 다음과 같다.
Depth point cloud 변환 결과
변환을 하면 다음과 같은 point cloud를 얻을 수 있다.
텍스트 파일로 저장해서 'CloudCompare' 프로그램을 이용해서 확인했다.
Depth 영상 좌표와 RGB 영상 좌표의 관계
위의 그림과 같이 Camera 1와 Camera 2가 같은 Calibration Grid를 봤을지라도 각 카메라에 Project 된 픽셀 좌표는 다를 것이다. IR 카메라에서 얻은 depth map에 맞는 색상정보를 가져와야 정확한 rgb 매핑이 될 것이다.
결국 IR 카메라와 rgb 카메라의 Rt matrix를 구해 두 카메라 사이의 관계를 구할 수 있다.
IR camera 이미지와 RGB 카메라 이미지에 각각 캘리브레이션을 적용해서 외부 파라미터인 RT matrix를 구하고Calibration을 통해 IR 카메라의 intrinsic 파라미터와 rgb 카메라의 intrinsic 파라미터를 알고 있기 때문에 두 카메라의 관계를 도출할 수 있다.
식으로 표현하면 다음과 같다.
rc는 rgb 카메라 좌표계, dc는 IR 카메라 좌표계를 의미한다.
실행결과는 아래와 같다.
코드는 깃허브에 올려두었습니다!
GitHub - minglet/Image-Processing
Contribute to minglet/Image-Processing development by creating an account on GitHub.
github.com
'영상처리' 카테고리의 다른 글
[영상 처리] 카메라 캘리브레이션 (Camera Calibration) (0) | 2023.05.05 |
---|