2019年8月18日 星期日

PhotoMosaic-Artifact Ver1.1 更新

這次更新主要就是支援影片作為素材, 只要把影片跟圖片一樣放到material資料夾下, PhotoMosaic-Artifact就會直接讀取影片並擷取小圖作為素材使用, 相關參數: [-video-sampling-ms, seed], -video-sampling-ms為擷取圖片的間隔時間, 預設時間為5000毫秒, 假設一個影片是23分鐘長的話, 總共會擷取276張小圖當作素材使用, 並且每次擷取時都會挑該區間時間的任意一張圖。


第二個修改則是效能改善, 原本算圖片平均顏色方法就是很單純的一個for-loop計算RGB平均顏色, 不過之前有經驗了知道矩陣相關的計算比起自己刻, 用numpy通常會快上不少。 下面是換上numpy後的比較結果(測試樣本為之前的AS圖):
  • Ver1.0:  2:04
  • Ver1.1:  0:44
直接快了2.8倍, numpy真是太神啦XD


另外除了新增支援影片跟改善效能之外, 這次也多加了-tolerance參數, 這個參數預設值為0, 所以在預設情況下每次產生馬賽克照片時輸出的圖都會是一樣的, 如果在不改變material素材的情況下想生成不同的輸出圖, 可以將tolerance稍微調高(0~10 or up), 並選定一個亂數種子(seed), 這樣PhotoMosaic-Artifact就會在容許誤差下亂數選擇不同的素材圖來組成馬賽克照片。


嘛...這次的side project真是異常順利阿, 畢竟跟之前從頭開始自己幹到底不同, 基本演算法已經有得參考, 實際上的功也就是用python重寫, 套一套library就搞定了。 像支援影片也只要套套opencv就搞定, 感覺嘴角都不禁失守了XD


最後來看下這次用影片生成的馬賽克照片吧, 這次選的素材為機動戰艦NADESICO (小時候心中的神作!!!) 素材為動畫TV版1-26 & 電影版, 取樣時間為5秒, 總共從影片產生了7947張素材小圖, 輸出結果如下:

output


原圖



恩...雖然看起來結果不錯, 不過因為這張圖色系比較單調, 所以重複的圖使用得特別多..., 在另外跑一張圖看看:
output


原圖


結果看起來不錯, 不過因為這張圖細節比較複雜, 所以我row跟col就調得比較高, 避免太多方塊不好看, 至於重複問題一樣還是有, 這個可以直接調-g參數搞定, 不過我懶得繼續try就先這樣就好XD

用影片生成馬賽克照片還有一個問題, 那就是影片截圖太花時間了..., TV 26集動畫 + 電影版影片總長度大概11小時, 截取7947張圖總共花了2小時多, 而產生row=100, col=100的馬賽克照片也才花7分鐘左右, 大部分時間都花在生成素材小圖上..., 不知道還有沒有其他方法可以改善影片取圖的效率問題...。


在來下一階段就是生個GUI Tool啦, 因為這部分要等我哥把icon圖畫出來才能收尾, 所以這塊就慢慢做了, 或是在想想還有什麼好玩的side project可以先動工 :)


Ver1.1更新:
  • 支援影片素材 (mkv, mp4, avi)
  • 效能改善
  • 新增參數(tolerance, random seed, video resampling interval)
功能:

  1. Make the custom photographic mosaic image
  2. Support video material
  3. Support GUI tool (TODO)

注意事項:
  1. 輸出圖的尺寸為 輸入圖 * scale,  輸出圖的寬度必須能整除參數col, 高度則必須能整除參數row, 整除後的寬度以及高度即為素材小圖的影像尺寸。
  2. 支援影片跟圖片做為素材圖, 不過如果素材圖的長寬比跟素材小圖不合, 在生成素材小圖時影像會自動被裁切。


程式原始碼: 
https://github.com/zmcx16/PhotoMosaic-Artifact


沒有留言:

張貼留言