Doby's Lab

Interpolation, cv2.resize() (Image Resize #2) 본문

Computer Vision (CV)

Interpolation, cv2.resize() (Image Resize #2)

도비(Doby) 2022. 12. 27. 22:59

Center Cropping을 하고 나서 궁금했던 점은 width와 height는 같아졌는데 input_shape와 맞지 않아서 어떻게 처리해야 할지가 의문이었습니다.

 

예를 들어 아래의 경우처럼 input_shape보다 작게 나와서 이미지를 확대해야 하는 경우가 있습니다.

그리고, 다른 경우는 input_shape보다 크게 나오는 바람에 이미지를 축소해야 하는 경우도 생깁니다.

확대와 축소 둘 다 방법이 떠오르지 않았었습니다. 그래서 확대를 해야 하는 경우는 Zero Padding을 하고, 축소는 input_shape에 맞게 Cropping을 해줘야겠다 싶었습니다.


Interpolation

OpenCV 라이브러리에서 제공하는 cv2.resize()로 이 문제를 해결할 수 있었습니다.

이때, Interpolation(보간법)이라는 개념이 등장합니다.

 

cv.resize(img,None,fx=2, fy=2, interpolation = cv.INTER_CUBIC)

 

확대를 하는 경우, 어떤 특정 픽셀 값을 주위의 픽셀들로부터 추정할 수 있고,

반대로 축소를 해야 할 때는 손실될 픽셀들을 어떻게 선정할지 추정할 수 있습니다.

 

이러한 방법을 Interpolation(보간법)이라고 합니다.

cv2.resize에는 5가지의 보간법을 제공합니다.

 

cv2.INTER_NEAREST

- 최근접의 이웃한 픽셀들을 참고하여 픽셀값을 추정합니다.

 

cv2.INTER_LINEAR

- 쌍선형 보간법으로 성능이 우수하며 시간적으로 빠릅니다.

 

cv2.INTER_CUBIC

- 바이큐빅 보간법으로 성능은 쌍선형보다 우수하지만 보다 느립니다.

 

cv2.INTER_LANCZOS4

- Lanczos 보간법은 더욱 복잡한 보간법으로 그만큼 성능이 더 우수합니다.

 

cv2.INTER_AREA

- 영역의 특징을 추출하여 결과를 지정합니다.

 

그래도 확대, 축소할 때 주로 쓰이는 보간법이 있습니다.

확대

  • cv2.INTER_LINEAR
  • cv2.INTER_CUBIC

축소

  • cv2.INTER_AREA

Reference

https://m.blog.naver.com/vps32/221762092250

 

OpenCV 보간법 , 이미지 크기 변경

이미지의 크기를 늘릴때 픽셀로 이루어진 이미지를 어떻게 키우고 그 사이에 어떠한 픽셀을 넣는걸까 혹은 ...

blog.naver.com

https://seokii.tistory.com/14

 

[OpenCV with Python] - 11. 이미지(영상)의 크기 변환(확대 및 축소) : cv2.resize()

코드 및 이미지 : https://github.com/Seokii/Study_OpenCV GitHub - Seokii/Study_OpenCV: study about OpenCV study about OpenCV. Contribute to Seokii/Study_OpenCV development by creating an account on GitHub. github.com 이번 포스팅에서는 OpenCV

seokii.tistory.com

 

728x90