对于SLIC的改进有两点:
1、在SLIC中,对于颜色空间的转换(RGB->LAB)消耗了不小的时间,本文作者直接使用opencv现有的转换算法进行颜色空间的转换。
cvtColor(I_rgb, I_lab, CV_BGR2Lab); // I_lab is CV_8UC3
2、在SLIC的多次迭代中,对每一块超像素都会进行迭代,而有些超像素块其实在迭代多次后变化不大,因此本文作者设置了一个准则,即:如果本次迭代后的效果与上一次差别不大,则之后就不再对此区域进行迭代。
double preemptive_thresh_iteration = 0.01; //设置的迭代阈值
nChanges会在迭代过程中变化 ,如果nChanges小于阈值 则说明当前的超像素块 与 上一次迭代后变化不大 则直接跳出本次迭代
if(nChanges<preemptive_thresh_iteration*sz)
break;
对于传统的分水岭算法的改进:
因为传统分水岭算法只关注颜色的信息(颜色值或者颜色强度),从而会导致分割的紧凑性,规则性差。
本文作者采用SLIC的方式,加入了距离信息,从而改进了分水岭算法的紧凑性和规则性差的问题。