• 沒有找到結果。

筆觸型態產生

在文檔中 繪圖筆觸控制因素之研究 (頁 16-0)

第三章 處理方法

3.3 筆觸型態產生

這邊所謂筆觸型態控制因素,在實作上指的就是雜訊圖的控制。在先前的相關研究 中,繪圖筆觸是利用原圖產生黑白兩色的 white noise 雜訊圖再經過 LIC 處裡來產生的

[4][5][6][8][9]。然而因為只輸出黑與白兩種亮度的雜訊點,因此這種雜訊圖產生的筆觸,

" addSource I N

I = ⋅ +

[-contrast, contrast]

addSource = 1,v = 0,然後contrast

0 3-3-2 addSource = 1

I [-1, 1] I’ 如此一來在I 0.5 |I’| < |Q|

產生較多的雜訊;相反的在I接近黑色或白色的時候,雜訊出現的機率就比較低。如果 要使用黑白white noise的時候,就將contrast和addSource都設為 0,v設為 1(圖 3-3-2左)

由於雜訊圖影響所產生的筆觸型態,因此對雜訊圖做處理後,所產生的筆觸也不一 樣。例如我們可以將這張雜訊圖做一般的模糊處理(例如高斯模糊)後,讓畫出來的筆 觸比本來更模糊、更大一點。

圖3-3-1 將原圖加上[-0.5, 0.5]之間的雜訊。原圖(左),雜訊圖(右)

圖 -3-2 用我們提出的方法產生的雜訊圖。white noise(左),低對比雜訊(右)

3.

先前使用 產生筆觸效果的研究當中,都是使用一張向量圖作為筆觸方向的依 3

4 筆觸方向之決定

LIC

據。不過每一篇所使用的向量圖的產生方式以及結果不盡相同,有些使用的是區塊幾何

圖3-4-1 使用梯度作為筆觸方向的範例。左邊為原圖,前景的數字 10 使用輻射狀的 運算子(operator)置換成

[ ]

其中 r 代表梯度計算所涉及的範圍,值越大所產生的梯度圖越平滑。把這兩個運算 子對每個像素作一次運算,就可以產生對 x 方向和 y 方向都較為平滑的梯度圖,比較適 合我們的應用,而且速度上也比較不會因為大的核心而變慢很多。雖然這種梯度計算在 非垂直與水平方向上並沒有做到處理,但是經過實驗確定不會影響到我們產生的結果。

利用這種方法產生的筆觸方向較為圓滑,但是仍然能保有邊緣梯度變化較大的特性,因 此在繪製筆觸時邊界和非邊界的部分可以分的很清楚。使用梯度轉為方向的時候要注 意,當梯度為 0 的時候,是沒有辦法計算出方向的。因此要設定一個忍受值(threshold), 當梯度小於此值的時候則使用指定的方向。圖 3-4-2 即為使用以上介紹的梯度計算所產 生的向量方向圖。

圖3-4-2 由平滑梯度圖產生的方向向量圖。右圖為原圖,左圖為方向向量圖。

以上產生的筆觸方向雖然比起過去的方式要來的自然,然而卻沒有辦法產生適合鉛 筆素描的筆觸方向。這是因為我們一般看到的鉛筆素描,都會以一個區塊一個區塊的平 行筆觸作畫,而不會繞著物體的方向轉。因此之前這方面的研究[4][5][6][8][9]才會以各 種切割區塊的方式來讓每個區塊能夠有固定方向的筆觸。

我們希望找到一種方向參考圖,不需要做任何影像區塊分割的處理,從原圖的畫面 就可以找到資訊來決定筆觸方向(就像梯度圖一樣),而且不用手動或是隨機的方式給

予方向,特別是希望鄰近相關部份的筆觸方向能夠相似,以保持畫面的連續性。我們設 計出了兩種產生筆觸方向的方法:第一種是利用色調(hue)對應到 0° ~ 180°之間的角

值傳入筆觸產生的函數;第二種則是將原圖的亮度值對應到 0° ~ 180°之間的角度值,

並且讓方向性模糊的函式改傳入這個角度值作為筆觸方向。

我們這邊建議使用亮度值轉換的角度圖(亮度角度圖),此種方法不但非常簡單,

而且產生的筆觸在對比強的地方可以看到筆觸方向有明顯的不同,對比弱的地方筆觸方 向又會有連續性,而且即使是黑白的圖片也可以產生筆觸方向。在產生亮度角度圖之前 建議先將原圖稍做模糊,以免原圖的雜訊引發過多的筆觸方向;另外也建議把角度圖經 過量化(quantization)處理,讓各方向筆觸之間的轉換不要太過圓滑。量化之後產生的 效果會類似人類作畫時,將不同部分作區塊性處理的作法。圖 3-4-3 為亮度角度圖所決 定的筆觸方向。圖 3-4-4 顯示利用平滑梯度圖和亮度角度圖產生決定的筆觸方向所產生 度

的不同筆觸效果。

圖3-4-3 利用圖 3-4-2的左圖亮度值轉換為量化過的角度方向

圖 兩種筆觸方向的比較。左邊為原圖,中間是使用平滑的梯度決定筆觸方向,

bilateral filter[11]的效應,可以保留邊界,而讓非邊界的部份做模糊的處理 圖 3-5-1

DDA

DDA

這條取樣線很可能經過了輪廓或是區塊交界的部份,這個時候我們就讓這個方向的取樣

到此結束。這個方法能夠避免對比分明的部份會在邊界部分產生不正確的結果(圖 3-5-2)。

第二方面是利用描繪輪廓線來提高畫面的精緻程度。要描繪輪廓就要涉及到兩個部 份:輪廓偵測和輪廓繪製。輪廓偵測及繪製有非常多種方式,我們挑出幾個主要的類別 來實驗,difference of Gaussian(DoG)[11]、surround on/ center off [8][9]以及梯度計算 [6][10]三大類。這些方法都可以找出輪廓線,但是效果以及效率都不同,在第四章會比

其中 Idrawing是輸出的繪圖筆觸圖,Istroke代表筆觸圖,Iedge表示輪廓圖,brightness 為 0

到 1 之間的小數,越高則輪廓越不明顯。

(I brightness Clamp

I

Idrawing = stroke× edge

圖3-5-1 利用梯度方向作 LIC 產生不破壞邊界的模糊效果。左圖為加上雜訊的原 圖,右圖為左圖經過梯度方向的 LIC 處理後的結果。

圖3-5-2 改良 DDA 破壞邊界的問題。左圖為一張卡通圖片的部分經過傳統 DDA 的 結果,右圖為避免輪廓破壞的結果。眼睛和嘴巴的部份有很大的改進。

圖3-5-3 輪廓加強。左圖為單純的筆觸圖,中間為 DoG 計算出的輪廓圖,右圖為筆 觸圖乘上輪廓圖的結果。

3.6 彩色影像之處理

' Isource Idrawing

I = − − ⋅ −

以上式子代表原圖 Isource和 3.2 節提到的改良式方向性模糊產生的繪圖筆觸圖 Idrawing 合成為 I’。產生的結果會在筆觸最深的地方變成原圖的色調,而筆觸越淡就會比原圖的 更亮一點,到沒有筆觸的部份就變成白色(如圖 3-7-1)。可以利用這種合成方法將原本 產生的墨筆畫變成類似彩色鉛筆畫出來的圖。以上介紹的合成方法在商業軟體

Photoshop 的操作介面稱為 screen。

圖3-6-1 繪圖筆觸結果與原圖合成。左上為原圖,右上為原圖使用改良式方法產生 的繪圖筆觸結果,下圖是上面兩張圖經過合成以後的結果。

3.7 即時影像

為了能夠將這套系統運用在更多地方,我們嘗試將這套產生繪圖筆觸的方法應用在 影像捕捉裝置或是影片資料上面。為了能夠得到更佳的運算效率,因此我們把許多的模 組簡化,並且把整個程式寫成著色器語言(shading language),讓計算的部分給顯示卡 來負責。

我們在即時影像的處理上面仍然是上面所提的四個步驟:方向、雜訊、筆觸和輪廓,

只是省略了幾個處理細節的步驟。例如筆觸的部分僅使用單純 DDA 的演算法,輪廓則 調整文獻[10]所提出的的方法來產生,以較快速的演算法來產生繪圖效果。

實作上面我們僅輸入原圖和一張與原圖等大的亂數圖。亂數圖每個像素的值都介於 0 和 1 之間,用來做每一個像素計算雜訊時所使用的亂數。著色器(shader)會對每一 個像素作計算,首先利用這個像素的梯度或是亮度求出一個方向,然後依照計算出來的 方向對這個像素作 DDA 的計算,其中 DDA 計算到的各像素都要用該位置上的亂數和 原圖的值去計算出加上雜訊的值,最後再將前面計算的結果乘上原圖用梯度計算出來的 輪廓線就能輸出具有繪圖筆觸的影像了。

如果每一個影格都輸入同樣的一張亂數圖,那麼所產生的筆觸就會具有連貫性,畫 面比較穩定。相反的如果想要每一個影格都差距大一點,每一個影格就要輸入不同的亂 數圖才行。如果顯示卡的硬體支援亂數產生的函式,就可以不需要另外輸入亂數圖。

這套方法會因為 DDA 所使用的筆觸長度而影響花費的時間,因此建議在可以產生 效果的前提下盡量使用短的筆觸。由於我們每一個畫面只需要輸入原圖就可以了,因此 用在圖片、影片、拍攝影像(如 web-cam、DV)甚至是 3D 圖學程式所產生的畫面都不 會有問題。

第四章 實驗結果

4.1 效能

我們利用以上介紹的方法實做了兩個程式,並且利用固定的函數配上不同的筆觸控 製輸入,做出各種繪圖效果。

第一個是以 C++實作,以 CPU 計算圖片、照片等單格的影像檔案的程式。第二套 則是以 OGSL(OpenGL Shading Language)或是 HLSL(High Level Shading Language)

實作成可以用影像裝置或是影片檔案當作輸入,經由顯示卡著色器(shader)計算的程 式。

我們在 Pentium 4 2.8GHz, 512MB RAM 搭配 NVIDIA GeForce 6200 的電腦上測試這 兩個版本,並以筆觸長度 5 和 13 個像素來做計算速度的測試。當使用 CPU 版本時,輸 入 1024×768 的影像,筆觸長度 5 個像素的平均花費時間約 2.8 秒以下,筆觸長度 13 個 像素的約 4 秒以下。輸入 640×480 的影像,5 像素的筆觸花約 1 秒的時間完成,13 個像 素的筆觸可以在 1.7 秒以下完成。輸入 320×240 的影像,5 像素筆觸在 0.25 秒以內完成,

13 像素在 0.4 秒以內完成。

而以 GPU (graphical processing unit)版本測試時,以影像大小為 320x240 的網路 攝影機做為輸入,筆觸長度 13 和 5 個像素的都可以跑到 13 FPS(frame per second)左 右,相當於一張花費 0.08 秒。

4.2 效果比較

以下對於 DDA 或 LIC 中核心線的長度、雜訊圖對比強度、筆觸向量圖之變化,對 筆觸效果之影響以三小節介紹,並且接著敘述筆觸粗細以及輪廓加強的實驗觀察心得。

4.2.1 筆觸長度的影響

我們對雜訊圖去做方向性模糊來產生筆觸,這時我們必須給予兩個輸入,一個是方 向,第二個則是模糊的長度。之前的研究都沒有特別提到什麼樣的長度會產生什麼樣的 效果,這是因為這些方法都對於一個塊面作相同或類似方向的方向性模糊,因此長度的

我們對雜訊圖去做方向性模糊來產生筆觸,這時我們必須給予兩個輸入,一個是方 向,第二個則是模糊的長度。之前的研究都沒有特別提到什麼樣的長度會產生什麼樣的 效果,這是因為這些方法都對於一個塊面作相同或類似方向的方向性模糊,因此長度的

在文檔中 繪圖筆觸控制因素之研究 (頁 16-0)

相關文件