天天看點

基于總變差模型的紋理圖像中圖像主結構的提取方法。

本文描述了一種可以從紋理圖像中提取出圖像結構資訊的算法,算法具有很強的适應性。并且可擴充利用到邊緣檢測、圖像矢量化以及圖像融合方面。

  2019.12.16 日更正:本文最後有提及本算法不合适C語言實作,但是可在【算法随記六】一段Matlab版本的Total Variation(TV)去噪算法的C語言翻譯 一文中找到替代算法。

      本文主要由Structure Extraction from Texture via Relative Total Variation一文中的内容翻譯而來,作者又是香港中文大學的一批牛人。

      一:問題由來

      很多自然場景和人工藝術品都包含紋理。比如,牆上,火車和地鐵表面上的塗鴉和圖案。像地毯,毛衣,和其他一些精美的工藝品包含格式各樣的幾何圖案。在人類曆史中,馬賽克被視為一種藝術形式,它可以表示人和動物這類複雜的場景,并可以用石頭,玻璃,陶瓷和其他一些材料模仿油畫。當用Google收索這些圖像的時候,你可以很快的找到成千上萬類似圖檔。下圖展示了一些代表不同形式場景的執行個體。他們有一個共同的特征:圖像中有意義的結構和紋理單元融合在一起。是以我們通常稱這類圖檔為“結構+紋理”圖檔。一個很有意思的現象:在不去除紋理的前提下,人類的視覺感覺系統完全有能力了解這些圖像。從心裡學角度分析,圖像的整體結構特才是人類視覺感覺的主要資料,而不是那些個體細節(紋理)。是以從圖像中提取那些有意義的結構資料是一項具有意義的工作,同時對于計算機來說也是非常有挑戰性的。

基于總變差模型的紋理圖像中圖像主結構的提取方法。

        二:算法描述

      在《Structure Extraction from Texture via Relative Total Variation》一文中提出了一種基于總變差形式新模型,該模型可以有效的分解圖像中的結構資訊和紋理,并且無需特别指定紋理是否規則或者對稱。換言之,該方法具有一般性和随意性,它适用于非統一的或各向異性的紋理。下面介紹一下該方法。   

基于總變差模型的紋理圖像中圖像主結構的提取方法。

上式為總變差模型, I代表輸入圖像,p代表2D圖像像素的索引,S代表輸出結構圖像。其中可以寫成如下各向異性的形式:

基于總變差模型的紋理圖像中圖像主結構的提取方法。

改進的模型如下

基于總變差模型的紋理圖像中圖像主結構的提取方法。

其中

基于總變差模型的紋理圖像中圖像主結構的提取方法。
基于總變差模型的紋理圖像中圖像主結構的提取方法。

    q為以p點為中心的一個正方形區域内所有的像素點的索引,g為高斯核函數:

基于總變差模型的紋理圖像中圖像主結構的提取方法。

     下圖(a)是一幅包含紋理的圖像。(b)則反映了紋理和結構像素點都會産生比較大的D(D值大反應在圖像中也就是對應像素點的亮度高);(c)可以看出結構部分中的L(L值大反應在圖像中也就是對應像素點的亮度高)值大于紋理部分的L值,造成這種現象的一種直覺上的解釋為:在包含在一個局部的小視窗中主要結構往往産生比包含在另一個視窗的複雜紋理具有更多相似方向的梯度。(d)為 (也就是(3)式中的規則項)的映射,而這個規則項讓主要結構部分更加突出。(e)則是(a)用式(3)去除紋理後的結構圖像。

基于總變差模型的紋理圖像中圖像主結構的提取方法。

     下面介紹怎麼樣求解公式(3): 先讨論X方向,Y方向的計算類似。

基于總變差模型的紋理圖像中圖像主結構的提取方法。
基于總變差模型的紋理圖像中圖像主結構的提取方法。

       公式(9)可以至直接求矩陣的逆運算,或者用預處理共轭梯度法來求解。

三:實驗結果

   實驗中ε和εs是2個小正值用來避免分母出現0的情況。其中ε固定為0.001. 而εs稍微大點會幫助保持光滑變化的結構部分,通常設定為0.02。公式(5)中的λ是一個不可或缺的權重它用來控制圖像的光滑程度,但是僅僅調節它不會使紋理分離太多。而增加λ也會造成圖像的模糊并且紋理反而保留下來。 一般λ選取為0.01到0.03之間。圖1表示不同疊代步數顯示的結果,實驗發現該算法3-5步就可以達到收斂狀态。

基于總變差模型的紋理圖像中圖像主結構的提取方法。

     空間尺度參數σ控制了公式(4)中視窗的大小,它的選取取決于紋理的尺度大小并且在結構紋理分離過程中至關重要,經驗的選取σ為0到8之間,圖2說明了增強σ可以很好地抑制紋理。并且實驗中發現在每一次疊代時成倍的減小,可以起到銳化邊緣的效果,同時不會減弱紋理去除的能力.

基于總變差模型的紋理圖像中圖像主結構的提取方法。

      當一幅物體的表面包含多重紋理形式或者可以看成非正面方向,紋理單元就可以認為是不同變化尺度的。圖2和圖3就是這樣一類圖像。因為在該算法中小于相對于尺度參數 那些紋理都得到了有效的懲罰,是以文章的提出模型可以很好的處理這種類型的圖像。當然,如果遠處的結構和近處的紋理相似,他們也都會被去除。因為該算法依賴于局部的資料,是以我們不需要認為局部的梯度是各項同性的。隻要在一個局部視窗中方向相反的梯度互相抵消,該方法就能生效,而不管梯度模式是不是各項同性的或是異性的。

基于總變差模型的紋理圖像中圖像主結構的提取方法。

     圖像矢量化就是把一個像素圖像轉化為一個矢量圖。矢量圖可以任意的放大和縮小而不會丢失細節部分,然而大多數矢量化的方法都不能表示好的細節部分。由于複雜的紋理模式和局部像素點的不斷震蕩的普遍存性,矢量化“結構+紋理”這一類圖像變的更加困難。觀察圖8(c)和(e),經典的矢量化軟體Vector Magic也不能很好地完成矢量化。在本文中,我們開始先分解紋理和結構,分解的結構圖為圖8(b),然後矢量化就可以很好地運用了。在矢量化的過程中,結構圖像(b)直接被放大。于此同時,紋理圖像可以用雙線性插值作為一個位圖重新被放大。最後合成這兩層圖像獲得圖8(f)。相對于傳統的方法,該矢量化算法可以産生更好地效果:不丢失邊緣和細節資訊。

基于總變差模型的紋理圖像中圖像主結構的提取方法。

     本文的算法還可以用于邊緣提取。圖9展示了一個例子,該幅圖像中包含很明顯的前景和背景的紋理,這往往導緻邊緣提取的失敗。圖9(b)和(c)使用不同參數的額Canny邊緣檢測提取的邊緣。很明顯這樣的邊緣是不令人滿意的。該方法可以先獲得好的結構圖像(d),然後再檢測該結構圖像的邊緣得到(e)。圖(6)說明了一樣的道理。

基于總變差模型的紋理圖像中圖像主結構的提取方法。
基于總變差模型的紋理圖像中圖像主結構的提取方法。
基于總變差模型的紋理圖像中圖像主結構的提取方法。

     由于源紋理和目标紋理的不相容性,有時塗鴉圖像,油畫,和素描不能直接運用到圖像融合中。圖11和圖12就是一個很好的例子。直接将圖11(a)和圖12(a)融入目标場景中得到圖11(c)和圖12(e),不難發現融合的圖像很不自然。然而将紋理分離後的圖11(b)和圖12(b)融入相同場景得到的圖11(d)和圖12(d)卻很自然。改組實驗說明了本文算法可以很好運用到圖像融合中。

     四、程式設計實作

      原檔案提供了相關算法的matlab代碼,可以從這裡下載下傳:http://www.cse.cuhk.edu.hk/~leojia/projects/texturesep/tsmoothing.zip

     關于這個源代碼,我看了很久的,有很多地方是和文章的公式不是完全對應的,是以研究的時候還是要有所注意。

     一般來說,matlab隻适合于科研,如果想做成産品,需要用其他的比如C之類的實作該算法,對于這點,這個程式可能有點困難,主要的困難在于其中的解線性方程組。因為在本算法中,方程組的系數矩陣式一個很大的稀疏矩陣,有多大呢,比如如果圖像時500*600的,那麼這個矩陣的大小就是300000*300000,是以,直接的實作對于記憶體等方面肯定不現實,必須研究稀疏矩陣的存儲方式,另外,解方程所用的共轭梯度法也不是一下子就能實作的。 目前我的C版本程式還在研究中。

     五:說明

       這種論文其實直接看英文的是最好的方式嗎,部落格中由于編輯、書寫等方面的不便,有的時候就是随便表達下,文中有很多翻譯和編輯的不當之處,請真正有性卻的朋友下載下傳後看英文。

       由于原始論文的大小大于10MB,無法上傳,敬請各位有興趣的朋友在google搜尋該論文。

       特别緻謝西西網友的大力支援。

*********************************作者: laviewpbt   時間: 2013.10.10    聯系QQ:  33184777  轉載請保留本行資訊************************

繼續閱讀