1. 程式人生 > >SLIC超畫素(superpixel)演算法

SLIC超畫素(superpixel)演算法

Flag Counter

SLIC演算法是simple linear iterative cluster的簡稱,該演算法用來生成超畫素(superpixel)。

基本思想

演算法大致思想是這樣的,將影象從RGB顏色空間轉換到CIE-Lab顏色空間,對應每個畫素的(L,a,b)顏色值和(x,y)座標組成一個5維向量V[L,a,b,x,y],兩個畫素的相似性即可由它們的向量距離來度量,距離越大,相似性越小。

演算法首先生成K個種子點,然後在每個種子點的周圍空間裡搜尋距離該種子點最近的若干畫素,將他們歸為與該種子點一類,直到所有畫素點都歸類完畢。然後計算這K個超畫素裡所有畫素點的平均向量值,重新得到K個聚類中心,然後再以這K箇中心去搜索其周圍與其最為相似的若干畫素,所有畫素都歸類完後重新得到K個超畫素,更新聚類中心,再次迭代,如此反覆直到收斂。怎麼樣,是不是感覺很像K-means聚類演算法。

該演算法接受一個引數K,用於指定生成的超畫素數目。設原圖有N個畫素,則分割後每塊超畫素大致有N/K個畫素,每塊超畫素的邊長大致為S=[N/K]^0.5,開始我們每隔S個畫素取一個聚類中心,然後以這個聚類中心的周圍2S*2S為其搜尋空間,與其最為相似的若干點即在此空間中搜尋。這裡有一個問題,為了避免所選的聚類中心是邊緣和噪聲這樣的不合理點,演算法做了改進, 在3*3的視窗中將聚類中心移動到梯度最小的區域,梯度定義為

                                                    G(x,y)=[V(x+1,y)-V(x-1,y)]^2+[V(x,y+1)-V(x,y-1)]^2

這樣就可以避免上面所說的情況。

因為L,a,b在CIE-Lab顏色空間,L,a,b的大小有限制,而影象尺寸則沒有限制,如果圖片的尺寸比較大,會造成衡量向量距離時空間距離(x,y)的影響過大,所以需要調製空間距離(x,y)的影響,所以需要對x,y進行normalize。改進向量距離的度量如下:

                                                   d_lab=[(Lk-Li)^2+(ak-ai)^2+(bk-bi)^2]^0.5

                                                   d_xy=[(Xi-Xk)^2+(Yk-Yi)^2]^0.5

                                                   Ds=d_lab+(m/S)*d_xy

m用來調整d_xy的權值,一般為1-20,在演算法中設定為10。

最後可能出現一些小的區域d被標記為歸屬某一塊超畫素但卻與這塊超畫素沒有連線,這就需要把這塊小區域d重新歸類為與這塊小區域d連線的最大的超畫素中去,以保證每塊超畫素的完整。

演算法流程


來看看效果吧:



相關推薦

SLICsuperpixel演算法

SLIC演算法是simple linear iterative cluster的簡稱,該演算法用來生成超畫素(superpixel)。 基本思想 演算法大致思想是這樣的,將影象從RGB顏色空間轉

計算機視覺---superpixel

超畫素就是把一幅原本是畫素級(pixel-level)的圖,劃分成區域級(district-level)的圖。可以將其看做是對基本資訊進行的抽象。超畫素分割屬於影象分割(image segmentation),再細化應該屬於過分割(over segmentation)。比如我們對一幅影象進行超畫素分割,分割之

SLIC分割演算法研究程式碼可下載

超畫素概念是2003年Xiaofeng Ren[1]提出和發展起來的影象分割技術,是指具有相似紋理、顏色、亮度等特徵的相鄰畫素構成的有一定視覺意義的不規則畫素塊。它利用畫素之間特徵的相似性將畫素分組,用少量的超畫素代替大量的畫素來表達圖片特徵,很大程度上降低了影象後處理的複

SLIC分割演算法

超畫素概念是2003年Xiaofeng Ren提出和發展起來的影象分割技術,是指具有相似紋理、顏色、亮度等特徵的相鄰畫素構成的有一定視覺意義的不規則畫素塊。它利用畫素之間特徵的相似性將畫素分組,用少量的超畫素代替大量的畫素來表達圖片特徵,很大程度上降低了影象後處理的複雜度

載入影象和遍歷OpenCV

#include <iostream> using namespace std; #include <opencv2\opencv.hpp> using namespace cv; void main() { Mat imgMat = imread("0_depth.png

OpenCV——修改影象隨心所欲

這一節將講述OpenCV——修改影象畫素,根據自己需要新增特定的畫素部分 原圖如下,我們就是先在這個視訊流上新增一條直線段(有一定寬度的) 現在我們想新增一條,135行-455行,列350--360的直線段 #include<opencv2/opencv.hp

密度無關的DIP

指一個抽象意義上的畫素,程式用它來定義介面元素。它作為一個與實際密度無關的單位,幫助程式設計師構建一個佈局方案(介面元素的寬度,高度,位置)。 一個與密度無關的畫素,在邏輯尺寸上,與一個位於畫素密度為160DPI的螢幕上的畫素是一致的,這也是Android平臺所假定的預設顯

Java——批量更改圖片大小

在小程式開發中,資源載入會影響介面繪製;假如網路狀態不夠好, 很可能會引起初始化介面為空,直到圖片載入完成才顯示整個介面。 我們知道,小程式程式碼及資源本身的限制為2MB,快取限制

OpenCV-Mat方式的獲取圖片的

作為OpenCV基礎知識中的重中之重,畫素值的讀寫需要我們很用心的掌握。 1、讀取原圖 const char filename[] = "/Users/linwang/Desktop/Lena.png"; Mat Im = imread(filename

android程式碼構建佈局時設定寬高的單位為圖解

android構建佈局時一般通用xml佈局來生成,但有時還是需要程式碼來生成佈局控制元件,以達到不同的效果。以前用過程式碼生成佈局,現在寫個總結,方便新手檢視。 這裡程式碼來生成佈局控制元件設定的寬高的單位為:畫素。   畫素即pixel,簡寫為px,我們平時說的手機的40

經典演算法SLIC的程式碼的深度優化

現在這個社會發展的太快,到處都充斥著各種各樣的資源,各種開源的平臺,如github,codeproject,pudn等等,加上一些大型的官方的開源軟體,基本上能找到各個型別的程式碼。很多初創業的老闆可能都曾經說過基本上我的程式設計師不需要自己寫演算法,但是他們要學會搜尋,強有力的搜尋能力基本能解

分割技術發展情況梳理(Superpixel Segmentation(轉)

超畫素分割?各種方法有一點點懵吧,看看下面梳理哦 一. 基於圖論的方法(Graph-based algorithms): 1. Normalized cuts, 2000. Jianbo Shi and Jitendra Malik. Normalized cuts and image s

opencv 訪問彩色圖片指標方法

#include "stdafx.h" #include <cv.h> #include <highgui.h> #include <opencv2/imgproc

【cocos-js開發遇到的坑】圖片在手機瀏覽器上會降低變低

描述:開發的web遊戲在本地執行可以,但是打包到手機(Android)上介面的ui就像是被壓縮一樣變得很不清晰(av畫質) 解決:搜尋了一下發現需要修改引擎: frameworks\cocos2d-html5\cocos2d\core\platform\CCEGLView.js -- 894

OpenCV3三種分割演算法原始碼以及效果

  OpenCV3中超畫素分割演算法SEEDS,SLIC, LSC演算法在Contrib包裡,需要使用Cmake編譯使用。為了方便起見,我將三種演算法的原始碼檔案從contrib包裡拎了出來,可以直接使用,順便比較一下演算法的效果。   使用lena圖做測試: SEEDS演算法: SLIC演算法:

分割演算法

SLIC原理與核心演算法 1.具體步驟:初始化聚類中心、迭代聚類、 後續加強聯通 3)後續加強聯通: 在迭代結束時,會有少量的迷失畫素,即少

中點掃描演算法圓弧OpenGL

圓弧的中點掃描演算法畫圓弧(添加了鍵盤監聽事件)#include<GL\glut.h> #include<iostream> #include<cmath> #include <string.h> using namespa

利用吸收態馬爾科夫鏈進行基於分割的目標跟蹤【Superpixel-based Tracking-by-Segmentation using Markov Chains】

CVPR2017目標跟蹤領域中的一篇,文章的亮點在於實現了基於分割的跟蹤,博主剛好對這一方向比較感興趣,所以解讀一下文章。 首先介紹一下什麼是 基於分割的跟蹤。一般意義上的目標跟蹤,就是在一個視訊序列中,根據第一幀給出的目標,對目標在後續幀進行跟蹤,傳統的

px到底是個什麽單位

是個 電視 液晶屏 最終 效果 維基百科 看電影 液晶 都是 px,對於許多網頁設計者來說,是最常用的CSS長度單位。然而,1px到底多長,恐怕沒有多少人回答得上來。 CSS長度本身有絕對長度和相對長度的區分。 cm、pt之類的都是絕對長度,它們是物理長度——1cm是1/1

看到一個牛人的群聊天記錄,贊!轉載

top 不出 說明 話題 悲劇 最好的 至少 防止 自己 下面是聊天記錄原文(http://bbs.csdn.net/topics/390114474來自csdn-bbs): “ 2012/2/2 15:13:23 有一個原則 2012/2/2 15:13: