본문 바로가기
Theory/Image Processing

12 크기 변환과 쌍선형 보간 (22.11.18)

by Orangetasteboy 2023. 6. 22.

UpsamplingDownSampling

  • 영상 2배 확대
    • 입력 영상의 픽셀을 출력 영상의 좌표가 짝수인 위치(파란색)에 복사
    • 빈자리(흰색)는 어떻게 채울까?

  • 영상 2배 확대 : 빈자리 채우기
    • 주변 픽셀 단순 복사하여 채우기

  • 영상 2배 확대 : 빈자리 채우기
    • 주변 픽셀의 평균으로 채우기

  • 영상 1/2배 축소
    • (x, y) 좌표가 짝수인 위치 픽셀만 모아 ½로 줄임

  • 2배 확대 실행 결과

  • 1/2배 축소 실행 결과

 

샘플링과 스펙트럼

  • Aliasing의 주파수 영역에서의 관찰
    • 샘플링 : 아나로그신호를 이산신호(discrete-time signal)로 변경
    • 이산신호의 스펙트럼
    • 아나로그신호의 스펙트럼이 샘플링 주파수 간격으로 주기적 반복
    • 최대 주파수(10)의 두배 이상으로 샘플링하는 경우 간섭(aliasing) X
    • 최대 주파수(10) 미만으로 샘플링하는 경우 간섭 발생

 

 

  • Aliasing의 주파수 영역에서의 관찰(downsampling)
    • 영상 크기를 ½로 줄인다는 것은 샘플링 주파수를 ½배 줄인다는 의미
    • Aliasing 발생을 방지 하는 방법 : LPF 필터링 후 downsampling

 

 

 

  • Aliasing의 주파수 영역에서의 관찰(upsampling)
    • 영상 크기를 2배 크게 한다는 것은 샘플링 주파수를 2배로 한다는 의미

 

쌍선형 보간

  • 2의 승수 배 확대 및 축소가 아닌 경우
    • (예) 아래 그림에서 100과 200사이에 있는 3개의 픽셀값을 직관적으로 채우자 → 0.25, 0.5, 0.75에 각각 125, 150, 175 → 100과 200을 직선으로 이어 이 직선상의 밝기값임 → 선형보간이라고 함

  • 선형 보간(linear interpolation) : 1차원 신호 대상
    • 보간(interpolation) 방법 : 거리에 반비례하도록 가중치 설정

  • 쌍선형 보간(bi-linear interpolation) : 2차원 신호 대상

  • 쌍선형 보간 함수를 이용한 영상 alpha배 확대
int BilinearInterpolation(double y, double x, int** image, int height, int width);

void main()
{
   int height, width;
   int** img = (int**)ReadImage("s_lena.png", &height, &width);

   float alpha = 1.3;
   int height_out = (int)(alpha * height);
   int width_out = (int)(alpha * width);
   int** img_out = (int**)IntAlloc2(height_out, width_out);
   printf("\n img_out size : h = %d, w = %d", height_out, width_out);

   for (int y = 0; y < height_out; y++) {
        for (int x = 0; x < width_out; x++) {
             img_out[y][x] = BilinearInterpolation(y / alpha, x / alpha, img, height, width);
         }
   }
   ImageShow("입력영상보기", img, height, width);
   ImageShow("출력영상보기", img_out, height_out, width_out);
}

 

  • 쌍선형 보간 실행 결과 (alpha = 1.3)

댓글