ในยุคที่เราต้องรวดเร็วและใช้เวลาให้คุ้มค่าการจะต้องมาถ่ายรูปใหม่ทุกครั้งที่ถ่ายพลาด ถ่ายเบลอ ซึ่งสิ่งเหล่านี้นั้นจะทำให้เสียเวลาไปเยอะมากและไม่ใช่ทุกครั้งที่ถ่ายใหม่จะดีไปกว่าเก่าจากเหตุผลต่างๆเช่น การถูกรบกวนโดยคนรอบข้าง เวลาที่น้อยลงและความกดดันของคนที่ขอให้ถ่ายใหม่และปัจจุบันก็มีวิธีการแก้ได้หลากหลายวิธีซึ่งวิธีที่จะนำเสนอในวันนี้ก็คือการทำ Deblur รูปภาพซึ่งเป็นหนึ่งในเทคนิคของ Super resolution โดยใช้ Model NAFNET
ซึ่ง Model NAFNET นั้นทำได้มากกว่า Deblur การทำ Denoise ก็สามารถทำได้ซึ่งวันนี้เราจะมาลองทำ Deblur กันก่อนโดยจะใช้ Google Colab ในการรันโคด
ขั้นตอนที่ 1 Import เข้าไปใน Google Drive
from google.colab import drive
drive.mount('/gdrive')
ซึ่งก่อนที่จะทำขั้นตอนต่อไปเราต้องเช็คให้ดีว่าเรา mount drive แล้วหรือยัง
ในส่วนของภาพนี้จะเห็นได้ว่ายังไม่ได้ทำการ mount drive ดังนั้นเราจึงต้องกดไปที่ icon ตามรูปก่อน
ซึ่งหลังจากกดหรือ mount drive แล้วจะเป็นตามรูปด้านล่าง
ขั้นตอนที่ 2 ทำการเข้าไปใน Folder ของเราใน Google Drive
%cd drive/MyDrive/AIBlog/
ขั้นตอนที่ 3 ทำการ Clone ข้อมูลของ Model NAFNET จาก github
!git clone https://github.com/megvii-research/NAFNet.git
%cd NAFNet/
หลังจากรันโคดแล้วจะขึ้นตามรูปด้านล่าง

และมี Folder ของ NAFNET เพิ่มขึ้นมาตามนี้
ขั้นตอนที่ 4 ติดตั้ง libraly ตามที่อยู่ในไฟล์ requirements.txt
ซึ่งในไฟล์ requirements.txt จะประกอบไปด้วย
addict
future
lmdb
numpy
opencv-python
Pillow
pyyaml
requests
scikit-image
scipy
tb-nightly
tqdm
yapf
!pip install -r requirements.txt
หลังจากรันแล้วจะเริ่มติดตั้ง library ตามรูปด้านล่าง

ขั้นตอนที่ 5 รันไฟล์ python ที่ชื่อ setup.py โดยไม่ใช้ cuda
!python setup.py develop --no_cuda_ext
ขั้นตอนที่ 6 โหลดข้อมูลที่ทำการเทรนมาแล้ว
ซึ่งส่วนนี้เป็นส่วนที่สำคัญเพราะว่าถ้าเราไม่มีข้อมูลที่ทำการเทนรมาก่อนรูปภาพที่เราจะได้แทบจะไม่ความแตกต่างจากเดิมเลยหรือถ้าต้องการเทรนข้อมูลรูปภาพเองก็อาจจะใช้เวลาที่นานมาก
ดังนั้นในส่วนนี้เราจะโหลดข้อมูล Pre-trained Models มาจากเจ้าของ NAFNET ที่เทรนให้แล้วมาก่อนโดยใช้ gdown หรือโหลดจาก Google Drive นั่นเอง
import gdown
gdown.download('https://drive.google.com/uc?id=14D4V4raNYIOhETfcuuLI3bGLB-OYIv6X', "./experiments/pretrained_models/", quiet=False)
หลังจากรันโคดแล้วจะทำการโหลดตามรูปด้านล่าง

และมี File ชื่อ NAFNet-REDS-width64.pth อยู่ใน Folder NAFNET/experiments/pretrained_models/ ตามรูป
ขั้นตอนที่ 7 นำรูปที่เราต้องการจะทำ Deblur มาลดเบลอ
โดยรูปที่เราต้องการจะนำมาใส่จะอยู่ใน path ของ input_path
--input_path ./demo/test1.jpg
และรูปที่ลบเบลอแล้วจะมาอยู่ใน path ของ output_path
--output_path ./demo/deblur_test1.png
!python basicsr/demo.py -opt options/test/REDS/NAFNet-width64.yml --input_path ./demo/test1.jpg --output_path ./demo/deblur_test1.png
หลังจากรันแล้วรูปที่ได้จะอยู่ใน Folder demo ตามรูป
ขั้นตอนที่ 8 แสดงผลลัพธ์ของรูปออกมาเปรียบเทียบกัน
import cv2
import matplotlib.pyplot as plt
blurImg = cv2.imread('./demo/test1.jpg')
deblurImg = cv2.imread('./demo/deblur_test1.png')
blurImg = cv2.cvtColor(blurImg, cv2.COLOR_BGR2RGB)
deblurImg = cv2.cvtColor(deblurImg, cv2.COLOR_BGR2RGB)
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(blurImg)
plt.title('Blur Image')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(deblurImg)
plt.title('Deblur Image')
plt.axis('off')
ผลลัพธ์ของโคดที่นำรูปมาเปรียบเทียบกัน
สรุป
การจะทำการลบเบลอได้นั้นไม่ใช่แค่ว่าเรามีโคดอย่างเดียวแล้วจะทำได้เลยเราต้องมีข้อมูลที่ทำการเทรนมาแล้วด้วยซึ่งใน Model NAFNET เองก็มีชุดข้อมูลที่ต่างกันมากมายซึ่งเหมาะกับสถานการณ์ที่แตกต่างกันเพื่อให้รูปที่ออกมามีผลลัพธ์ที่ดีมากขึ้นและยิ่งเราเทรนข้อมูลมากเท่าไหร่ภาพที่ได้ก็จะชัดมากขึ้นเท่านั้นและเมื่อนำประยุกต์ใช้กับกล้องในปัจจุบันเราก็จะไม่ต้องมาคอยถ่ายรูปใหม่ให้เสียเวลาอีกต่อไป







Top comments (0)