std::vector<std::vector<BorderPixel>> ComputeBorderLabels(const Superpixels& spc) { slimage::Image1i labels = spc.ComputeLabels(); std::vector<std::vector<BorderPixel>> border_pixels(spc.cluster.size()); for(unsigned int cid=0; cid<spc.cluster.size(); cid++) { border_pixels[cid] = ComputeBorderLabels(cid, spc, labels); } return border_pixels; }
std::vector<unsigned int> ComputeAllBorderPixels(const Superpixels& superpixels) { slimage::Image1i labels = superpixels.ComputeLabels(); std::set<unsigned int> u; int face_neighbours[] = { -1, +1, -static_cast<int>(labels.width()), static_cast<int>(labels.width()) }; for(unsigned int y=1; y<labels.height()-1; y++) { for(unsigned int x=1; x<labels.width()-1; x++) { int q = labels.index(x,y); unsigned int lc = labels[q]; for(unsigned int i=0; i<4; i++) { if(labels[q + face_neighbours[i]] != lc) { u.insert(q); } } } } return std::vector<unsigned int>(u.begin(), u.end()); }