圖像着色 使用 OpenCV ,深度學習 進行 黑白圖像着色

原文連接 圖像着色 使用 OpenCV ,深度學習 進行 黑白圖像着色

在 2019年7月23日 上張貼 由 hotdog發表回覆php

圖像着色 使用OpenCV,深學習進行黑白 圖像着色python

在本教程中,您將學習如何使用OpenCV,深度學習和Python對黑白圖像進行着色。
圖像着色是獲取輸入灰度(黑白)圖像而後產生輸出彩色圖像的過程,該輸出彩色圖像表示輸入的語義顏色和色調(例如,在晴朗的晴天,海洋必須是合理的「藍色」) – 它不能被模型着色爲「粉紅色」。
之前的 圖像着色 方法有:git

  1. 依賴於重要的人際互動和註釋
  2. 產生去飽和着色

咱們今天在這裏使用的新方法取決於深度學習。咱們將利用可以爲黑白圖像着色的卷積神經網絡,其結果甚至能夠「愚弄」人類!
要了解如何使用OpenCV執行黑白 圖像着色,請繼續閱讀!
尋找這篇文章的源代碼?
跳到下載部分。
OpenCV和深度學習的黑白 圖像着色
在本教程的第一部分中,咱們將討論如何利用深度學習來着色黑白圖像。
從那裏咱們將利用OpenCV爲如下二者着色黑白圖像:github

  1. 圖片
  2. 視頻

而後,咱們將探討咱們工做的一些示例和演示。
咱們如何經過深度學習爲黑白圖像着色?算法

圖1: Zhang等人的深度學習黑白圖像着色的體系結構。
咱們今天要介紹的技術來自Zhang等人的2016年ECCV論文「 彩色圖像着色」
之前的黑白圖像着色方法依賴於手動人體註釋,而且常常產生不可稱爲真正着色的去飽和結果。
張等人。決定經過使用卷積神經網絡「幻覺化」輸入灰度圖像在着色時的樣子來解決 圖像着色 問題。
培訓網絡張等人。從ImageNet數據集開始,將 全部圖像從RGB顏色空間轉換爲Lab顏色空間。
與RGB顏色空間相似,Lab顏色空間有三個通道。但 RGB顏色空間不一樣,Lab對顏色信息進行了不一樣的編碼:網絡

  • L通道 編碼僅亮度強度
  • a通道 編碼綠色-紅色。
  • b通道編碼藍黃色

實驗室顏色空間的完整評論超出了本文的範圍( 有關實驗室的更多信息,請參閱本指南),但這裏的要點是實驗室能夠更好地表明人類如何看待顏色。
因爲L通道僅對強度進行編碼,所以咱們可使用L通道做爲網絡的灰度輸入。
從那裏,網絡必須學會預測ab通道。 給定輸入L通道預測的ab通道,咱們能夠造成最終的輸出圖像。
整個(簡化)過程可概括爲:框架

  1. 將全部訓練圖像從RGB顏色空間轉換爲Lab顏色空間。
  2. 使用L通道做爲網絡的輸入並訓練網絡預測ab通道。
  3. 將輸入L通道與預測的ab通道組合。
  4. 將Lab圖像轉換回RGB。

爲了產生更合理的黑白圖像着色,做者還利用了一些額外的技術,包括平均退火和用於顏色再平衡的專用損失函數(二者都超出了本文的範圍)。
有關圖像着色算法和深度學習模型的更多詳細信息,請務必參考Zhang等人的官方出版物。
項目結構
繼續使用本文的下載部分下載源代碼,模型和示例圖像 。
解壓縮後,您應該導航到項目目錄。
從那裏,讓咱們使用 tree 命令檢查項目結構ide

咱們在images / 目錄中有四個黑白圖像樣本 。
咱們的Caffe模型和prototxt 與集羣點NumPy文件一塊兒位於 model /目錄中。
咱們今天將審查兩個腳本:函數

  • bw2color_image .py
  • bw2color_video .py

圖像腳本能夠處理任何黑色和白色(也稱爲灰度)圖像你經過。
咱們的視頻腳本將使用您的網絡攝像頭或接受輸入視頻文件,而後執行着色。
使用OpenCV着色黑白圖像
讓咱們繼續使用OpenCV實現黑白圖像着色腳本。
打開 bw2color_image .pypost

咱們的colorizer腳本只須要三個導入:NumPy,OpenCV和 argparse 。
讓咱們繼續 href="https://www.pyimagesearch.com/2018/03/12/python-argparse-command-line-arguments/">使用argparse 解析命令行參數。此腳本要求將這四個參數直接從終端傳遞給腳本:

  • – image :輸入黑/白圖像的路徑。
  • – prototxt :咱們的Caffe原型文件路徑。
  • – model 。咱們通往Caffe預訓練模型的途徑。
  • – points :NumPy羣集中心點文件的路徑。

使用上述四個標誌和相應的參數,腳本將可以使用不一樣的輸入運行而無需更改任何代碼。
讓咱們繼續將模型和集羣中心加載到內存中

第21行直接從命令行參數值加載咱們的Caffe模型。OpenCV能夠經過cv2讀取Caffe模型 。dnn 。readNetFromCaffe 函數。
而後,第22行將聚類中心點直接從命令行參數路徑加載到點文件。這個文件是NumPy格式,因此咱們使用的是 np 。加載 。
從那裏, 第25-29行:

  • 用於從新平衡的ab信道量化的加載中心。
  • 將每一個點視爲1×1卷積並將它們添加到模型中。

如今讓咱們加載,縮放和轉換咱們的圖像

要從文件路徑加載輸入圖像,咱們使用 cv2 。imread 在34行
預處理步驟包括:

  • 將像素強度縮放到[0,1]範圍(第35行)。
  • 從BGR轉換爲Lab顏色空間(第36行)。

讓咱們繼續咱們的預處理

咱們將繼續將輸入圖像調整爲22 4×2 24(第41行),這是網絡所需的輸入尺寸。
而後咱們只抓取 L 通道(即輸入)並執行平均減法(第42和43行)。
如今咱們能夠經過網絡傳遞輸入L通道來 預測 ab通道

L 通道經過網絡的正向 傳輸發生在 第48和49行 (若是須要,這是="https://www.pyimagesearch.com/2017/11/06/deep-learning-opencvs-blobfromimage-works/">OpenCV的blobFromImage複習)。
請注意,咱們調用 net.forward後 。在同一行,咱們說幹就幹,提取的預測 AB 卷。我在這裏看起來很容易,但請參考張等人。 若是您想了解更多詳細信息,請參閱GitHub上的文檔和演示
從那裏,咱們將預測的ab 體積調整爲 與輸入圖像相同的尺寸(第53行)。
如今是時候進行後期處理了。請留在這裏,由於咱們基本上反過來執行之前的一些步驟

後期處理包括:

  • 抓取 L 通道原始輸入圖像(58行)和鏈接所述原始 L 信道和預測 AB 渠道一塊兒造成 着色 (59線)。
  • 將 彩色 圖像從Lab顏色空間轉換爲RGB(第63行)。
  • 剪切超出範圍[0,1]的任何像素強度(第64行)。
  • 將像素強度恢復到[0,255]範圍內(第69行)。在預處理步驟(第35行)中,咱們除以255 ,如今咱們乘以 255 。我還發現這種擴展和 「uint8」 轉換不是必需的,但它有助於代碼在OpenCV 3.4.x4.x版本之間工做。

最後,咱們的原始 圖像 和 彩色 圖像都顯示在屏幕上!
圖像着色結果
如今咱們已經實現了圖像着色腳本,讓咱們試一試。
確保您已使用此博客文章的下載部分下載源代碼,着色模型和示例圖像。
從那裏打開終端,導航到下載源代碼的位置,而後執行如下命令


$ python bw2color_image.py \ 
--prototxt model/colorization_deploy_v2.prototxt \ 
--model model/colorization_release_v2.caffemodel \ 
--points model/pts_in_hull.npy \
--image images/robin_williams.jpg

左邊,你能夠看到羅賓·威廉姆斯的原始輸入圖像,這位着名的演員和喜劇演員在5年前去世了。
右側,您能夠看到黑白着色模型的輸出。
讓咱們嘗試另外一個圖像,這是阿爾伯特愛因斯坦的一個


$ python bw2color_image.py \ 
--prototxt model/colorization_deploy_v2.prototxt \
--model model/colorization_release_v2.caffemodel \ 
--points model/pts_in_hull.npy \
--image images/albert_einstein.jpg

這種圖像着色給我留下了特別深入的印象。
注意水是如何適當的藍色陰影,而愛因斯坦的襯衫是白色的,他的褲子是卡其色 – 全部這些都是合理的顏色。
這是另外一個示例圖像,這是我最喜歡的做者之一馬克吐溫:


$ python bw2color_image.py \ 
--prototxt model/colorization_deploy_v2.prototxt \ 
--model model/colorization_release_v2.caffemodel \ 
--points model/pts_in_hull.npy \
--image images/mark_twain.jpg

在這裏,咱們能夠看到草和樹葉正確地着色爲綠色,儘管你能夠看到這些綠色混合成Twain的鞋子和手。
最終的圖像展現了使用OpenCV的不太好的黑白圖像着色


$ python bw2color_image.py \
--prototxt model/colorization_deploy_v2.prototxt \ 
--model model/colorization_release_v2.caffemodel \ 
--points model/pts_in_hull.npy \
--image images/adrian_and_janie.png

這張照片是幾周前在暴風雪中我本身和個人小獵犬小狗Janie拍的。
在這裏你能夠看到,雖然雪,Janie,個人夾克,甚至背景中的涼亭都是正確的顏色,個人藍色牛仔褲其實是紅色的。
並不是全部的圖像着色都是完美的,但今天的結果確實證實了Zhang等人的合理性。作法。
使用OpenCV進行實時黑白視頻着色
咱們已經看到了如何將黑白圖像着色應用於圖像 – 可是咱們能夠對視頻流作一樣的事情嗎?
該腳本遵循與上述相同的過程,除了咱們將處理視頻流的幀。我將更詳細地回顧它,並專一於幀抓取和處理方面。
打開 bw2color_video .py

咱們的視頻腳本須要另外兩個導入:

  • VideoStream 容許咱們從網絡攝像頭或視頻文件中抓取幀
  • time 將用於暫停以容許網絡攝像頭預熱

咱們 如今初始化咱們的 VideoStream

根據咱們是否使用 網絡攝像頭 或視頻文件,咱們將 在此處建立咱們的 vs(即「視頻流」)對象。
從那裏,咱們將加載着色器深度學習模型和聚類中心(與咱們以前的腳本中的方式相同)

如今,咱們將開始一個無限 while 循環 環比數據幀。咱們將直接在循環中處理幀

來自咱們vs的每一幀都 被第55和56行抓住 。檢查 None 類型 幀 – 當發生這種狀況時,咱們已經到達視頻文件的末尾(若是咱們正在處理視頻文件),咱們能夠 從循環中斷開(第60和61行)。
預處理(與之前同樣)在第66-75行進行 。這是咱們調整大小,縮放和轉換爲Lab的地方。而後咱們抓住 L 通道,並執行平均減法。
如今讓咱們應用深度學習着色並對結果進行後處理

咱們 經過網絡的L深度學習前向傳遞 致使預測的 ab 信道。
而後咱們將結果後處理到咱們的 彩色 圖像(第86-95行)。這是咱們調整大小,抓住原始 L ,並鏈接咱們預測的 ab的地方 。從那裏,咱們將Lab轉換爲RGB,剪輯和縮放。
若是你緊跟在上面,你會記得咱們接下來要作的就是顯示結果

咱們的原始網絡攝像頭 框架 與咱們的灰度圖像和 彩色 結果一塊兒顯示。
若是 按下「q」 鍵,咱們將從 循環和清理中斷開。
視頻着色結果
讓咱們繼續,嘗試咱們的視頻黑白色彩腳本。
確保使用本教程的下載部分下載源代碼和着色模型。
從那裏,打開一個終端並執行如下命令,讓您的網絡攝像頭上運行着色器


$ python bw2color_video.py \ 
--prototxt model/colorization_deploy_v2.prototxt \ 
--model model/colorization_release_v2.caffemodel \
--points model/pts_in_hull.npy

若是要在視頻文件上運行着色器,可使用如下命令


$ python bw2color_video.py \
--prototxt model/colorization_deploy_v2.prototxt \
--model model/colorization_release_v2.caffemodel \
--points model/pts_in_hull.npy \
--input video/jurassic_park_intro.mp4Credits::

這款機型在個人3Ghz Intel Xeon W上接近實時運行。
使用GPU,固然能夠得到實時性能; 可是,請記住,對OpenCV的「dnn」模塊的GPU支持目前有點受限,遺憾的是,它還不支持NVIDIA GPU。
摘要
在今天的教程中,您學習瞭如何使用OpenCV和深度學習爲黑白圖像着色。
咱們今天使用的圖像着色模型首先由Zhang等人介紹。在他們的2016年出版物,彩色圖像着色
使用這個模型,咱們可以將二者着色:

  1. 黑白圖像
  2. 黑白視頻

咱們的結果雖然不完美,但展現了自動着色黑白圖像和視頻的合理性。
根據張等人的說法,他們的方法可以在32%的概率裏「愚弄」人類!
我但願你喜歡今天的帖子


代碼下載
源代碼下載

原文連接 圖像着色 使用 OpenCV ,深度學習 進行 黑白圖像着色


文章轉自 Adrian Rosebrock ,OpenCV Face Recognition,PyImageSearch,https://www.pyimagesearch.com/Black and white image colorization with OpenCV and Deep Learning/,2009年7月23日訪問
相關文章

 

張貼在技術博客opencv標籤:opencv深度學習圖像着色編輯