728x90

컴퓨터 비전, 로봇공학, 증강현실 등 다양한 분야에서 3D 세계를 2D 이미지로 변환하는 과정은 필수적입니다. 이 변환 과정에서 핵심적인 역할을 하는 것이 바로 카메라 내부 파라미터(Intrinsic Parameters)입니다. 이 글에서는 카메라 내부 파라미터의 개념, 구성 요소, 수학적 표현, 그리고 응용 분야에 대해 자세히 알아보겠습니다.

 

1. 카메라 내부 파라미터란?

카메라 내부 파라미터는 카메라의 광학적 특성과 이미지 센서의 특성을 설명하는 요소들로, 카메라 자체의 고유한 특성을 나타냅니다. 이 파라미터들은 카메라의 제조 과정에서 결정되며, 카메라가 3D 세계를 2D 이미지로 투영하는 방식을 수학적으로 표현합니다.

 

카메라 내부 파라미터는 일반적으로 핀홀 카메라 모델(Pinhole Camera Model)을 기반으로 합니다. 이 모델은 카메라가 하나의 점(핀홀)을 통해 외부의 상이 이미지로 투영된다는 개념에 기초합니다. 실제 카메라는 렌즈를 사용하지만, 수학적 모델링을 위해 핀홀 모델을 사용하는 것이 일반적입니다.

 

2. 내부 파라미터의 구성 요소

카메라 내부 파라미터는 다음과 같은 주요 요소로 구성됩니다:

2.1 초점 거리(Focal Length)

초점 거리는 렌즈 중심에서 이미지 센서까지의 거리를 의미합니다. 위 그림에서 볼 수 있듯이, 렌즈를 통과한 빛이 이미지 센서에 초점을 맺는 지점까지의 거리가 바로 초점 거리입니다. 카메라 모델에서 초점 거리는 픽셀 단위로 표현되며, 일반적으로 가로(fx)와 세로(fy) 방향으로 구분됩니다.

왜 fx와 fy 두 개의 값이 있을까?

일반적인 카메라 모델에서는 초점 거리를 두 개의 값으로 표현합니다:

  1. fx: x축(가로) 방향의 초점 거리
  2. fy: y축(세로) 방향의 초점 거리

이것은 이미지 센서의 픽셀이 가로와 세로 방향으로 다른 크기를 가질 수 있기 때문입니다. 현대 카메라에서는 대부분 픽셀이 정사각형이므로 fx와 fy의 값이 거의 같지만, 컴퓨터 비전 알고리즘에서는 이 두 값을 별도로 처리합니다.

 

현대 카메라에서는 일반적으로 fx와 fy의 값이 같거나 매우 유사합니다. 초점 거리가 길수록(값이 클수록) 시야가 좁아지고 확대 효과가 커지며, 초점 거리가 짧을수록 넓은 시야를 얻을 수 있습니다.

 

2.2 주점(Principal Point)

주점은 카메라 렌즈의 광학 축이 이미지 센서와 만나는 지점을 의미합니다. 이상적인 카메라에서는 이미지의 중심과 일치하지만, 실제로는 제조 오차 등으로 인해 약간의 차이가 있을 수 있습니다.

  • cx: 주점의 x좌표
  • cy: 주점의 y좌표

주점은 이미지 좌표계에서 표현되며, 픽셀 단위로 나타냅니다.

 

2.3 비대칭 계수(Skew Coefficient)

비대칭 계수는 이미지 센서의 픽셀이 완벽한 직사각형이 아닐 때 발생하는 왜곡을 나타냅니다. 이는 이미지 센서의 x축과 y축이 완벽하게 직교하지 않을 때 생기는 왜곡을 보정하기 위한 파라미터입니다.

  • s: 비대칭 계수(skew coefficient)

현대의 대부분 카메라에서는 제조 기술의 발전으로 비대칭 계수가 매우 작거나 무시할 수 있는 수준이므로, 일반적으로 s=0으로 간주합니다.

 

일반적인 픽셀과 비대칭 픽셀의 차이를 비교하면:

  • 일반 픽셀: 직사각형 구조, x축과 y축이 직교(90°)
  • 비대칭 픽셀: 평행사변형 구조, x축과 y축이 θ 각도로 만남

 

3. 카메라 내부 파라미터 행렬(Camera Intrinsic Matrix)

카메라 내부 파라미터는 일반적으로 3×3 행렬 형태로 표현됩니다. 이 행렬을 카메라 내부 행렬(Camera Intrinsic Matrix) 또는 카메라 캘리브레이션 행렬(Camera Calibration Matrix)이라고 합니다.

내부 파라미터 행렬 K는 다음과 같이 표현됩니다:

K = [fx  s  cx]
    [0  fy  cy]
    [0   0   1]

여기서:

  • fx, fy: x축과 y축 방향의 초점 거리(픽셀 단위)
  • cx, cy: 주점의 좌표(픽셀 단위)
  • s: 비대칭 계수(일반적으로 0)

이 행렬은 3D 카메라 좌표계의 점을 2D 이미지 좌표계로 투영하는 데 사용됩니다.

4. 내부 파라미터와 핀홀 카메라 모델

핀홀 카메라 모델에서 3D 공간상의 점 P = (X, Y, Z)가 2D 이미지 상의 점 p = (u, v)로 투영되는 과정은 다음과 같이 표현할 수 있습니다:

[u]   [fx  s  cx][X/Z]
[v] = [0  fy  cy][Y/Z]
[1]   [0   0   1][1  ]

여기서 (X, Y, Z)는 카메라 좌표계에서의 3D 점 좌표이고, (u, v)는 이미지 좌표계에서의 2D 점 좌표입니다.

이 과정에서 눈여겨볼 점은 3D 점의 Z 좌표로 X와 Y를 나누는 것입니다. 이는 원근 투영(perspective projection)의 핵심 특성으로, 멀리 있는 물체가 더 작게 보이는 현상을 수학적으로 표현한 것입니다.

5. 카메라 캘리브레이션

카메라 내부 파라미터를 결정하는 과정을 카메라 캘리브레이션(Camera Calibration)이라고 합니다. 캘리브레이션은 보통 특정 패턴(예: 체스보드)을 다양한 각도와 거리에서 촬영한 이미지를 사용하여 수행합니다.

캘리브레이션 과정은 대략적으로 다음과 같습니다:

  1. 체스보드와 같은 알려진 패턴을 다양한 위치와 방향에서 촬영합니다.
  2. 이미지에서 패턴의 특징점(예: 체스보드의 코너)을 찾습니다.
  3. 실제 3D 공간에서의 특징점 위치와 이미지에서 검출된 특징점 위치 사이의 관계를 이용하여 내부 파라미터를 계산합니다.

주요 캘리브레이션 도구로는 OpenCV의 calibrateCamera() 함수, MATLAB의 Camera Calibration Toolbox, GML Camera Calibration Toolbox 등이 있습니다.

요약 및 결론

- 카메라 내부 파라미터는 컴퓨터 비전 분야에서 3D 세계를 2D 이미지로 변환하는 핵심적인 요소입니다. 초점 거리, 주점, 비대칭 계수 등으로 구성되며, 3×3 행렬 형태로 표현됩니다.

- 정확한 내부 파라미터를 결정하기 위해서는 카메라 캘리브레이션 과정이 필요하며, 다양한 도구와 라이브러리를 활용할 수 있습니다.

- 내부 파라미터는 3D 재구성, 증강현실, 로봇 비전 등 다양한 응용 분야에서 활용되며, 컴퓨터 비전 알고리즘의 정확도와 성능에 직접적인 영향을 미칩니다.

728x90
728x90

🔧 캘리브레이션의 원리

카메라는 3차원 공간상의 점 2차원 이미지 좌표로 변환합니다. 이 과정은 기본적으로 **원근 투영(Perspective Projection)**에 의해 이루어집니다. 즉, 멀리 있는 물체는 더 작게 보이고, 가까이 있는 물체는 더 크게 보이는 현상을 수학적으로 모델링하는 것입니다.

이 변환 과정은 일반적으로 **핀홀 카메라 모델(Pinhole Camera Model)**을 기반으로 설명됩니다.

 

📌 핀홀 카메라 모델

핀홀 카메라 모델은 이상적인 카메라의 구조를 가정하는 모델입니다. 이 모델에서는 렌즈 없이 하나의 작은 구멍(핀홀)을 통해 빛이 들어와 이미지 평면에 투영됩니다. 즉, 렌즈의 굴절 효과나 센서의 비선형 왜곡을 고려하지 않은 이상적인 모델입니다.

 

 

 

🔹 카메라 투영 모델

3D 공간상의 점 가 카메라를 통해 2D 이미지 좌표 로 변환되는 과정은 다음과 같이 표현됩니다:

여기서,

  • A (Intrinsic Camera Matrix): 카메라 내부 파라미터 행렬 (초점 거리, 광학 중심 등 포함)
  • [R | t] (Extrinsic Parameters): 카메라의 위치 및 방향을 나타내는 외부 파라미터 행렬
  • (X, Y, Z): 월드 좌표계에서의 3D 점
  • (x, y): 이미지 좌표계에서의 2D 점

이 관계식을 통해 카메라가 어떻게 3D 세계를 2D 이미지로 변환하는지를 설명할 수 있으며, 이를 활용하여 캘리브레이션을 수행합니다.

 

🎯 카메라 좌표계와 투영 과정

카메라 좌표계에서 3D 점이 2D 이미지 평면으로 변환되는 과정은 다음 단계로 정리할 수 있습니다.

  1. 월드 좌표계 → 카메라 좌표계 변환
    • 3D 공간상의 점 (X, Y, Z) 를 카메라 위치에 맞게 변환
    • 외부 파라미터  [R | t] 를 이용하여 변환 수행
  2. 카메라 좌표계 → 정규화 이미지 평면
    • **초점 거리 f**을 고려하여 (Xc,Yc,Zc) (x', y')로 변환
    • x′ = Xc /Zc,  y′ = Yc /Zcx'
  3. 정규화 이미지 평면 → 실제 이미지 평면
    • 내부 파라미터 행렬 A를 이용하여 픽셀 좌표로 변환
    • x=fx⋅x′+cx,  y=fy⋅y′+cy

이 과정을 통해 실제로 촬영된 이미지에서 3D 점이 어떻게 2D 좌표로 변환되는지 설명할 수 있습니다.

 

 

✅ 정리

카메라 투영 모델은 3D 공간에서 2D 이미지로 변환하는 과정을 설명하는 핵심 개념입니다. 특히 핀홀 카메라 모델을 기반으로 한 투영 수식은 컴퓨터 비전 및 영상 처리 분야에서 필수적으로 사용됩니다.

📌 핵심 포인트

  • 카메라는 3D 공간상의 점을 2D 이미지로 변환하는 역할을 함
  • 투영 과정은 월드 좌표 → 카메라 좌표 → 이미지 평면 순으로 진행됨
  • 내부/외부 파라미터를 이용해 카메라의 위치 및 렌즈 특성을 반영할 수 있음

 

728x90
728x90

📷 카메라 캘리브레이션이란?

카메라 캘리브레이션(Camera Calibration)은 카메라의 광학적 특성을 파악하고 보정하는 과정입니다. 쉽게 말해, 카메라가 실제 세계를 어떻게 "잘못" 인식하는지 알아내고, 이를 보정하는 과정이라고 생각하면 됩니다.

 

📌 왜 캘리브레이션이 필요할까요?

1. 왜곡 보정(Distortion Correction)

카메라 렌즈는 완벽한 평면이 아니라 곡선이 있기 때문에 촬영한 영상이 왜곡될 수 있습니다. 특히 광각 렌즈는 직선이 휘어 보이는 **배럴 왜곡(Barrel Distortion)**이 심하게 발생합니다. 캘리브레이션을 통해 이러한 왜곡을 보정할 수 있습니다.

방사 왜곡(Radial Distortion): 직선이 휘어지는 현상

  • 배럴 왜곡(Barrel Distortion): 원근감이 과장되어 중앙이 볼록해 보임
  • 핀쿠션 왜곡(Pincushion Distortion): 중앙이 움푹 들어간 형태
  •  

접선 왜곡(Tangential Distortion): 렌즈가 센서와 완벽하게 정렬되지 않아서 발생



2. 정확한 3D 측정(3D Reconstruction & Measurement)

컴퓨터 비전이나 로봇이 현실 세계에서 정확한 거리나 크기를 측정하려면, 카메라가 실제 세상을 어떻게 보는지 알아야 합니다. 캘리브레이션을 수행하면 카메라의 초점 거리(focal length), 광축(optical axis), 왜곡 계수(distortion coefficients) 등을 계산할 수 있습니다.

 

카메라 캘리브레이션 과정

📌 (1) 체커보드 패턴 촬영

체커보드(Checkerboard) 또는 원형 패턴(Circle Grid)을 여러 각도에서 촬영하여 이미지에서 특징점을 검출합니다.

📌 (2) 내부 파라미터(Intrinsic) 계산

  • 초점 거리(fx, fy)
  • 광학 중심(cx, cy)
  • 렌즈 왜곡 계수(k1, k2, p1, p2, k3)

📌 (3) 외부 파라미터(Extrinsic) 계산

  • 회전(Rotation, R)
  • 이동(Translation, T)

📌 (4) 왜곡 보정(Distortion Correction)

  • OpenCV의 cv2.undistort() 함수로 이미지 왜곡을 제거할 수 있음.

 

728x90
728x90

Bilinear Interpolation(양선형 보간)은 2D 이미지나 데이터를 보간할 때 가장 널리 쓰이는 방법 중 하나입니다. 주어진 네 개의 점을 사용하여 새로운 값을 계산하는 방식입니다.

이미지 확대/축소, 색 보간, 영상 변환, YUV → RGB 변환 등에 사용됨
빠르고 계산량이 적으면서도 부드러운 결과를 제공함


1. 개념 이해

Bilinear Interpolation은 가로(X) 방향과 세로(Y) 방향으로 두 번 보간하는 방법입니다. 예를 들어, (x, y) 좌표에 존재하지 않는 값을 예측해야 한다면, 다음 네 개의 픽셀 값을 활용해서 계산할 수 있습니다.

(1) 주어진 네 개의 픽셀 (Q11, Q12, Q21, Q22)

(x1, y1)  Q11 -------- Q21  (x2, y1)
          |            |
          |   (x, y)   |   ← 우리가 찾고 싶은 값
          |            |
(x1, y2)  Q12 -------- Q22  (x2, y2)
  • Q11, Q12, Q21, Q22: 주변의 네 개의 픽셀 값
  • (x, y): 우리가 원하는 보간된 값

우리는 (x, y)에 대한 값을 이 네 개의 픽셀 값으로 예측할 것입니다.


2. Bilinear Interpolation 공식

보간은 두 단계로 이루어집니다.
1️⃣ 가로(X) 방향으로 1차 보간 (Q11 ↔ Q21, Q12 ↔ Q22)
2️⃣ 세로(Y) 방향으로 1차 보간 (최종값 계산)

(1) X 방향 보간

먼저 x 방향에서 선형 보간을 수행합니다.

여기서:

  • R1: (x, y1) 위치에서의 보간된 값
  • R2: (x, y2) 위치에서의 보간된 값

즉, Q11과 Q21 사이에서 보간한 값(R1), Q12와 Q22 사이에서 보간한 값(R2)을 구합니다.


(2) Y 방향 보간

이제 y 방향에서 최종 보간을 수행합니다.

여기서:

  • P: 최종적으로 (x, y) 위치에서의 보간된 값

이제 (x, y) 위치의 값을 구할 수 있습니다! 🎯


3. 코드 예제 (Python)

다음은 Bilinear Interpolation을 직접 구현하는 코드입니다.

def bilinear_interpolation(x, y, x1, y1, x2, y2, Q11, Q12, Q21, Q22):
    # X 방향 보간
    R1 = ((x2 - x) / (x2 - x1)) * Q11 + ((x - x1) / (x2 - x1)) * Q21
    R2 = ((x2 - x) / (x2 - x1)) * Q12 + ((x - x1) / (x2 - x1)) * Q22
    
    # Y 방향 보간
    P = ((y2 - y) / (y2 - y1)) * R1 + ((y - y1) / (y2 - y1)) * R2
    
    return P

# 예제: 4개의 픽셀값을 가지고 (1.5, 1.5) 위치의 값을 보간
x1, y1, x2, y2 = 1, 1, 2, 2
Q11, Q12, Q21, Q22 = 50, 60, 80, 90  # 픽셀 값

result = bilinear_interpolation(1.5, 1.5, x1, y1, x2, y2, Q11, Q12, Q21, Q22)
print(f"Bilinear Interpolation Result: {result}")

이 코드는 (1.5, 1.5) 위치의 값을 보간하는 예제입니다.
실제 이미지에서는 픽셀 색상 값을 보간할 때 사용됩니다.


4. Bilinear Interpolation vs 다른 보간법

보간법 방식 속도 품질
Nearest Neighbor 가장 가까운 픽셀 선택 ✅ 빠름 ❌ 계단현상 발생
Bilinear Interpolation 4개 픽셀 이용, 2차 보간 🔥 적당 👍 부드러움
Bicubic Interpolation 16개 픽셀 사용, 3차 보간 ❌ 느림 🔥 매우 부드러움

✅ Bilinear은 속도와 품질의 균형이 좋아서 이미지 확대, 색 보간, 영상 변환 등에 많이 사용됩니다.


5. Bilinear Interpolation이 사용되는 분야

  • 이미지 리사이징 (확대/축소)
    → OpenCV, Photoshop 등에서 사용
  • YUV → RGB 변환 (U, V 보간)
    → 비디오 디코딩 과정에서 사용
  • 3D 그래픽스 텍스처 매핑
    → 게임 엔진, OpenGL에서 사용
  • 지리 데이터 보간 (GIS, 위성 이미지 보정)
    → Google Earth 같은 위성 데이터 처리

6. 결론

✔ Bilinear Interpolation은 2D 보간의 가장 기본적인 기법
✔ 가로(X) → 세로(Y) 두 단계의 선형 보간을 수행함
이미지 확대, 색 변환(YUV → RGB) 등 다양한 곳에서 사용됨
✔ 속도와 품질의 균형이 좋아 실무에서 가장 많이 사용되는 보간법 중 하나

728x90

+ Recent posts