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