Back

OpenCV Linear Interpolation

openCV 보간

정수배의 확대

/files/보간1.png
/files/보간1.png

  • 가장 간단한 방법
  • 정해진 배율만큼 화소를 반복적으로 복사
  • 화질이 좋지 않음

정수배의 역수만큼 축소

/files/보간2.png
/files/보간2.png

  • 정해진 배율만큼 건너뛰면서 화소 선택
  • 예를 들어 2분의 1로 축소하는 경우 모든 짝수번째 행과 짝수번째 열의 모든 픽셀을 출력 영상에 복사
  • 영상의 세밀한 정보 (특히 문서의 경우)가 소실될 수 있다

사상 (Mapping)

주어진 조건에 따라 한 좌표가 다른 좌표로 대응

전방향 매핑 (Forward Mapping)

  • 입력 영상의 좌표값을 출력 영상의 좌표값으로 변환
  • 홀과 오버랩 문제가 발생 가능

/files/보간3.png
/files/보간3.png

- **홀** : 출력영상으로 매핑되는 입력화소가 없는 경우
- **오버랩** : 두 입력화소가 같은 출력화소에 매핑되는 경우
- 위의 그림의 경우 아래 두 화소는 정상적으로 하나씩 매핑이 되었으나
출력영상의 첫째 픽셀에 두개의 화소가 매핑되어 오버랩이 발생하고
두번째 픽셀에는 아무 픽셀도 매핑되지 않아 홀이 발생한 모습

전방향 매핑의 문제점

  • 크기가 5인 1차원 배열 소스를 1.4배 확대한다고 가정한다면..
    • destination (pixel) index = source index * 1.4 인데…
      • 인덱스값은 정수가 되어야 하므로 반올림해줘야 한다.
      • 즉 소스가 0, 1, 2, 3, 4 일 경우 destination은 0, 1, 3, 4, 6이 되는데 이러면 2, 5가 빠져버리는 이 발생하게 된다.
      • 그래서 source index = destination index / 1.4 이렇게 역으로 취해줘서 (역방향 매핑) 각 destination 픽셀에 맞는 정수 인덱스에 대응하는 소스 픽셀값을 가져오면 된다.
  • 크기가 7인 1차원 배열 소스를 1.4배 축소한다고 하면…
    • destination index = source index / 1.4
      • 소스={0,1,2,3,4} 일 경우 {0,1,1,2,3} 으로 중복으로 매핑되어버리는 오버랩이 발생.
      • 해결책은 역시 source index = destination index * 1.4 로 역방향 매핑해주어 destination index를 하나하나 차근차근 대입하여 소스 픽셀값을 가져오는 것

역방향 매핑 (Reverse Mapping) - 확대

  • 출력 영상의 좌표값을 입력 영상의 좌표값으로 변환

/files/보간4.png
/files/보간4.png

  • 출력영상의 픽셀 좌표들을 줄이면 그게 매핑되야할 입력 영상의 좌표들이다.

역방향 매핑 (Reverse Mapping) - 축소

/files/보간5.png
/files/보간5.png

  • 역시 출력영상을 늘리면 그게 매핑되어야 할 입력 영상의 좌표들이 된다.

보간법

  • 영상의 크기가 너무 작아서 확대해야 하거나 크기가 너무 커서 적당한 크기로 축소해야 하는 경우 등에서 영상을 보간해야 할 필요가 있을 수 있다
  • 영상의 화질이 좋기 위해서는 처리량(수행시간)이 늘어나야 함

최근접 이웃 보간법

/files/보간6.png
/files/보간6.png

  • 생성된 주소에 가장 가까운 화소를 출력 화소로 결정
    • 위의 예에서는 (실수값으로 온) T가 A에 제일 가까우므로 A로 결정
  • 처리속도가 빠름
  • 화질이 좋지못함

양선형 보간법

/files/보간7.png
/files/보간7.png

/files/보간8.png
/files/보간8.png

/files/보간9.png
/files/보간9.png

  • 생성된 주소에 가장 가까운 네 화소들의 가중 합으로 출력 화소 결정
  • 각 가중치는 각 화소로부터의 거리에 반비례
    • 형광칠한 부분이 그거 의미. 위 그림 보면서 이해하면 매우 쉬움.
  • 최근접 이웃 보간법보다 화질 좋으나, 더 많은 계산 소요
Built with Hugo
Theme Stack designed by Jimmy