영상 리사이징 (Image Resizing)

  • 영상의 해상도(Resolution)를 변경하는 과정으로, 원하는 해상도로 영상의 크기를 조정하고 그에 따라 픽셀의 수가 늘어나거나 줄어든다.
  • 이러한 과정은 2D-Sampling 이라 할 수 있으며, 영상 크기를 늘리는 것을 업샘플링(Up-Sampling), 줄이는 것을 다운샘플링(Down-Sampling) 이라 한다.

Down-sampling

  • 이미지 축소, 원본의 세부 정보가 손실될 수 있으므로 정보의 손실을 최소화하는 것이 중요함.
  • 단순히 픽셀을 제거하는 방식으로 다운샘플링하면 디테일이 손실되고, 계단 현상(aliasing)이 발생할 수 있다.
  • 주요 알고리즘: Nearest Neighbor, Bilinear, Bicubic, Area Averaging 등

Up-sampling

  • 이미지 확대, 새로운 픽셀을 생성해야 하며 단순히 픽셀을 복제하는 방식으로 업샘플링하면 이미지가 흐릿해지거나 계단 현상(aliasing)이 발생할 수 있으므로 보간법(Interpolation)이 중요함.
  • 이미지에 없던 정보를 생성하지 않으므로, 원본 이미지의 품질이 낮으면 업샘플링 결과도 좋지 않다.
  • 주요 알고리즘 : Nearest Neighbor, Bilinear, Bicubic, Lanczos 등
  • 최근 딥러닝 모델을 사용하여 이미지 업샘플링을 수행하는 Super-Resolution 방법이 다양하게 연구되고 있으며, 저해상도 이미지에서 고해상도 이미지를 생성하는 방법을 학습하여 기존의 보간법보다 훨씬 더 선명하고 디테일한 이미지를 얻을 수 있다.

리샘플링 및 보간법 (Resampling, Interpolation)

  • 영상 리사이징에서 사용되는 주요 방법으로, 다운샘플링을 할 때에는 여러 픽셀을 하나의 대표 픽셀로 줄이는 리샘플링(Resampling) 방법이 사용되고, 업샘플링 과정에서는 주어진 이산 데이터 사이의 값을 추정하는 보간(Interpolation) 방법이 사용된다.
  • OpenCV의 risize() 함수에서는 업/다운 여부를 따지지 않고 보간법 파라미터를 요구하며, 보간이라는 용어를 포괄적으로 사용하는 것이 일반화 되어 있다.

Nearest-Neighbor Interpolation

  • 최근접 이웃 보간(Nearest Neighbor) 방법으로, 가장 가까운 픽셀값을 그대로 사용하는 방식.
  • 가장 간단하고 빠르지만, 결과 이미지의 품질이 떨어짐. 업샘플링과 다운샘플링 모두 동일하게 동작한다.
  • 만약 x, y를 각각 2배 확대한다면, 확대된 이미지의 픽셀 의 픽셀값은 다음과 같이 계산된다.
    • ,
    • 따라서,
    • 즉 , 확대된 이미지의 (3, 5) 픽셀값은 원본 이미지의 (2,3) 픽셀값으로 매핑된다.

Bilinear Interpolation

  • 양선형 보간(Bilinear) 방법은 x축과 y축으로 두 번 선형보간을 적용한다. 입력 이미지의 4개의 인접 픽셀을 사용하여 선형적으로 보간한다.
  • Nearest Neighbor 방법보다 부드러운 결과를 제공하며, Bicubic 보간보다는 계산 비용이 적다.
  • OpenCV resize() 함수의 기본값이며, 업샘플링에서 자주 사용된다.

  • 위 그림은 원본 이미지를 3배 업샘플링한다고 가정했을 때, 업샘플링된 이미지를 나타낸 것.
  • 파란색 P1~P4의 네개 점은 3배 늘어난 픽셀 위치에 원본 픽셀값이 매핑된 것이며, 흰색 영역이 보간법을 이용해 새로운 값의 지정이 필요한 위치이다.

1. 주변 4개 픽셀 설정

  • 확대/축소된 이미지의 목표 위치 를 기준으로 원본 이미지에서 주변 4개 픽셀을 찾음.
  • 위 그림에서 별 표시가 있는 픽셀이 타겟이라고 할 때, 원본 이미지에 존재하는 주변 4개의 픽셀(P1, P2, P3, P4)을 찾아 보간을 위해 참조할 값으로 지정할 수 있다.
  • 예시) 3배 업샘플링한 이미지에서 좌표에 해당하는 4개의 주변좌표를 구한다면,
    • ,

2. 가중치 계산

  • 선형 보간을 위해 각 위치에 대한 가중치를 계산한다. 가중치는 목표 위치와 각 픽셀 사이의 거리에 반비례한다.
  • 예시) 3배 업샘플링한 이미지에서 좌표에 해당하는 참조좌표 의 가중치를 계산해보면,
  • 이는, 는 각각 목표 위치의 픽셀이 축으로 0.666 만큼 떨어져 있고, 축으로 0.333 만큼 떨어져 있다라고 해석할 수 있다.

3. 보간 및 픽셀값 계산

  • 가중치를 이용하여 축과 축으로 선형 보간을 통해 목표 위치의 픽셀값을 구할 수 있다.
    1. 를 이용해 축으로 선형 보간하여 위 그림의 위치에 해당하는 값을 구함.
    2. 를 이용해 축으로 선형 보간하여 위 그림의 위치에 해당하는 값을 구함.
    3. 를 이용해 축으로 선형보간하여 목표 위치에 해당하는 값을 구함.
  • 예시) 이라 할때, 좌표에 해당하는 픽셀값을 계산해보면,
  • 따라서, 목표 좌표의 픽셀값은 약 127로 계산됨.

Code (Python)


Bicubic interpolation

  • Bicubic 보간 방법은 주변 16개(4x4)의 픽셀값을 이용한 3차 함수 보간을 수행한다.
  • 업샘플링 시 Bilinear 방법보다 더 부드럽고 자연스러운 결과를 제공하지만 계산 비용이 높다.

1. 주변 16개 픽셀 설정

  • 확대/축소된 이미지의 목표 위치 를 기준으로 원본 이미지에서 보간에 필요한 16개의 인접 픽셀(4x4 영역)을 설정한다.
  • 예시) 2배 업샘플링한 이미지에서 좌표에 해당하는 참조좌표 를 설정해보면,
    • 참조픽셀은 부터 까지 16개

2. 1차원 Cubic 보간식(가중 함수)

  • Bicubic은 1차원 cubic 보간을 x방향과 y방향에 각각 적용하는 구조다.
  • 일반적으로 다음과 같은 3차 함수를 가중 함수(weighting function)로 사용하며, 이 함수는 픽셀 간의 거리에 따라 가중치를 결정한다.
  • : 입력. 픽셀 간의 거리.
  • : 매개변수. 일반적으로 -0.5 또는 -0.75 값을 가지며 이미지의 선명도에 영향을 미침. (OpenCV 에서는 -0.5)

3. 2차원 Bicubic 보간 과정

  • 가중 함수를 이용해 각 픽셀에 대한 가중치를 계산하며, 가중치는 목표 위치와 각 픽셀 사이의 거리를 가중 함수에 적용한다.
  • x축 방향 4줄에 대한 cubic 보간을 수행 → 중간 값 4개 생성
  • 그 4개의 중간 값에 대해 y방향 cubic 보간 수행 → 최종 보간 값 생성
  • 가중치 계산 :
  • 보간된 픽셀값 계산 :

Lanczos interpolation

  • Lanczos 보간은 sinc 함수를 기반으로 하는 Lanczos 커널을 사용하여 주변 픽셀의 가중치를 계산하고, 이를 통해 새로운 픽셀 값을 추정한다.
  • 고급 보간 방법 중 하나로, Bicubic보다 더 나은 결과를 제공할 수 있으나 계산 비용이 높다.

1. 1차원 Lanczos Kernel

  • Lanczos 커널은 다음과 같이 정의된다.
  • 여기서,
  • : 커널 크기를 나타내는 정수
    • 일반적으로 2또는 3, OpenCV 에서는 4 사용 (커널반경 8픽셀 - 좌우 각각 4픽셀 범위에서 샘플)

2. 주변 픽셀 범위 설정

  • 목표 위치 에 대해 Lanczos 커널 크기 에 따라 픽셀 범위를 설정함.

3. 가중치 계산

  • 각 주변 픽셀에 대해 목표 위치와 각 픽셀 사이의 거리를 Lanczos 커널에 적용하여 가중치를 계산함.

4. 보간 픽셀값 계산

  • 주변 픽셀값과 해당 가중치를 사용하여 보간된 목표 위치의 픽셀값을 계산함.
  • Lanczos의 특징으로 고주파 성분 보존이 잘 됨 → 선명하고 디테일이 살아있음.
  • 특히 고대비 경계에서 ringing(진동 패턴) 발생 가능.

Resampling using pixel area Average

  • 픽셀 영역 평균 보간법은 특히 다운샘플링(축소) 시 좋은 품질을 제공하는 방법이다.
  • 축소 시 대상 픽셀 하나는 원본 이미지에서 더 넓은 영역을 커버하게 되므로, 해당 영역에 걸친 모든 원본 픽셀 값을 가중 평균하여 새로운 픽셀 값을 결정함.
  • : 출력 픽셀에 대응되는 원본 이미지의 영역
  • : 영역 내의 픽셀 수

OpenCV Resize

  • OpenCV의 risize() 함수에서 사용되는 보간법의 종류 및 특징.
파라미터설명용도
cv2.INTER_NEAREST최근접 이웃 보간라벨 이미지, 속도 중요할 때
cv2.INTER_LINEAR양선형 보간 (기본값)일반적인 업샘플링/다운샘플링
cv2.INTER_CUBIC양삼차 보간 (4x4 픽셀 사용)고품질 업샘플링, 느림
cv2.INTER_LANCZOS4Lanczos 보간 (8x8 픽셀 사용)매우 고품질 업샘플링, 느림
cv2.INTER_AREA픽셀 영역 평균 기반 보간다운샘플링에 추천됨
  • 업샘플링에서 INTER_AREA 를 사용하면 OpenCV에서 내부적으로 INTER_LINEAR 로 대체 된다.

Prev: 3. 영상 히스토그램

Next: 5. 영상 필터링


참고