Computer VisionMachine LearningOpenCVPython

Python การใช้ Deep Learning ปรับภาพขาวดำเป็นภาพสี BW to Color ร่วมกับ OpenCV

ตัวอย่างนี้คุณจะได้เรียนรู้วิธีปรับภาพขาวดำให้เป็นภาพสี Black & White เป็น Colorโดยใช้ OpenCV, Deep Learning และ Python

ตัวอย่างนี้คุณจะได้เรียนรู้วิธีปรับภาพขาวดำให้เป็นภาพสี Black & White เป็น Colorโดยใช้ OpenCV, Deep Learning และ Python

บทเรียนก่อนหน้า:

รอบนี้เราจะใช้ Deep Learning กันซึ่งเราจะใช้ Model มาช่วยในการระบายสีของภาพที่เป็นภาพขาวดำให้กลายเป็นภาพสี (เทคนิค BW2Color) โดยเราจะต้องศึกษากระบวนการที่ว่า เราจะทำให้ภาพขาวดำเป็นภาพสีด้วย Deep Learning ได้อย่างไร

เทคนิคคงต้องใช้ Model ของ Zhang และคณะ จาก Conference นี้: http://richzhang.github.io/colorization/

  • Zhang, Isola, Efros. Colorful Image Colorization. In ECCV, 2016 (oral). (hosted on arXiv)>

มันมีเรื่องของอัลกอริทึม Deep Dream ที่ว่าด้วยภาพและสี การทำให้สีของภาพขาวดำอาศัยการรับรู้แบบ “unbelievable” แน่นอนมันเชื่อไม่ได้หากเทียบสามัญสำนึกของมนุษย์ด้วยจากข้อมูลใน Model ผลลัพธ์ที่ได้อาจจะเป็นสีที่ใกล้เคียง หรือไม่ได้ตรงกับการรับรู้แต่อย่างใด อาจจะไม่ใช่สีที่แท้จริง แต่เป็นการเติมเต็มในรูปแบบของสีที่มนุษย์ยอมรับได้ว่ามันเป็นภาพที่ตกแต่งสีแล้ว

Zhang ใช้วิธีการนำเข้าชุดข้อมูล ImageNet และแปลงรูปภาพทั้งหมดจากพื้นที่สี RGB เป็น Lab color space เช่นเดียวกับพื้นที่สี RGB พื้นที่สี Lab มีสามช่องทาง (R=Red, G=Green, B=Blue) แต่ Lab แตกต่างจากพื้นที่สี RGB Lab จะเข้ารหัสข้อมูลชุดสีแตกต่างกัน:

  • L เข้ารหัสความเข้มของแสงเท่านั้น (Lightness Intensity) หรือ Luminance เป็นการกำหนดความสว่างซึ่งมีค่าตั้งแต่ 0 ถึง 100 ถ้ากำหนดที่ 0 จะกลายเป็นสีดำ แต่ถ้ากำหนดที่ 100 จะกลายเป็นสีขาว
  • a จะเข้ารหัสชุดสีเขียว – แดง (encodes green-red)
  • b เข้ารหัสชุด สีน้ำเงิน – เหลือง (encodes blue-yellow)

กระบวนการของ Lab Color ของ Zhang ก็ Based มาจาก ระบบสีแบบ Lab ตามมาตรฐานของ CIE ซึ่งไม่ขึ้นอยู่กับอุปกรณ์ใดๆ ระบบสีแบบ Lab เป็นค่าสีที่ถูกกำหนดขึ้นโดย CIE (Commission Internationale d’ Eclarirage)ศึกษาได้ที่ https://en.wikipedia.org/wiki/CIELAB_color_space

กลับมากระบวนการนี้ แปลงภาพการฝึกอบรมทั้งหมดจากพื้นที่สี RGB เป็นพื้นที่สี Lab ใช้ช่อง L เป็นสัญญาณเข้าสู่ Train Network ทำการ Predict ช่อง ab รวม Channel L เข้ากับ ab แล้วจึงแปลงภาพ Lab กลับเป็น RGB

โหลด Model ที่จะใช้ Deep Learning ที่นี่: https://drive.google.com/file/d/1Rfxzbe1hfjge9JyKB8d8vtjAkm-K8JDC/view?usp=sharing

ทำการสร้าง โฟลเดอร์ชื่อ model แล้วแตก zip นำไฟล์ model ไปไว้ในโฟลเดอร์นั้นครับ เตรียมไฟล์รูปภาพขาวดำไว้ทดสอบบทเรียนนี้:

ผมใช้รูปขาวดำนี้
ผมใช้รูปขาวดำนี้

สร้างไฟล์ bw_to_color.py ขึ้นมาประกาศตัวแปร:

ใช้ numpy และ OpenCV มาประมวลผลภาพ

ทำการโหลด colorization_deploy_v2.prototxt ใน model มาเทียบ Caffe (คือเจ้า Caffe, http://caffe.berkeleyvision.org/ เป็นชุดคำสั่งสำหรับใช้งาน neural network deep learning ตระกูล convolutional neural network (CNN) ค่อนข้างง่าย และหาโหลดบทเรียนเพิ่มศึกษาได้ง่าย)

ไปเรียก readNetFromCaffe() มาทำงานผ่าน GPU

เป็นคำสั่งในการ rebalancing ปรับสมดุลปริมาณของสี Channel a และ b โดยเชื่อม Convolutions รูปแบบ 1×1 ไปที่ละส่วน เข้าไปใน model

imread ทำการโหลดรูปภาพจาก Path ของเรา ทำการเริ่ม Preprocessing ประกอบด้วย การปรับความเข้มของพิกเซลให้อยู่ในช่วง [0, 1] และ การแปลงจาก BGR เป็นพื้นที่สี Lab

ประมวลผลภาพต่อเนื่อง ปรับขนาดภาพอินพุตเป็น 224 × 224  ซึ่งเป็นขนาด input ที่จำเป็นสำหรับ network ประมวลผลของ Channel L เป็นหลักก่อนหาค่า intensity และทำการลบค่าเฉลี่ย เมื่อได้ค่า L แล้วเราจะ Predict คาดการณ์ channel a,b ได้

ต่อมาคือการประมวลค่าสีใส่ในภาพ

คือมัน Resize เพื่อ Predict ให้กับ channel a.b แล้ว เราก็ทำการแสดงผลภาพกันหน่อย

ตัวอย่างไฟล์ทั้งหมดของวันนี้:

ทดสอบ Run ดูผลลัพธ์

ยากไปนิดถ้าจะพยายามให้มันเป๊ ที่บอกมันมากจาก Model และ Deep Learning ครับมีทางเดียวคือต้อง Train Model เอง

ลองอีกภาพโดยกาจาก Internet

เอามาทดสอบสิ

ลอง Taxi บ้าง

ใกล้เคียงนะครับแม้ว่าจริงๆ เราจะคาดหวังถึงสี เขียว เหลือง

Tags

Banyapon Poolsawasd

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button
Close
Close

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน