讀書筆記——Painterly Rendering with Curved Brush Strokes of Multiple Sizes

最近對非現(xiàn)實圖像處理感興趣。

在網(wǎng)上翻翻表悬,發(fā)現(xiàn)了這篇挺有意思的論文——《Painterly Rendering with Curved Brush Strokes of Multiple Sizes》丧靡,作者Aaron Hertzmann。

這篇論文主要描述了一種用計算機(jī)模仿人類畫油畫的算法饭庞。該算法用不同尺寸的筆刷以不同的精細(xì)程度熬荆,從粗到細(xì),層層疊加卤恳,最終完成繪畫突琳。

算法過程就是用從大到小的筆刷半徑循環(huán)調(diào)用paint()函數(shù)

for Ri in R[1:n]; paint(sourceImage,Ri); end;

函數(shù)paint

paint函數(shù):以某種半徑的筆刷在畫布上放置筆劃。

算法的偽代碼

paint

輸入:sourceImage表示原圖,Ri表示主巍,從大到小孕索,不同的筆刷半徑 1..n。

輸出:canvas表示畫布搞旭。

1. 先使用一個初始顏色鋪滿畫布菇绵,為了讓筆刷能夠覆蓋整個畫布咬最。因此這個顏色值需要設(shè)成一個和圖像中所有顏色都足夠差異的特殊值MAXINT欠动。

2. 先以筆刷半徑乘以一個常參數(shù)fσ 為標(biāo)準(zhǔn)差fσ Ri,產(chǎn)生高斯濾波器核具伍,然后用原圖卷積高斯濾波器人芽,生成參考圖像referenceImage。也就是說萤厅,對原圖高斯模糊操作后生成參考圖像referenceImage祈坠。

3. paintLayer() 在參考圖像referenceImage與畫布canvas有差異的地方,以筆刷半徑Ri畫上筆劃stroke赦拘。

函數(shù)paintLayer

paintLayer:循環(huán)遍歷畫布,在參考圖像referenceImage與畫布canvas有顏色差異的網(wǎng)格點【11】阁猜,以筆刷半徑R畫上筆劃stroke蹋艺。

算法的偽代碼

paintLayer


輸入:參考圖像referenceImage捎谨,筆刷半徑R

輸出:畫布canvas

1. 初始化一個空筆劃集合S,用存儲生成的筆劃畏邢。

2.由difference函數(shù)检吆,計算畫布canvas與參考圖像referenceImage的每個點的“顏色距離”。

|(r1,g1,b1)-(r2,g2,b2)|=((r1-r2)^2+(g1-g2)^2+(b1-b2)^2)^1/2

產(chǎn)生差異矩陣D臂寝。

D=abs(referenceImage-canvas)

為了讓筆刷能夠覆蓋整個畫布,畫布在初始狀態(tài)時需要設(shè)一個和圖像中所有顏色都足夠差異的特殊值MAXINT咆贬。

3.設(shè)置網(wǎng)格的長度 grid=fg x R 素征,網(wǎng)格是正方形

4.以網(wǎng)格長度為步長遍歷差異矩陣D,計算網(wǎng)格點(x,y)領(lǐng)域M(x,y)的平均顏色距離誤差areaError(x,y)御毅。

areaError(x, y) =∑ i, j∈M(x, y) Di, j/ grid^2

M(x, y)= D(x-grid/2:x+grid/2, y-grid/2:y+grid/2)

5.如果平均顏色距離誤差areaError(x,y)大于閾值T端蛆,則在領(lǐng)域M(x,y)的范圍內(nèi)顏色距離最大的點(x1,y1)上,以筆刷半徑R生成筆劃 makeStroke(R, x1, y1, referenceImage)今豆。

6.當(dāng)畫布的所有筆劃生成完畢后呆躲,以隨機(jī)順序渲染到畫布canvas上。

上述第5步中的生成筆劃方法可以有不同的實現(xiàn)方式插掂,可以簡單地在(x,y)以筆刷半徑R畫圓點酝润,也可以沿圖像顏色距離梯度的法線方向畫線條璃弄。

我們通過 “在具有更多細(xì)節(jié)(高頻信息)的圖像區(qū)域上使用更小半徑的筆刷,在具有少量細(xì)節(jié)的區(qū)域只使用大半徑筆刷” 的方法實現(xiàn)聚焦細(xì)節(jié)的目標(biāo)疏咐。通過這種方法可以選擇不同的筆刷半徑適配源圖像中不同的細(xì)節(jié)等級脐供。這種選擇背后的原因是因為在通常情況下細(xì)節(jié)區(qū)域包含更重要的視覺信息。當(dāng)然也可以有別的選擇,比如強(qiáng)調(diào)前景物體或者人物匹颤,但這樣一來就需要對圖像進(jìn)行語義分析。圖像語義分析是機(jī)器視覺領(lǐng)域一個非常困難的問題印蓖。我們還可以把選擇操作交給用戶完成【16】赦肃。

產(chǎn)生弧形筆劃

我們以反鋸齒三次B樣條曲線為筆劃建模,每個B樣條包括顏色和厚度(透明度)他宛,然后通過圓形筆刷掩膜沿著曲線軌跡渲染筆劃厅各。

在我們的系統(tǒng)中,我們約定每一筆筆刷筆劃使用不變的顏色队塘,并且使用圖像梯度的方向放置筆劃憔古。其他作者也使用這個概念【11,8鸿市,18】放置筆劃。通過不變的顏色可以描出圖像的大致輪廓涝桅。我們的方法是沿著圖像梯度法線方向放置B樣條曲線的控制點烙样。當(dāng)筆劃顏色偏離曲線控制點下的顏色超過具體的閾值時筆劃在那個控制點結(jié)束谒获。可以認(rèn)為這是使樣條曲線和參考圖像的等值線大致匹配批狱。

下面更具體地解釋一下這個樣條放置算法。

我們使用一個控制點列表炒俱、一個顏色和一個筆刷半徑共同表示一個筆劃。

1. 這個算法始于圖像中(x0砸王,y0)峦阁,筆刷半徑R。將控制點(x0驹闰,y0)加入列表撒会,并且參考圖像在(x0,y0)點的顏色設(shè)置為這個筆劃的顏色骡显。

2. 接下來我們需要計算出曲線上的下一個控制點曾掂。

首先計算參考圖像的亮度。亮度計算公式:

L(r,g,b) = 0.30r + 0.59g + 0.11b

對參考圖像的亮度值進(jìn)行索貝爾濾波(Sobel-filtered luminance)

然后計算控制點(x0溜歪,y0)的梯度方向角

θ0=arctan(Gx0/Gy0)

因為筆劃是沿著梯度的法線方向(顏色在梯度的法線方向變化最行肀汀),所以需要加上π/2自阱。

θ0+π/2

從(x0米酬,y0)點沿方向角(θ0+π/2)距離筆刷半徑R,放置下一個控制點(x1加派,y1)跳芳。

使用筆刷半徑R作為兩個控制點間的距離是因為R代表著我們能用筆刷捕捉的細(xì)節(jié)等級。先用大筆刷創(chuàng)建圖像的概貌娄琉,后續(xù)再用小筆刷精雕細(xì)刻。

3.重復(fù)步驟2計算剩余的控制點檬输。整個過程沿著圖像梯度法線方向放置控制點匈棘,直到碰到如下兩種情況后結(jié)束析命。

a)達(dá)到最大的預(yù)定義筆劃長度。

最大筆劃長度是為了防止出現(xiàn)無限循環(huán)簇搅。

b)參考圖像中最后一個控制點位置的顏色與筆劃的顏色之差软吐,大于參考圖像中最后一個控制點位置的顏色與畫布上現(xiàn)有顏色的色差凹耙。

筆劃的顏色即(x0,y0)點的參考圖像顏色肖抱∫馐觯控制點的顏色即控制點所在位置的參考圖像顏色,畫布上現(xiàn)有顏色即畫布上控制點位置的顏色荤崇。

另外需要注意术荤,實際上存在兩個法線方向,所以下個控制點有兩個方向可以選擇务唐,θi+π/2和θi-π/2带兜。為了筆劃曲率的最小化,我們選擇小于π/2的方向角Di刑巧。

我們還可以在筆刷方向上使用一個無限沖擊響應(yīng)濾波器,這樣可以夸大或者減少筆刷的曲率吠冤。使用一個預(yù)定義的常量系數(shù)fc來控制這個濾波器恭理。

設(shè)上一個筆劃控制點方向 ?

D’i-1=(dx’i-1, dy’i-1)

當(dāng)前筆劃控制點方向 ?

Di= (dxi,dyi)

則 濾波后的筆劃控制點方向 ?

D’i= fc Di+ ( 1- fc )D’i-1= ( fc dxi+ (1- fc )dx’i-1, fc dyi+ (1- fc ) dy’i-1)

算法的偽代碼

makeSplineStroke

輸入: 筆劃的起始點位置 (x0颜价,y0),筆刷半徑R周伦,參考圖像

輸出:筆劃樣條曲線控制點列表

其中最小筆刷長度是為了防止出現(xiàn)非常短的筆劃引起斑點現(xiàn)象专挪。

渲染曲線筆劃

先用細(xì)分方法(subdivision)計算樣條曲線,然后用一個反鋸齒圓形掩膜沿著曲線路徑繪制速侈。

渲染風(fēng)格

為了量化表征繪畫風(fēng)格脆侮,建議使用風(fēng)格參數(shù)控制渲染過程。

在上述算法中用到的一些參數(shù):

近似閾值 T —— 值越大產(chǎn)生的圖像越粗糙潭枣。

筆刷尺寸 —— 除了定義筆刷列表 (R1:Rn)之外幻捏,還可以定義 最小筆刷R1、筆刷尺寸變化律Ri+1/Ri谐岁,筆刷數(shù)n榛臼。

曲率濾波器系數(shù) fc ——用于控制筆劃曲率

模糊因子 fσ —— 控制模糊核的尺寸

最小和最大筆劃長度 minLength、maxLength ——以控制點個數(shù)為單位

不透明度α——設(shè)置繪畫的不透明度航揉,范圍0-1 之間

網(wǎng)格尺寸 fg——控制筆劃之間的空隙

顏色抖動 系數(shù) —— jh金刁,js议薪,jv或者jr斯议,jg醇锚,jb表示在 H,S艇搀,V 或者 R求晶,G衷笋,B 分量中加入隨機(jī)抖動

0表示沒有抖動辟宗。

不同的系統(tǒng)設(shè)置形成不同的風(fēng)格

印象派——正常的畫風(fēng)。無曲率濾波泊脐,無隨機(jī)色

T= 100,R=(8,4,2),fc=1,fs=.5, a=1,fg=1, minLength=4, maxLength=16

表現(xiàn)派——細(xì)長的筆劃容客,加上顏色抖動。

T= 50,R=(8,4,2),fc=.25,fs=.5, a=.7,fg=1, minLength=10, maxLength=16,jv=.5

水彩——松散但两、半透明的筆劃供置,隨機(jī)抖動

T= 200,R=(8,4,2),fc=1,fs=.5, a=.5,fg=1, minLength=4, maxLength=16,jr=jg=jb=.3

點點——以隨機(jī)色調(diào)和飽和度密集畫圓點

T= 100,R=(4,2),fc=1,fs=.5, a=1,fg=.5, minLength=0, maxLength=0,jv=1,jh=.3.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芥丧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子擅耽,更是在濱河造成了極大的恐慌赤拒,老刑警劉巖诱鞠,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件航夺,死亡現(xiàn)場離奇詭異崔涂,居然都是意外死亡冷蚂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門艺骂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隆夯,“玉大人,你說我怎么就攤上這事忧额±⒖冢” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恬涧。 經(jīng)常有香客問我溯捆,道長,這世上最難降的妖魔是什么提揍? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任劳跃,我火速辦了婚禮,結(jié)果婚禮上郑诺,老公的妹妹穿的比我還像新娘。我一直安慰自己辙售,他們只是感情好飞涂,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布较店。 她就那樣靜靜地躺著,像睡著了一般婚度。 火紅的嫁衣襯著肌膚如雪官卡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天灰粮,我揣著相機(jī)與錄音,去河邊找鬼粘舟。 笑死柑肴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晰骑。 我是一名探鬼主播硕舆,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扬跋!你這毒婦竟也來了凌节?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤垒棋,失蹤者是張志新(化名)和其女友劉穎余指,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碉碉,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡垢粮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年靠粪,在試婚紗的時候發(fā)現(xiàn)自己被綠了占键。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡君仆,死狀恐怖牲距,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咖摹,我是刑警寧澤难述,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布胁后,位于F島的核電站,受9級特大地震影響两入,放射性物質(zhì)發(fā)生泄漏敲才。R本人自食惡果不足惜择葡,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一敏储、第九天 我趴在偏房一處隱蔽的房頂上張望朋鞍。 院中可真熱鬧,春花似錦更舞、人聲如沸坎吻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘦真。三九已至刊头,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诸尽,已是汗流浹背原杂。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留您机,地道東北人污尉。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像往产,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子某宪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容