std_msgs/Header header
uint32 height
uint32 width
string distortion_model
float64[] D # 왜곡 매개변수 (렌즈 왜곡 보정)
# "plumb_bob" 모델의 경우: 매개변수(k1, k2, t1, t2, k3)
float64[9] K # 내부 카메라 매트릭스 (왜곡된 이미지 처리)
float64[9] R # 스테레오 카메라에서만 사용되는 정류 매트릭스
# 카메라 좌표계를 이상적인 스테레오 이미지 평면에 맞추어
# 두 스테레오 이미지 간의 에피폴라 라인(epipolar lines)이 평행하도록 하는 회전 매트릭스
# 3x3 크기의 행 우선 배열로, float64[9] R로 표시
float64[12] P # 보정된(정류된) 이미지에 대한 내부 카메라 매트릭스를 특정 (3*4)
uint32 binning_x
uint32 binning_y
sensor_msgs/RegionOfInterest roi
sensor_msgs /CameraInfo.msg
should be in a camera namespace on topic "camera_info" and accompanied by up to five image topics named:
- image_raw - raw data from the camera driver, possibly Bayer encoded,
- 이는 카메라 드라이버에서 직접 얻은 원시 데이터를 말합니다.
- 이 데이터는 Bayer 인코딩이 될 수 있습니다. Bayer 인코딩은 칼라 이미지를 처리하기 전에 센서가 캡처하는 방식으로,
- 각 픽셀은 빨강, 녹색, 또는 파랑의 단일 색상 정보만을 가집니다.
- 이 원시 데이터는 후처리 과정을 거쳐야만 정상적인 칼라 이미지로 변환될 수 있습니다.
- image - monochrome, distorted,
- 이 이미지는 흑백(모노크롬) 이미지이며, 왜곡이 있을 수 있습니다.
- 왜곡은 렌즈의 물리적 특성 때문에 발생하는 이미지의 기하학적 왜곡을 의미합니다.
- 일반적으로 이 왜곡은 이미지 처리를 통해 수정될 수 있습니다.
- image_color - color, distorted,
- 이는 칼라 이미지이지만 역시 왜곡이 존재할 수 있습니다.
- 왜곡된 칼라 이미지는 시각적으로 왜곡이 보정되기 전까지 일그러지거나 비정상적인 형태를 띨 수 있습니다.
- image_rect - monochrome, rectified,
- 이는 왜곡이 보정된 흑백 이미지입니다.
- '정류'라는 과정을 통해 이미지의 왜곡이 제거되었기 때문에, 객체와 구조물이 실제와 더 유사한 형태로 나타납니다.
- image_rect_color - color, rectified.
- 이는 왜곡이 보정된 칼라 이미지입니다.
- 이 이미지는 왜곡 보정 과정을 거쳐, 더 정확하고 실제와 유사한 칼라 재현이 가능해진 이미지입니다.
- The image_pipeline contains packages (
image_proc
, stereo_image_proc
) for producing the four processed image topics from image_raw and camera_info.
image_proc
, stereo_image_proc
에 대해 공부해보기
- The meaning of the camera parameters are described in detail at http://www.ros.org/wiki/image_pipeline/CameraInfo.
- The image_geometry package provides a user-friendly interface to common operations using this meta information.
- If you want to, e.g., project a 3d point into image coordinates, we strongly recommend using
image_geometry
.
If the camera is uncalibrated, the matrices D, K, R, P should be left zeroed out.
- In particular, clients may assume that K[0] == 0.0 indicates an uncalibrated camera.
- Image acquisition info:
- Time of image acquisition,
- camera coordinate frame ID Header
- Header timestamp should be acquisition time of image,
- Header frame_id should be optical frame of camera,
- origin of frame should be optical center of camera,
- +x should point to the right in the image,
- +y should point down in the image,
- +z should point into the plane of the image.
- Calibration Parameters:
- These are fixed during camera calibration.
- Their values will be the same in all messages until the camera is recalibrated.
- Note that self-calibrating systems may "recalibrate" frequently.
비왜곡 이미지로의 변형:
- 이 과정에는
D(왜곡 매개변수)와 K(내부 카메라 매트릭스)가 필요
- 이 매개변수들을 사용하여 이미지의 렌즈 왜곡을 보정
- 이미지에서 왜곡을 제거함으로써 실제 세계의 정확한 시각적 표현을 도모
정류된 이미지로의 변형:
- 이 과정에는 D, K, 그리고 R(정류 매트릭스)이 필요
- 정류 과정은 왜곡을 보정하는 것뿐만 아니라, 카메라의 이미지 평면을 조정하여 이상적인 이미지 캡처 조건을 만듦
- 예를 들어, 스테레오 카메라 설정에서는 두 카메라 간의 이미지를 서로 일치시키는데 사용
- The internal parameters can be used to warp a raw (distorted) image to:
- An undistorted image (requires D and K)
- A rectified image (requires D, K, R)
- The projection matrix P projects 3D points into the rectified image.
- 카메라의 캘리브레이션(보정) 과정과 관련된 특정 파라미터들을 설명해보겠다.
- 카메라가 보정된 이미지 차원:
- 카메라 캘리브레이션 과정에서 사용된 이미지의 크기를 나타냄
- 일반적으로 이 차원은 카메라의 전체 해상도, 즉 카메라가 캡처할 수 있는 최대 픽셀 수로 설정
- 이는 보통 uint32 타입의
height
(높이)와 width
(너비)로 표현
- 왜곡 모델:
- 카메라의 이미지에서 발생할 수 있는 왜곡을 모델링하기 위해 사용되는 수학적 모델
sensor_msgs/distortion_models.h
에 지원되는 모델들이 나열되어 있으며, 대부분의 카메라에는 "plumb_bob"이라는 모델이 적합
- "plumb_bob"은 방사형(radial) 및 접선형(tangential) 왜곡을 간단히 모델링하는 방식
- 왜곡 매개변수 (D):
- 왜곡 모델에 따라 달라지는 매개변수들로, "plumb_bob" 모델의 경우 일반적으로 다섯 개의 매개변수(k1, k2, t1, t2, k3)가 사용
- 이 매개변수들은 카메라 이미지에서의 왜곡 정도를 수치화하여 보정 과정에서 사용
float64[] D
로 표현되며, 각각의 매개변수는 실수형 배열로 저장
- 내부 카메라 매트릭스 (K):
- 정류 매트릭스 (R):
스테레오 카메라 시스템에서만 사용되는 매트릭스
- 이는 카메라 좌표계를 이상적인 스테레오 이미지 평면에 맞추어
- 두 스테레오 이미지 간의 에피폴라 라인(epipolar lines)이 평행하도록 하는 회전 매트릭스
- 이 매트릭스도 3x3 크기의 행 우선 배열로,
float64[9] R
로 표시
- 투영/카메라 매트릭스 (P):
- 단안 카메라와 스테레오 카메라 설정:
- 단안 카메라의 경우,
- Tx와 Ty는 0
- 이는 카메라가 하나뿐이므로 추가적인 좌표 변환 없이 기본 매트릭스(K)가 사용
- R(정류 매트릭스)는 일반적으로 항등 매트릭스(즉, 변화 없음)
- 스테레오 카메라
- 두 카메라 간의 상대적 위치를 나타내는 Tx와 Ty가 중요합니다.
- 첫 번째 카메라는 항상 Tx = Ty = 0을 유지
- 두 번째(오른쪽) 카메라의 경우, Ty = 0이고 Tx는
-fx' * B
로 계산
- 여기서 B는 두 카메라 사이의 기저선(거리)
- 이는 두 번째 카메라의 광학 중심이 첫 번째 카메라 프레임 내에서 얼마나 떨어져 있는지를 나타냄
- 3D 점의 2D 투영 계산:
- 주어진 3D 점
[X Y Z]'
은 투영 매트릭스 P를 사용하여 [u v w]'
로 변환
- 이는 확장된 카메라 좌표계에서의 투영을 나타냄
- 최종적으로, 2D 이미지 평면에서의 픽셀 좌표 (x, y)는 u/w와 v/w로 계산됩니다. 이는 투영된 점의 실제 이미지 좌표를 제공합니다.
- Binning:
- Binning은 여러 개의 인접한 픽셀을 하나의 큰 "슈퍼-픽셀"로 결합하는 카메라 설정
이 과정은 이미지의 해상도를 감소시키는 대신, 더 큰 픽셀 단위로 데이터를 집계하여 빛 감도(센서의 빛을 감지하는 능력)를 향상시킬 수 있음
- 예를 들어,
binning_x
와 binning_y
는 각각 이미지의 너비와 높이에서 결합할 픽셀의 수를 정의
- 만약
binning_x = 2
이고 binning_y = 2
라면, 원래 이미지의 너비와 높이는 각각 2로 나누어져, 전체 픽셀 수는 원래의 1/4로 감소합니다.
- 기본값인
binning_x = 0
과 binning_y = 0
은 binning_x = 1
과 binning_y = 1
로 간주되어, 즉 픽셀을 결합하지 않고 원래의 해상도를 유지합니다.
- Region of Interest (ROI):
- ROI는 카메라의 전체 해상도 내에서 특정 부분만을 선택하여 처리하는 기능
- 이는 특정 영역에 초점을 맞추거나 필요 없는 부분을 제거함으로써 처리 속도를 향상시키거나 데이터 저장 공간을 절약할 수 있음
- ROI 설정은 전체 해상도(바이닝 되지 않은 이미지 좌표) 내에서 특정 윈도우를 지정
- 이 설정은
roi.width
와 roi.height
로 지정되며, 선택된 윈도우는 항상 동일한 카메라 센서의 픽셀 창을 나타냄
- 기본 설정인 모든 값이 0으로 설정된 ROI는 전체 해상도(즉,
roi.width = width
, roi.height = height
)로 간주되어, 특정 영역 없이 전체 이미지를 사용함을 의미