在處理輪廓(Contour)的部分,我們使用 DoG Edge Detection 與 Canny Edge Detection 的演算法來處理影像,其目的與結果各不相同。
首先對於物體的輪廓邊緣(Silhouette Edge),我們使用 DoG Edge Detection 演算法,尋找影像中較明顯的外圍輪廓,主要用來幫助我們加 強最後結果圖的輪廓部分,其結果如圖 3-6 所示,所造成的影響將於第 四章中作說明。
接著對於物體的皺痕邊緣(Crease Edge),我們使用 Canny Edge Detection 演算法,尋找影像中強度變化量較大的部分。其目的是用來幫 助我們作區塊劃分時,也能夠同時考量皺痕邊緣所造成的影響,使得劃 分的區塊能夠更正確,其結果如圖 3-7 所示 。
圖 3-7:Canny Edge Detection 輪廓圖
如圖 3-8 所示,若未使用 Canny Edge Detection 來輔助劃分區塊,
則左圖中紅色區域的劃分方式,將會如中間圖所示,將它劃分成同一個 區塊,但若加上 Canny Edge Detection 則結果如右圖。
圖 3-8:皺痕邊緣與區塊劃分的結果圖
3.5 筆觸
在此節中,我們將討論筆觸的模擬方式。首先我們先考慮,人類徒 手繪製物體時,筆觸會有的一些特性:
(1). 濃淡的差異:
筆觸的濃淡與鉛筆及繪圖時下筆的力道有關,一般鉛筆的硬度 從硬到軟,分別為 9H、8H、…、H、F、HB、B、2B、…、9B;越 硬顏色越淺,越軟顏色越黑,一般繪圖時只需要 4H~6B 即可。當 鉛筆對紙面施加不同的壓力時,會影響顏色的深淺變化。通常在作 畫時會隨著光影的變化方向而施加不同的壓力。一般剛下筆時會施 加較大的壓力,進而依序遞減;且對於施力重心位置的差異性,也 會造成顏色的改變。
(2). 線條的粗細:
隨著對鉛筆的削法與握法的不相同,將造成筆尖與紙張接觸時 的作用面積也會有所差異,進而使得筆觸會有粗細的分別。
(3). 筆觸抖動不規則性:
通常在徒手繪圖時,多多少少都會產生一些因抖動所導致的誤 差,且會有隨著手繪長度增加而對筆觸既定方向的偏移量也就越大
(4). 筆觸的長度:
隨著面積大小或是角度變化等等的因素,每一筆的筆觸長度也 會有所區別。
茲就鉛筆手繪線段的濃淡分佈變化及線段局部抖動與大域偏移現 象分別以圖示意說明如下。
(1). 局部與大域濃淡分佈:
圖 3-9:筆觸線段示意圖
沿著線段手繪方向,其濃淡分佈IL(l)可由圖 3-10 描述,大域分 佈由起點至終點由濃轉淡,中間可伴有局部起伏。
圖 3-10:沿線段手繪方向之濃淡分佈常態圖
沿著線段寬度方向之濃度則應隨著與手繪壓力重心線的距離 之增加由濃轉淡,如圖 3-11 所示。
圖 3-11:手繪線段沿寬度方向之濃淡分佈常態圖
(2). 局部抖動與大域偏移現象:
由線段起點揮筆繪向終點時,隨著手繪長度的增加,手繪軌跡 有逐漸偏離既定方向的趨勢,產生所謂大域偏移的現象(圖 3-12 中 細的虛線軌跡與粗的虛線軌跡的差異),其中並伴有局部抖動筆觸 (圖 3-12 中鋸齒實線所示)。
圖 3-12:手繪線段全域偏移與局部抖動現象
基於要模擬上述的四種特性,我們將筆觸模型設計如下,首先我們 先分別對每一個參數作說明:
(1). 顏色與寬度:Stroke( I , W)
I (Intensity):顏色,用來表示鉛筆的類型,從 9H~9B
W(Width):寬度,用來表示線條的粗細程度,W ∈ {0,1,2, … ,7}
令 W0、W1、W2、W3分別為筆觸線段上的四點線段寬度值,W(x, y) 是由 W0 ~ W3 ∈ [0,7]內插所計算出的 Cubic Spline 三次方程曲線,
如圖 3-13 所示。
圖 3-13:筆觸寬度函數圖
圖 3-14 為顏色與寬度筆觸圖。
圖 3-14:顏色與寬度筆觸圖
(2). 壓力的影響:Stroke( I , W , IL, Iw) IL(Pressure):壓力函數,0 ≦ IL(∗) ≦ 1
令 I0,I1,I2,I3分別為筆觸線段上的四點壓力值,IL(x, y)是由 I0
~I3 ∈ [0,1]內插所計算出的 Cubic Spline 三次方程曲線,如圖 3-15 所示。
圖 3-15:筆觸壓力函數圖
Iw(Pressure distribution):重心分佈函數,0 ≦ Iw(∗) ≦ 1
Iw(x, y) = 1 − (α × w),α ∈ [0,1]表示衰減量、w表示離重心位置 的距離,如圖 3-16 所示。
ILw x, y = I x, y × IL x, y × Iw x, y ,I x, y 為原圖亮度值,圖 3-17 為壓力對於顏色影響筆觸圖。
圖 3-17:壓力對於顏色影響筆觸圖
(3). 筆觸抖動不規則性:Stroke( I , W , J , R ) J(Jitter):週期性的小範圍抖動誤差
J(x,y) = a × sin t + b,a、b ∈ [0,1] 為隨機產生的亂數
PJ x, y = P x, y + J(x, y),圖 3-18 為小範圍抖動筆觸圖。
圖 3-18:小範圍抖動筆觸圖
R(Randomness):亂度,影響線段大域偏移量的程度,模擬較大的 誤差
PR(x,y) = R(Ps(x,y),C1(x,y),C2(x,y),Pe(x,y)) 內插所計算出的 Cubic Spline 三次方程曲線,其中 Ps(x,y)、Pe(x,y)表示線段的起點與終點,
C1(x,y)、C2(x,y)則是隨機產生的兩個控制點,如圖 3-19 所示。
圖 3-19:亂度函數圖
PRJ(x,y) = PR(x,y) +J(x,y) ,圖 3-20 為大範圍誤差筆觸圖。
圖 3-20:大範圍誤差筆觸圖 (4). 筆觸的長度:Stroke( I , W , Pr , L )
L (Length):長度,用來表示筆觸的長短
圖 3-21:相異長度筆觸圖
所以完整的筆觸模型由 Stroke( I , W , Pr , Pd , J , R , L )所組成,圖 3-22 為完整筆觸模型所模擬的筆觸範例呈現。
3.6 繪圖
在上一節中,我們說明了每一線段筆觸的模擬方式,在這一節中,
我們將應用上面所提的方法去繪製整個區塊的素描筆跡。在此必須考量 的因素包含繪製的方式、線段與線段之間的間隔大小以及線段的角度。
以下我們分別針對這幾點加以說明。
(1). 繪製的方式:
在此我們使用了兩種繪製的方式,分別是連續的細線(Hatching) 以及交叉連續的細線(Cross-Hatching),圖 3-23 為模擬連續線段的 筆觸圖。
Hatching Cross-Hatching 圖 3-23:連續線段筆觸圖
(2). 線段與線段之間的間隔大小:
隨著線段與線段之間的間隔大小不同,整體的視覺效果也將會 有所差異。一般我們是將區塊面積較大的區域,間隔設定較大,反 之則較小;顏色較淺的區域,間隔設定較大,反之則較小,圖3-24 為不同的間隔大小所產生的各種筆觸圖。
圖 3-24:不同間隔大小的連續線段筆觸圖
(3). 線段的長度:
線段長度變化對視覺效應所造成的影響甚鉅,圖3-25 為三種 不同長度所產生的各種筆觸圖,一般我們是將區塊面積較大的區域 設定較長的筆觸,而影像中相對較細膩的部分則使用較短的筆觸。
圖 3-25:不同長度的連續線段筆觸圖
(4). 線段的角度:
決定線段在區塊中的角度,如果是從區塊中的每一個像素去計 算,這將會是一件相當繁瑣的工作,所以在此我們使用了更簡單的 方法,先找出包圍此區塊的最小矩形,然後計算此矩形對角線與底 邊的夾角,此夾角當作是線段在此區塊中的角度,如圖3-26 所示。
雖然這個方法相當的容易,但產生的效果卻也令人滿意。
圖 3-26:線段的角度圖