ColorSketch

ColorSketch

“ColorSketch: A Drawing Assistant for Generating Color Sketches from Photos”

前言

拿到這篇文章的時候,我還是很驚喜的。因爲之前很少閱讀應用或者工程相關的論文,藉着這次機會,看看是否能讓自己的科研思路轉變轉變,不做一個一直改模型發Paper的機器。在我看來,很多地方都能讓人眼前一亮,之前在計算機圖形學這門課中也有瞭解到 Color Sketching 這個領域的探索,如有一個師兄進行的研究是給草圖上色。

在這篇文章裏,作者製作了一個繪畫協助系統——ColorSketch,用來協助畫家將真實圖像轉化爲 Color Sketching 風格的圖片。

在這裏插入圖片描述

ColorSketch 包含兩個階段:

  1. Offline Preprocessing
  2. Online Interactive Drawing

Preprocessing

在這個階段中,ColorSketch 使用輪廓檢測和分層圖像分割技術來協助畫家生成不同物體(區域)的邊界。這一步大家可能都能想到用圖像分割來做,這裏使用的是 Contour Detection and Hierarchical Image Segmentation 這篇文章裏的算法。其中的一個亮點就是 Hierarchical 的思想:

在這裏插入圖片描述

因爲對圖像分割沒有很多瞭解,同時它也不是這篇文章的重點,這裏也就不詳細講解這個算法。如果對圖像分割感興趣,可以看看下面一些相關鏈接:

Interactive drawing

在這個階段中,ColorSketch 給畫家提供了更多的自由,如可以自定義輪廓,增加空白區域等。這裏有幾個值得一提的算法。

Region Boundary Smoothing

對於新手說,繪製一條線段或者虛線總會出現不夠平滑的效果,爲了讓新手繪製的區域邊界也能跟專業畫家繪製的一樣平滑,ColorSketch 使用高斯濾波器來實現平滑效果,但它需要鄰域像素來協助工作,作者發現這些邊界很大一部分是被多個區域共享的,這樣高斯濾波器的效果很大程度依賴於邊界的區域關係。爲了減少這個不確定性,作者在進行這個步驟前,先將各個區域按照面積大小進行排序,這樣的話每個區域只需要光滑其未處理過的邊界。

Color Stylization

這個部分是我最喜歡的之一,另一個是下面將要提到的 Brush Stroke Placement and Rendering。通常在將真實世界圖像轉化爲 color sketching 風格圖像時,顏色是非常重要的。作者使用了機器學習的方法,採集了各個區域的像素顏色均值以及對應的畫家所使用的顏色作爲數據集,在 HSV 顏色空間裏,做一個仿射變換,變換矩陣MM使用線性迴歸訓練得到。記原來區域的顏色爲RR,對應的變化顏色爲R:R=MRR': R'=MR

爲什麼使用線性迴歸模型即可?

按照我對機器學習領域的理解,如果說數據間的關係通過一個簡單的規則就可以表示,那麼就沒有必要去複雜化。周志華的西瓜書中提到的 Occam’s Razor 原則就說明了這一點。

Occam’s razor (or Ockham’s razor) is a principle from philosophy. Suppose there exist two explanations for an occurrence. In this case the one that requires the least speculation is usually correct. Another way of saying it is that the more assumptions you have to make, the more unlikely an explanation.

顏色也無需做到過於精確,畢竟人眼對顏色細微的變化並不敏感。

同時,簡單也代表效率,以線性迴歸和隨機森林爲例,線性迴歸在有不俗的表現的同時,計算速度非常快,因爲就是一個矩陣乘法,如果將區域中的像素按列排成一個矩陣,那麼在GPU上運行極具效率。因爲這是個圖像化工具,在上計算機圖像學這門課時,我就體會到算法對GPU的友好度有多麼重要,因此線性模型在這個地方我覺得很加分。

Brush Stroke Placement and Rendering

在這個部分裏,作者提出了一個 Anisotropic vector quantization 的模型,它其實是一個聚類算法,目的是將區域分解成多個細長的 cell。這個模型實際上是將 K-means 算法的歐式距離替換成 Anisotropic Distance,定義爲:

在這裏插入圖片描述

其中P和C分別代表兩個像素,x,y,x,yx', y', x'', y'' 分別是P在C的局部座標系裏的座標和C在P的局部座標系裏的座標,h,hch, h_c分別是P和C的顏色。這樣說會有點抽象,但是也不用過度去解讀它,只需要理解成作者利用了像素的座標以及顏色來建模兩個像素的差異。

下面是使用 ColorSketch 的畫筆放置算法與隨機擺放的效果比較:
在這裏插入圖片描述

Blank Area Creation

爲了凸顯物體間的遮擋關係,作者還在區域的邊界和內部創建了空白區域,爲了實現這個部分。ColorSketch 預先計算了區域的深度圖(聽起來有點像計算機圖像學裏的概念)。對於區域邊界,首先記邊界的一部分爲S\partial S',定義一個標量函數 ff,其將 S\partial S' 中較大的值作一個光滑變換到 SS\partial S-\partial S' 裏較小的值。給定函數 ff 和一個閾值 τ\tau ,區域 SS 就能分割成兩部分,然後其中一部分留白。這裏作者使用了一個泊松方程來求解。

在這裏插入圖片描述

(因爲沒能理解這個地方是怎麼求解的,所以如果有說錯的地方,歡迎糾正。)

一些淺陋見解

之前也說到我是第一次閱讀這類偏向應用的文章,但在這篇文章中,很多亮點(或者說靈感)真的十分驚豔。在一種站着說話不腰疼的姿態下,談談這個系統的優缺點:

  1. 在文章中作者也做了一些調查,發現這個系統確實能給繪畫新手帶來幫助,雖然我沒有使用過這個系統,如果它能夠上線,對於我們這種手殘黨來說真的是好消息。
  2. 對機器學習的使用恰到好處,這纔是機器學習該有的樣子,而不是濫用深度學習。說到這就想起了前些天看到的用深度學習預測餘震位置的 Nature 論文遭受了地震一般的猛烈質疑。吃瓜鏈接
  3. 在Preprocessing階段,ColorSketch 沒有深度學習相關的圖像分割模型,但是近些年來,基於FCN等網絡對於圖像語義分割的效果提升十分明顯,使用這些圖像分割技術是否能帶來更好的效果呢?

後續如果想在CV這個方向繼續下去的話,目前所學的這些機器學習算法是遠遠不夠的。例如一些經典的計算機視覺算法需要好好地去拜讀一下文章,同時數學建模能力有待加強,不然真的很多東西都看不懂,更做不來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章