반응형

OpenCV Python에서 화질 손실을 최소화하여 이미지를 확대하기 위해 Super Resolution을 사용하는 방법을 소개하고 있습니다.



2022. 11. 5  최초작성

2022. 11. 6  최종작성

 

OpenCV에선 미리 학습된 Super Resolution  딥러닝 모델을 사용하여 이미지를 확대할 수 있는 방법을 제공합니다. 

본 포스팅에서는 실제 사용하는 방법을 소개합니다.



1. 우선 contrib 모듈이 포함된 OpenCV를 설치해야 합니다. 기존에 opencv-python 패키지를 설치한적이 있다면 삭제하고 설치하세요.  pip list 명령으로 설치된 패키지 목록을 확인할 수 있습니다. 

    pip install opencv-contrib-python



2. 미리 학습되어 배포되고 있는 모델을 다운로드합니다.

 

EDSR      가장 좋은 결과를 얻을 수 있습니다.  모델이 제일 크고 추론 속도가 가장 느립니다.

https://github.com/Saafke/EDSR_Tensorflow/tree/master/models 

 

ESPCN, FSRCNN  작은 모델로 추론 속도가 빠르면서 적당히 좋은 결과를 보여줍니다. 실시간 비디오에 적용할 수 있습니다. 

ESPCN    https://github.com/fannymonori/TF-ESPCN/tree/master/export 

FSRCNN https://github.com/Saafke/FSRCNN_Tensorflow/tree/master/models 

 

LapSRN 중간 크기의 모델입니다. 

https://github.com/fannymonori/TF-LapSRN/tree/master/export 



몇 배 확대할지에 따라 다운받을 모델을 선택해야 합니다. 

예를 들어 ESPCN을 대상으로 포스트를 진행하도록 하겠습니다. 모델에는 N배 확대를 위한 모델 이름에 xN이 적혀있습니다. 따라서 2배 확대를 위해선 ESPCN_x2.pb를 선택하면 됩니다. ESPCN_x2.pb를 클릭합니다.  

 



3. Download를 클릭하면 모델이 다운로드됩니다. 파이썬 코드를 작성할 폴더로 복사해두세요.



4. 다음 코드를 작성하여 실행합니다.

import cv2


# 이미지를 불러옵니다.
img = cv2.imread('cat.jpeg')


# Super Resolution을 하기 위해 2배 확대를 위한 ESPCN 모델을 사용합니다.
sr = cv2.dnn_superres.DnnSuperResImpl_create()
# 모델 파일의 이름을 적어주면 됩니다.
sr.readModel('ESPCN_x2.pb')
# 모델 파일에 적힌 숫자와 일치하도록 적어줘야 합니다.
sr.setModel("espcn",2)
# img를 입력 받아 결과로 result1를 돌려줍니다. 
result1 = sr.upsample(img)


# OpenCV에서 제공하는 보간법을 사용해봅니다.
result2 = cv2.resize(img, dsize=None, fx=2, fy=2)

# 입력 이미지와 Super Resolution, OpenCV 보간법 적용 결과를 화면에 보여줍니다.
cv2.imshow('origianl', img)
cv2.imshow('result - ESPCN', result1)
cv2.imshow('result - Opencv', result2)
cv2.waitKey(0)



5. 실행 결과입니다. 어느쪽이 더 나은 결과인지 판단하기 쉽지 않네요. 



정확한 비교를 해놓은 다음 참고 사이트에서 확인해보세요.

https://learnopencv.com/super-resolution-in-opencv/ 

 

포스트에서 사용한 ESPCN의 경우만 링크에서 가져와 보면 다음과 같습니다. ESPCN을 사용한 경우가 OpenCV에서 사용하는 Bicubic 보간법보단 화질이 더 좋은 걸 볼 수 있습니다. ESPCN은 실시간으로 사용하기 위해 선택을 해본 것이라 화질이 덜 좋을 수 있습니다.  실시간이 필요없다면 더 좋은 화질을 얻을 수 있는 EDSR 모델을 고려해보세요.

 

참고

 

https://scieencerepository.data.blog/2020/03/19/deep-learning-based-super-resolution-with-opencv/

 

https://learnopencv.com/super-resolution-in-opencv/


반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts