Intrinsic/Extrinsic Matrix / IPM 완벽 정리

FSA·2024년 6월 2일
1

camera

목록 보기
5/11

1.Intrinsic Matrix


2. Extrinsic Matrix

2.1. 회전 only 변환

  • 절대 좌표계(흰색)에서, 센서 좌표계(빨간색)로 옮기는 과정 = 아래 왼쪽
    • R(roll)*R(pitch)*R(yaw)의 inverse 행렬이 필요
  • 센서 좌표계(빨간색)에서, 절대 좌표계(흰색)로 옮기는 과정 = 아래 오른쪽
    • R(roll)*R(pitch)*R(yaw) 행렬이 필요

2.2. 회전 + 병진 변환

2.2.1. 회전 먼저 하고 -> 병진 하는 경우

2.2.2. 병진 먼저 하고 -> 회전 하는 경우

  • 참고
  • 아래 식도, world 좌표계를 camera 좌표계로 변환하는 행렬

2.3. 센서 quaternion을 알고 있을 때 -> 회젼 변환?

  • 회전 벡터를 구한 후(r), yaw * pitch * roll 순으로 계산한 벡터를 구해서, 연산해주면 됨.

3. IPM (Inverse Perspective Mapping)

3.1. 직접 구하기!

3.2. cv2.warpPerspective 써서 구하기

# segment_homography: (x=220, y=420, 3)
# IPM_matrix: "2D camera image plane -> bev" (3, 3)
# output_pixel_resolutions: (x=220, y=420)
# segment_homography: (x=220, y=420, 3)
segment_homography = cv2.warpPerspective(
    segment_image,
    IPM_matrix,
    (output_pixel_resolutions["x"], output_pixel_resolutions["y"]),
    flags=interpolation_mode)

3.2.1. Parameter

3.2.1.1. src (입력 이미지)

  • 타입: numpy.ndarray (h, w, 3)
  • 설명: 변환을 적용할 원본 이미지입니다. 보통 OpenCV에서 이미지를 읽을 때 반환되는 배열 형태입니다.

3.2.1.2. M (변환 행렬)

  • 타입: numpy.ndarray
  • 설명:
    • 3x3 변환 행렬입니다.
    • 이 행렬은 이미지의 모든 점에 적용되어 새 위치를 계산합니다.
    • 일반적으로 cv2.getPerspectiveTransform 함수를 사용하여 계산된 행렬을 입력으로 사용합니다.

3.2.1.3. dsize (출력 이미지 크기)

  • 타입: tuple
  • 설명:
    • 출력 이미지의 크기를 지정합니다.
    • 이 크기는 (너비, 높이) 형식의 튜플로 지정되며, 픽셀 단위입니다.

3.2.1.4. flags (보간 방법)

  • 타입: int
  • 설명: 이미지 픽셀 값을 보간(interpolation)하는 방법을 지정합니다. 주로 사용되는 보간 방법은 cv2.INTER_LINEAR (기본값), cv2.INTER_NEAREST, cv2.INTER_CUBIC

profile
모든 의사 결정 과정을 지나칠 정도로 모두 기록하고, 나중에 스스로 피드백 하는 것

0개의 댓글