現在有一推AI網站提供模糊圖片變高清的工具,Google關鍵字一下就一推了,例如MyEdit,Artguru等等。
Python的OpenCV有提供一個DnnSuperResImpl Class Reference,也可以做到這件事,就讓我們繼續往下看吧。在OpenCV DnnSuperResImpl提供的四個模型可載入使用:
- edsr
- espcn
- fsrcnn
- lapsrn
其中EDSR是精度最高的,但速度最久檔案最大,我們就利用這個模型來測試一下。
EDSR訓練數據:
- 數據集:收集大量的高解析度(High-Resolution, HR)圖像作為訓練數據集,並通過下採樣方法(如雙線性插值)生成相應的低分辨率(Low-Resolution, LR)圖像。
- 配對:每張 HR 圖像與其對應的 LR 圖像形成一對訓練樣本,LR 圖像作為模型的輸入,HR 圖像作為目標輸出。
在由SRRe sNet訓練好的模型,可以用來讓低解析度的圖像縮放成高解析度的圖像。
EDSR(Enhanced Deep Residual Networks for Single Image Super-Resolution)是一種基於深度學習的超分辨率(super-resolution)方法。它由 Bee Lim 等人在 2017 年提出,目的在提高圖像的解析度和品質。
EDSR結果圖
從111*148大小,已2的倍數不斷放大

雙三次插值結果圖
使用cv2.resize一樣2倍的放大,做個比較

EDSR與雙三次插值比較圖
EDSR縮放的效果明顯看起來比雙三次插值還來的自然一點。

安裝套件
OpenCV 要4.3.0以上
install opencv-contrib-python
測試的套件版本
opencv-contrib-python-headless 4.10.0.84
opencv-python 4.7.0.72
opencv-python-headless 4.10.0.84
程式範例
import cv2
from cv2 import dnn_superres
# 初始化DnnSuperResImpl_create
sr = dnn_superres.DnnSuperResImpl_create()
# 讀取圖片
img = cv2.imread('路徑')
# 讀取預訓練的模型,這裡使用 EDSR_x2模型放大2倍
sr.readModel("EDSR_x2.pb")
# 設置模型類型和放大倍率
sr.setModel("edsr", 2)
# 放大圖像
img = sr.upsample(img)
# 保存放大的影像
cv2.imwrite('路徑', img)