SLIC超像素分割
SLIC:simple linear iterative clustering,即簡單線性迭代聚類。以下為源碼使用流程。
一、預處理,RGB轉化為LAB
把RGB顏色空間的圖片轉換到XYZ,再從XYZ顏色空間轉化為LAB顏色空間的圖片。將L、a、b分量存儲在SLIC類成員m_lvec, m_avec, m_bvec中。
二、SLIC超像素分割
1.初始化種子點。通過給定步長STEP得到所有種子點的L、a、b、三個分量(kseedsl、keedsa、keedsb)以及x、y兩個坐標值(keedsx、kseedsy)。
2.擾動種子點。遍歷種子點的八鄰域,找到包括種子點在內的3×3的范圍的最小梯度(顏色分量的梯度),如果不是種子點,則將最小值對應的像素點作為新的種子點,即擾動種子點,并更新其五維分量。
3.聚類。標簽表klables初始化為-1,距離表distvec初始化為參數DBL_MAX。在以每個種子點為中心的2STEP×2STEP的范圍內,遍歷所有像素點,計算像素點與當前種子點的五維空間的歐氏距離,同時加入一個衡量兩種距離重要性的度量系數m。如果計算出的結果小于距離表中的值,那么將當前種子點對應的標簽值分配給對應像素點。將距離表中的值更新。
4.計算新的種子點,即聚類中心。分別計算聚類完成的每個超像素塊中所有像素的l、a、b、x、y分量的和,儲存在sigmal、sigmaa、sigmab、sigmax、sigmay中,然后除以該超像素塊中所包含像素總個數,得到平均值,作為新的種子點及其分量。
5.迭代步驟3、4指定次數iteration。得到相對可靠的超像素分割結果。
三、分割后處理
消除標簽表中孤立的像素點,即在一片相同的標簽群中存在的不同標簽的像素點。根據面積判斷,將空間上臨近已被重新標記的像素點的新標簽分配給孤立點。生成新標簽表nlables。
四、繪制分割結果
遍歷圖片,如果在當前像素點的八鄰域內存在與中心像素點的標簽不一致的像素點,那么將當前中心像素點標記為白色輪廓,鄰域內其它非輪廓的像素點作為黑色輪廓邊線。
五、其它
SLIC類中圖片存儲為unsigned int,OpenCV中存儲為unsigned char,在實際應用中需要進行兩種格式的轉化。SLIC.cpp、SLIC.h、Main.cpp在這。
參考
1.https://blog.csdn.net/electech6/article/details/45535203
2.https://blog.csdn.net/zhj_matlab/article/details/52986700
3.https://blog.csdn.net/zhj_matlab/article/details/52973723
總結
- 上一篇: Mean-shift超像素分割
- 下一篇: 什么是智能门锁,智能门锁主要有哪些优点?