復現個有趣的算法:鉛筆素描畫自動生成

2021-03-02 Python與算法社區

paper(在相關文件裡提供了)是:

Combining Sketch and Tone for Pencil Drawing Production

這裡主要介紹一下paper提出的鉛筆素描畫生成算法步驟,其他諸如相關工作之類的就不介紹了。而且這裡我假設想了解該算法原理的小夥伴是掌握圖像處理基礎知識的。

先放算法框架,然後再慢慢說:

該基於圖像的鉛筆素描畫生成算法主要分為兩個步驟:

前者的目標為表示圖像場景的一般結構(主要是繪製一些線條),後者則更專注於圖像內物體的形狀和產生的陰影等內容。下面分別詳細地介紹一下這兩個步驟。

1.pencil stroke generation

這個步驟的目標主要是通過一些線條來表示圖像場景的一般結構(也就是輪廓圖)。首先假設我們有輸入灰度圖I,於是我們可以獲得圖像的梯度圖G:

但顯然計算圖像梯度是很容易受到噪聲幹擾的,因此這樣生成的圖像輪廓圖效果肯定不好。為了得到更加穩定的結果,作者首先對G進行8個方向的卷積(例如0,22.5,...,157.5):

每個方向的卷積核為沿著該方向的值為1,其他方向的值為0。當然,實際應用中,考慮抗鋸齒問題,卷積核可以通過雙線性插值得到(類似於指定角度的運動模糊處理)。同時,在論文中,作者根據經驗認為卷積核大小一般取原圖大小的1/30。

得到各個方向的卷積結果後,對每個像素點,我們都有8個卷積響應值,每個響應值對應一個方向。由此,我們可以得到每個方向的卷積響應圖,其定義為(註:原文中給的公式是錯的,顯然是筆誤了):

這裡p代表像素點,G為之前獲得的圖像梯度圖。對得到的每個方向的卷積響應圖再次進行方向卷積:

然後對得到的S'進行像素值反轉和映射到[0, 1]操作就可以得到最終的圖像輪廓圖S了。作者畫了個圖更加形象直觀地說明了上述處理過程:

以及與直接使用G來生成圖像輪廓圖的對比:

2.pencil tone drawing

OK,接下來我們來介紹該算法的第二部分,也就是色調渲染,該部分主要包括以下兩個步驟:

(1)直方圖匹配

作者通過對真實的鉛筆素描畫的觀察發現,鉛筆畫的色調可以由三部分組成,如下圖所示:

可以看出,陰影部分很適合用正態分布來擬合,中間調很適合用均勻分布來擬合,而高光部分則很適合用拉普拉斯分布來擬合。具體而言,對於高光部分,使用以下函數來模擬(因為作圖用的紙張一般是白色的,所以在接近色階255時分布曲線很陡峭。):

對於中間調,則使用以下函數來模擬:

對於陰影部分,則使用以下函數來模擬:

由此,我們可以得到最終的鉛筆畫色調概率分布公式:

即對高光,陰影和中間調進行加權求和(權重係數可以根據不同的需要進行調節)並利用歸一化因子Z以保證:

上述公式中,v均代表色調值,未知的參數均為控制參數,它們決定了鉛筆畫最終的色調直方圖。這些未知的參數可以使用最大似然估計來求得。具體而言,這些控制參數的計算公式為:

其中m和s分別代表各層(高光,中間調,陰影)像素值的均值和方差。接下來的工作就是對每層進行直方圖匹配(核心思想就是使輸出圖像具有規定的直方圖形狀。)並對他們進行重組。

假設該步驟最終輸出的圖像為J。

(2)紋理渲染

簡單而言,就是模擬人反覆用鉛筆描的過程(在人類繪圖時,一般會通過在相同位置重複繪製來實現紋理渲染)。作者使用筆畫的乘法來模擬這一過程,表示成公式是這樣的:

即使用H進行β次渲染來逼近J。顯然,β越大,圖像越黑:

同時我們要求β局部平滑,因此問題等價於求解:

作者取λ為0.2。因此上述方程可以轉換為標準的線性方程並使用共軛梯度求解。於是我們獲得最終的鉛筆畫紋理圖為:

補充一下,H其實就是一張預先選好的真實場景下的鉛筆畫紋理圖,代表繪畫模式,網上可以找到很多,例如:

3.Overall Framework

通過前面兩個步驟,我們分別獲得圖像輪廓圖S和色調紋理圖T。因此,我們可以獲得最終的結果圖R=S·T。由此,只要我們輸入灰度圖像I,便可以輕鬆地獲得鉛筆素描畫R了。

4.Color Pencil Drawing

該算法可以很輕鬆地擴展到彩色圖像上。具體而言,就是把彩色圖像從RGB空間轉到YUV空間,把Y單獨拿出來看作灰度圖像進行上述變換後獲得新的YUV空間,最後將新的YUV空間重新映射到RGB空間即可。

相關焦點

  • 使用Python復現SIGKDD2017的PAMAE算法(並行k-medoids算法)
    項目介紹PAMAE: Parallel k-Medoids Clustering with High Accuracy and Efficiency 是SIGKDD2017一篇關於k-medoids並行聚類的論文,論文中作者使用Spark與Hadoop實現算法的並行化,而本項目使用python並行編程模擬MapReduce的並行,對該論文算法的思想進行復現。
  • 素描畫的定義是什麼,對於素描畫,怎樣畫效果最好?
    素描的材料能用自動鉛來畫嗎?①有關素描是否要線稿的問題:小編覺得是不可以的,畢竟是素描的,用正規的炭筆或者是鉛筆吧。最好是一蹴而就,素描怎能打稿?可以看出,這位大佬是用的自動鉛。素描是指運用鉛筆或者炭筆之類的單色調黑色美術用筆對物體進行刻畫,運用線條將塊面鋪出,再進行黑白灰的刻畫。大家注意到這個"鋪出"了嗎?②怎樣畫素描畫:我覺得素描用自動鉛畫尤其是極細的自動鉛,有點不太尊重素描吧?那基本上等於在打線稿。
  • 用自動鉛筆創作繪畫,evgenikoroliov筆筆都是功力,太贊了
    作為一位來自韓國的藝術家,evgenikoroliov僅僅用自動鉛筆創作素描繪畫,給大家帶來了不一樣的感受。因為在evgenikoroliov的筆下,每一張作品都達到了爐火純青的地步,不僅給人細膩到骨頭的感覺,同時每一筆都是功力,非常吸引粉絲們的眼球。
  • 算法:平面圖自動生成
    ,期望可以啟發對CAAD感興趣的同學 平面圖生成(EFP)是一個實驗性的項目,研究平面的生成及優化的可能性。初始條件為各個房間關係及人流分布, 通過一個遺傳算法來優化生成平面圖,其優化的限制因素為步行時間和走廊的長度等。EFP項目只是從設定的優化條件來進行平面布局,而不去考慮傳統的布局要求及可建性等因素。EFP的目標是如何通過算法將顯性、隱性的限制條件結合起來,生成高複雜度的平面圖。EFP的平面圖是從它的遺傳編碼中「生長」出來,使用的算法是圖像收縮方法生成布局及蟻群算法生長走廊。
  • 用Keras復現DCN算法
    可是DCN算法並沒有keras的實現代碼,而我之前也沒有用過keras,導致用keras復現DCN算法耗費了我一周多的時間,不過經過了一周的折騰,也算基本熟悉了keras的使用。keras由於過於的強調易用性,以及受制於tensorflow等底層框架的機制影像導致開發簡單應用很容易但是如果做復現最新論文算法的定製開發就會比較困難,而pytorch就比較好的平衡了易用性以及拓展性,用pytorch來實現上述功能則比較簡單,這也是pytorch應用越來越受歡迎的原因吧。不過由於實驗室之前的代碼都是用keras寫的,這裡的DCN算法也要用keras來實現。
  • 這鉛筆素描畫,太牛了!
    初學繪畫的人一定要先學素描,素描畫得好的人,油畫自然畫得好。素描的起源,普遍都是以文藝復興開始,事實上希臘的瓶繪、雕塑都有良好的素描基礎。初期的素描是視為繪畫的底稿,例如作壁畫先要有構想的草稿,然後有素描的底稿,同時也要有手、臉部分精密素描圖。作壁畫習慣上是不看模特兒寫生的,完全要靠事先準備的習作素描和畫家的記憶。
  • 經典論文復現 | InfoGAN:一種無監督生成方法
    過去幾年發表於各大 AI 頂會論文提出的 400 多種算法中,公開算法代碼的僅佔 6%,其中三分之一的論文作者分享了測試數據,約 54% 的分享包含「偽代碼」。這是今年 AAAI 會議上一個嚴峻的報告。 人工智慧這個蓬勃發展的領域正面臨著實驗重現的危機,就像實驗重現問題過去十年來一直困擾著心理學、醫學以及其他領域一樣。
  • 風景素描畫教程:教你一步一步畫小木屋
    第一步認真觀察小木屋的外部輪廓,然後再使用HB鉛筆在紙上通過直線輕輕的把小房屋的邊線畫出來,同時要注意比較邊線之間的長度跟角度,另外屋頂的夾角是近似於直角。小木屋素描畫第三步由於光源是來自於右邊,因此可以把2B鉛筆削尖,然後再輕輕的把房屋左邊的暗面、門內和屋簷下的暗部、投影排上一層調子畫好,然後再加深屋簷跟屋內暗部。
  • word目錄怎麼自動生成? Word自動生成目錄流程詳解
    word目錄怎麼自動生成? Word自動生成目錄流程詳解時間:2018-04-12 10:41   來源:系統天堂   責任編輯:沫朵 川北在線核心提示:原標題:word目錄怎麼自動生成? Word自動生成目錄流程詳解 word目錄怎麼自動生成?這個目錄自動生成還是非常好用的!
  • 京東智能內容創作算法的演進與實踐:基於關鍵詞自動生成摘要
    來源 | 京東智聯雲開發者導讀:京東商城背後的 AI 技術能力揭秘: 基於關鍵詞自動生成摘要過去幾十年間,人類的計算能力獲得了巨大提升;隨著數據不斷積累,算法日益先進,我們已經步入了人工智慧時代。確實,人工智慧概念很難理解,技術更是了不起,背後的數據和算法非常龐大複雜。
  • 國產EDA的新機會_自動IP生成
    而在本文作者看來,國產EDA還有一個機會,那就是自動IP生成。   什麼是自動IP生成   隨著半導體行業的發展,SoC已經成為了晶片設計的最常見形式。在SoC中,通常都包括了多個半導體IP,之後在頂層把這些IP連接到一起組成完整的系統。   常規的IP設計過程費時費力。
  • 鉛筆自動售賣機--又一個很好玩的鉛筆盒
    昨天呀,我們給小朋友們帶去了一款鉛筆自動售賣機,有很多小朋友們反映非常好玩,自己以前散亂的鉛筆也都整齊的歸類了。嗯嗯,非常好,一個好的習慣的培養,對小朋友們今後的學習和生活都是很有幫助滴,加油呀!今天呢,我們又帶來一款鉛筆收納的玩具--第二個鉛筆自動售賣機請看是不是也是一款非常有趣的玩具呢?嗯嗯,那我們趕緊開始製作吧!
  • 檸檬素描畫教程:素描檸檬的畫法解析圖,教你輕鬆畫檸檬
    第一步先把檸檬的線稿圖給詳細的畫出來,在這裡是畫出一個整體的檸檬和一個切半的檸檬,所以在畫的時候,需要注意它的外部輪廓,尤其是切半的那半個檸檬,更加需要均勻的把每一片檸檬的形狀畫出來,因為光線的原因,還需要注意整幅畫的透視關係。
  • 阿里黑科技法庭上顯神通:機器自動提問、自動生成判決書
    令人驚訝的是,在庭審快結束時,屏幕上自動生成了一份判決書:判決被告向原告歸還借款本金20萬元,並支付原告逾期利息2152.22元,這是「小智」以未還借款本金為基數按照年利率自動計算得出的數額,準確無誤。法官宣布休庭,5分鐘後,當庭宣判,並將判決書發送原被告雙方。雙方遠程反饋收到。
  • NVIDIA新作解讀:用GAN生成前所未有的高清圖像(附PyTorch復現) | PaperDaily #15
    另外,我也在用 PyTorch 做復現。 在 PG-GAN 出來以前,訓練高解析度圖像生成的 GAN 方法主要就是 LAPGAN[2] 和 BEGAN[6]。後者主要是針對人臉的,生成的人臉逼真而不會是鬼臉。
  • 高顏值自動鉛筆,可以安排
    現在電子產品超多的,很多人有想法有創意的時候可能第一時間是用這些電子產品記錄下來,但以前的話就是寫下來或畫下來的,筆跟本子可能是很多人隨身攜帶的東西,其實現在用這種方式也沒有什麼不好,今天分享高顏值的自動鉛筆,放桌上超好好看。這款是晨光的自動鉛筆。自動鉛筆,以前用得挺多的,因為不用削,所以覺得還挺方便的。不過以前的自動鉛筆可沒有這麼有時尚感。
  • 動物素描教程:蜻蜓素描畫怎麼畫?一步一步教你畫翩翩起舞的蜻蜓
    在我很小的時候,就特別喜歡跟小夥伴們一起抓蜻蜓,因為它是能夠飛翔的,但是有時候可能因為要下雨,那麼它便會在低空中徘徊,而且數量也很多,這時就是抓它們的好機會,抓到了就會特別的開心,而今天露西帶各位一起來畫蜻蜓的素描畫。
  • CVE-2017-11882復現及防禦
    復現過程實驗環境:win7 + office2007 win xp + office20031、利用 msf 生成利用的 powershell 腳本在復現過程中,察覺到是使用 hta 進行命令執行利用,推測攻擊機作為 hta_server,然後嘗試在 msf 搜索 hta,發現一個模塊的實現效果跟 PS_shell 一樣,接下來開始演示一下:
  • 霓虹 | 日本人更喜歡自動鉛筆?
    不知道小夥伴們看日劇的時候有沒有注意到,日本人似乎在各種場合都很喜歡用自動鉛筆。在日本,上到公司職員,下至小學生,不管是做筆記,還是考試,自動鉛筆都是隨處可見。那麼日本人是否真的喜歡用自動鉛筆呢?或者還有沒有其他的觀點呢?今天就跟著助助一起了解一下吧!自帶潔癖屬性的日本人非常在乎筆記紙張的整潔美觀,自動鉛筆的印記易於被擦除,即使寫錯筆記也不會變得劣跡斑斑。
  • 自動鉛筆UNI三菱KURUTOGA可以在野外旋轉
    我給大家介紹一下UNI三菱KURUTOGA自動鉛筆。作者歡迎來到「撕生活」好事推薦專欄,大家好,我是小哲~我給大家介紹UNI三菱KURUTOGA自動鉛筆。他的奧秘位於筆頭的齒輪裝置中,每次按壓時,齒輪會自動旋轉,調整導線的摩擦角,使其保持圓形。整體採用塑料材質,手感較輕,但由於顏色的關係,視覺呈現出金屬感。把鋼筆末端的橡皮擦拿出來,你可以用鉛填充他,但全新的鉛筆也會有兩個鉛芯。