Graph Cuts初步理解

2022-05-02 10:03:13 字數 3419 閱讀 7464

graph cuts是一種十分有用和流行的能量優化演算法,在計算機視覺領域普遍應用於前背景分割(image segmentation)、立體視覺(stereo vision)、摳圖(image matting)等。graph cuts理論最早是出現在流網路優化領域的,比如說水管網路,通訊傳輸網路,城市車流網路等。此時的graph cuts演算法是用來確定網路流的最小分割,即尋找乙個容量最小的邊的集合,去掉這個集合中的所有邊就可以阻擋這個網路了。需要注意的是,通常所說的graph cuts演算法是指的採用最大流-最小分割來優化的模型,其它的graph cutting演算法一般用graph partitioning這個名詞來代替。

首先還得先理解graph cuts中的graph和cuts的意思。此處的graph和普通的graph稍有不同。普通的圖由頂點和邊構成,如果邊的有方向的,這樣的圖被則稱為有向圖,否則為無向圖,且邊是有權值的,不同的邊可以有不同的權值,分別代表不同的物理意義。而graph cuts圖是在普通圖的基礎上多了2個頂點,這2個頂點分別用符號」s」和」t」表示,統稱為終端頂點。其它所有的頂點都必須和這2個頂點相連形成邊集合中的一部分。所有graph cuts中的邊也分為兩種,一種是普通頂點與相鄰點或者與之有關聯的點之間的連線,一種是剛講的普通頂點和2個終端頂點之間的連線。 graph cuts中的cuts是指這樣乙個邊的集合,很顯然這些邊集合包括了上面2種邊,該集合中邊的斷開會導致殘留」s」和」t」圖的分開,且這些邊的集合中所有權值之和是最小的。因此也稱為最小割。關於graph cuts的示意圖如下所示:

圖割在影象分割中應用得很廣,那麼應該怎樣將圖割理論和計算機視覺聯絡起來呢?圖割模型和影象該怎麼建立聯絡呢?有一位網友在他的博文圖割小結做了個小結,比喻得還不錯,可以讓大家圖割在影象分割中的作用有個初步的印象。

在參考了iccv2001的文章interactive graph cuts for optimal boundary & region segmentation of objects in nd images後,或許能夠找到上述問題的一點答案。首先,一張image可以看作是乙個矩陣,圖中的每個畫素就是矩陣中的乙個位置,這個畫素可以看做是圖中的乙個頂點。然後我們把相鄰頂點之間用**(有向或無向都行)連線起來,這就形成了邊,現在這幅image有頂點和邊了,也就構成一幅graph了。至於邊的權值怎麼計算,則是很理論的東西。看了下**中的解釋,影象中邊的權值一般由2部分構成,平滑項和資料項,這2部分的比重用1個係數來平衡,其中平滑項主要體現頂點畫素和其相鄰區域畫素之間值的變化強度,如果變化劇烈說明這兩者很有可能出於邊緣部分,則被分割開的可能性比較大,而按照最小割的分割原理,這時2者的平滑項權值應該較小。而資料項部分則表示對應頂點屬於前景或者背景的懲罰項。其**中的數學公式為:

其中r(a)表示的是區域資料項,b(a)表示的是邊界平滑項,e(a)表示的是權值,即損失函式,也叫能量函式,圖割的目標就是優化能量函式使其值達到最小。

另外由於graph cuts需要有2個終端節點」s」和」t」,分別表示初始的目標區域和背景區域,在計算機視覺的影象分割領域時,需要人工指定初始的s頂點和t頂點,如果有hci的話,可以用滑鼠分別直接點這2個區域。其中乙個區域代表所需分割目標上的乙個畫素位置,另乙個為背景上的乙個畫素位置。有了能量函式的定義和初始的終端頂點,就可以採用圖割理論來不斷迭代對目標進行分割了。

graph cuts是一種十分有用和流行的能量優化演算法,在計算機視覺領域普遍應用於前背景分割(image segmentation)、立體視覺(stereo vision)、摳圖(image matting)等。graph cuts理論最早是出現在流網路優化領域的,比如說水管網路,通訊傳輸網路,城市車流網路等。此時的graph cuts演算法是用來確定網路流的最小分割,即尋找乙個容量最小的邊的集合,去掉這個集合中的所有邊就可以阻擋這個網路了。需要注意的是,通常所說的graph cuts演算法是指的採用最大流-最小分割來優化的模型,其它的graph cutting演算法一般用graph partitioning這個名詞來代替。

首先還得先理解graph cuts中的graph和cuts的意思。此處的graph和普通的graph稍有不同。普通的圖由頂點和邊構成,如果邊的有方向的,這樣的圖被則稱為有向圖,否則為無向圖,且邊是有權值的,不同的邊可以有不同的權值,分別代表不同的物理意義。而graph cuts圖是在普通圖的基礎上多了2個頂點,這2個頂點分別用符號」s」和」t」表示,統稱為終端頂點。其它所有的頂點都必須和這2個頂點相連形成邊集合中的一部分。所有graph cuts中的邊也分為兩種,一種是普通頂點與相鄰點或者與之有關聯的點之間的連線,一種是剛講的普通頂點和2個終端頂點之間的連線。 graph cuts中的cuts是指這樣乙個邊的集合,很顯然這些邊集合包括了上面2種邊,該集合中邊的斷開會導致殘留」s」和」t」圖的分開,且這些邊的集合中所有權值之和是最小的。因此也稱為最小割。關於graph cuts的示意圖如下所示:

圖割在影象分割中應用得很廣,那麼應該怎樣將圖割理論和計算機視覺聯絡起來呢?圖割模型和影象該怎麼建立聯絡呢?有一位網友在他的博文圖割小結做了個小結,比喻得還不錯,可以讓大家圖割在影象分割中的作用有個初步的印象。

在參考了iccv2001的文章interactive graph cuts for optimal boundary & region segmentation of objects in nd images後,或許能夠找到上述問題的一點答案。首先,一張image可以看作是乙個矩陣,圖中的每個畫素就是矩陣中的乙個位置,這個畫素可以看做是圖中的乙個頂點。然後我們把相鄰頂點之間用**(有向或無向都行)連線起來,這就形成了邊,現在這幅image有頂點和邊了,也就構成一幅graph了。至於邊的權值怎麼計算,則是很理論的東西。看了下**中的解釋,影象中邊的權值一般由2部分構成,平滑項和資料項,這2部分的比重用1個係數來平衡,其中平滑項主要體現頂點畫素和其相鄰區域畫素之間值的變化強度,如果變化劇烈說明這兩者很有可能出於邊緣部分,則被分割開的可能性比較大,而按照最小割的分割原理,這時2者的平滑項權值應該較小。而資料項部分則表示對應頂點屬於前景或者背景的懲罰項。其**中的數學公式為:

其中r(a)表示的是區域資料項,b(a)表示的是邊界平滑項,e(a)表示的是權值,即損失函式,也叫能量函式,圖割的目標就是優化能量函式使其值達到最小。

另外由於graph cuts需要有2個終端節點」s」和」t」,分別表示初始的目標區域和背景區域,在計算機視覺的影象分割領域時,需要人工指定初始的s頂點和t頂點,如果有hci的話,可以用滑鼠分別直接點這2個區域。其中乙個區域代表所需分割目標上的乙個畫素位置,另乙個為背景上的乙個畫素位置。有了能量函式的定義和初始的終端頂點,就可以採用圖割理論來不斷迭代對目標進行分割了。

ioctl初步理解

ioctl系統呼叫是為使用者空間建立的一種控制硬體裝置的通道。比如控制串列埠的波特率,馬達的轉速等等。是使用者空間和核心空間進行通訊的方式之一。要實現乙個ioctl,需要使用者空間和核心空間兩方面的配合。如果想要乙個硬體支援ioctl,則要在其驅動函式中加入ioctl的實現,應用程式想要通過ioct...

初步理解socket

在學習socket之前,先回顧下tcp ip協議。tcp ip transmission control protocol internet protocol 即傳輸控制協議 網間協議,定義了主機如何連入網際網路及資料如何再它們之間傳輸的標準,從字面意思來看tcp ip是tcp和ip協議的合稱,但實...

SVN初步理解

問題二 衝突 問題描述 為了解決超時問題,只能更新.而在更新過程中,如果幾個人修改了同一檔案的同一行 此時就會產生衝突。產生原因 版本控制器不會那麼智慧型,去決定應該使用誰的 作為最終 只能將選擇權拋給使用者,讓使用者解決。系統提供三種解決方案 p postpone,延遲處理 待會我自己處理 如果選...