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