請問超像素(Superpixel)的大致原理?

最近在看顯著性檢測(Saliency Detection)的論文,有點好奇。麻煩大神們簡單介紹下吧。

注意不是HTC的UltraPixel技術。


超像素的原理?

超像素就是把一幅原本是像素級(pixel-level)的圖,劃分成區域級(district-level)的圖。

內涵?

應該算是一種對基本信息進行的抽象吧。

超像素分割屬於圖像分割(image segmentation),再細化應該屬於過分割(over segmentation)。

你對一幅圖像進行超像素分割,分割之後,你得到許多大小不一的區域,你可以從這些區域中提取出有效的信息,比如顏色直方圖、紋理信息。比如你有一個人,你可以對這個人的圖像進行超像素分割,進而通過對每個小區域的特徵提取,辨識出這些區域是處於人體的哪個部分(頭部、肩部,腿部),進而建立人體的關節圖像。

另外,如果你要用圖論的方法來分離前景背景。如果這幅圖的大小為480 * 640,那麼你建立的圖(graph)有480640個節點。如果你預先對這幅圖像使用超像素分割,將其分割為1000個超像素,那麼你建立的圖只有1000個節點。大大提升了計算速度。

我讀過幾篇關於超像素分割的論文,最有趣直觀並且帶有源代碼(帶著良心)的是SLIC Superpixel,使用K-means的聚類方法,分割的效果很好。

SLIC Superpixels Compared to State-of-the-art Superpixel Methods

另外,OpenCV3中實現的超像素分割的演算法是SEEDS。

mvdblive.org

SEEDS的速度比SLIC快些,paper寫的也是有理有據,令人信服。空閑的話可以讀讀看。


頂 @Pan Ni .

去年研究了大半年的Saliency Detection,其中這篇CVPR2014的論文(有的狼友可能沒有下載的渠道所以沒放的IEEE Xplore的鏈接 http://research.microsoft.com/en-US/people/yichenw/cvpr14_saliencyoptimization.pdf )中的某一步用到了Superpixel.

超像素有多種方法,自己用MindManager做了個大致總結:

但是SLIC目前來說最好用(當然也可以擴展到超·體像素Supervoxel),

其大致思路是(自己做了個word,但懶得手敲只好截圖咯):

補充下SLIC的代碼(MATLABCppGUI):

Superpixel segmentation


超像素其實不是一個理論,所以沒什麼原理,它只是一個概念,最早是任曉峰2003年的一篇論文提出的。概念就是把圖像分割成很多小塊,然後可以把這一整個塊當成一個像素來處理,每一小塊就是超像素,這樣處理有一些便捷,比如數據點數減少,或者這一塊有圖像語義,利於後續其他應用。但其本質上仍是是圖像分割。可能需要了解一下圖像分割這一細分領域,不過概念依然很簡單。


就是將圖像過分割成一系列子區域,每個子區域內部之間具有某個特徵具有很強的一致性。例如,每個子區域的灰度差不多。當然,超像素還要求子區域形狀盡量規則等。


對圖像用SLIC進行超像素分割以後得到的每個超像素區域具體是怎樣界定的?程序當中具體在哪一塊指出了這塊區域的範圍和大小?


超像素的大小如何選取呢?有沒有文章專門研究大小的選取,類似討論k-means的k如何選取。


請問SLIC 與 空間金字塔分層超像素有什麼區別呢?


推薦閱讀:

如何將下圖中孔的區域精確的找出來?用圖像處理的方法
萌新初入手圖像處理,想知道feature map 和activation map分別是指什麼?
當前主流的圖像分割研究方向都有哪些?
幾乎無C/C++基礎的前提下,如何去學習OpenCV?
運算量很大的圖像處理演算法有什麼意義呢?

TAG:圖像處理 | OpenCV | 圖像識別 | 計算機視覺 | 圖像檢索 |