2024-08-25|閱讀時間 ‧ 約 24 分鐘

[OpenCV][Python]使用Dnn_superres提高圖片的解析度,模糊變高清

現在有一推AI網站提供模糊圖片變高清的工具,Google關鍵字一下就一推了,例如MyEditArtguru等等。

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

程式範例

EDSR Model下載

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)

參考文獻




分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.