Commit 6b5df895 authored by Alexey Spizhevoy's avatar Alexey Spizhevoy

refactored mean shift segmentation a little

parent 41246333
...@@ -379,11 +379,10 @@ void meanShiftSegmentation(const GpuMat& src, Mat& dst, int sp, int sr, int mins ...@@ -379,11 +379,10 @@ void meanShiftSegmentation(const GpuMat& src, Mat& dst, int sp, int sr, int mins
{ {
for (int e_it = g.start[v]; e_it != -1; e_it = g.edges[e_it].next) for (int e_it = g.start[v]; e_it != -1; e_it = g.edges[e_it].next)
{ {
int comp1 = comps.find(v); int c1 = comps.find(v);
int comp2 = comps.find(g.edges[e_it].to); int c2 = comps.find(g.edges[e_it].to);
if (comp1 != comp2 && g.edges[e_it].val.dr < hr if (c1 != c2 && g.edges[e_it].val.dr < hr && g.edges[e_it].val.dsp < hsp)
&& g.edges[e_it].val.dsp < hsp) comps.merge(c1, c2);
comps.merge(comp1, comp2);
} }
} }
...@@ -396,14 +395,15 @@ void meanShiftSegmentation(const GpuMat& src, Mat& dst, int sp, int sr, int mins ...@@ -396,14 +395,15 @@ void meanShiftSegmentation(const GpuMat& src, Mat& dst, int sp, int sr, int mins
LOG2("initedges:", clock() - start); LOG2("initedges:", clock() - start);
DBG(start = clock()); DBG(start = clock());
// Prepare edges connecting differnet components
for (int v = 0; v < g.numv; ++v) for (int v = 0; v < g.numv; ++v)
{ {
int comp1 = comps.find(v); int c1 = comps.find(v);
for (int e_it = g.start[v]; e_it != -1; e_it = g.edges[e_it].next) for (int e_it = g.start[v]; e_it != -1; e_it = g.edges[e_it].next)
{ {
int comp2 = comps.find(g.edges[e_it].to); int c2 = comps.find(g.edges[e_it].to);
if (comp1 != comp2) if (c1 != c2)
edges.push_back(SegmLink(comp1, comp2, g.edges[e_it].val)); edges.push_back(SegmLink(c1, c2, g.edges[e_it].val));
} }
} }
...@@ -417,13 +417,12 @@ void meanShiftSegmentation(const GpuMat& src, Mat& dst, int sp, int sr, int mins ...@@ -417,13 +417,12 @@ void meanShiftSegmentation(const GpuMat& src, Mat& dst, int sp, int sr, int mins
DBG(start = clock()); DBG(start = clock());
// Exclude small components (starting from the nearest couple) // Exclude small components (starting from the nearest couple)
vector<SegmLink>::iterator e_it = edges.begin(); for (size_t i = 0; i < edges.size(); ++i)
for (; e_it != edges.end(); ++e_it)
{ {
int comp1 = comps.find(e_it->from); int c1 = comps.find(edges[i].from);
int comp2 = comps.find(e_it->to); int c2 = comps.find(edges[i].to);
if (comp1 != comp2 && (comps.size[comp1] < minsize || comps.size[comp2] < minsize)) if (c1 != c2 && (comps.size[c1] < minsize || comps.size[c2] < minsize))
comps.merge(comp1, comp2); comps.merge(c1, c2);
} }
LOG2("excludesmall:", clock() - start); LOG2("excludesmall:", clock() - start);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment