MCPcopy Create free account
hub / github.com/RozDavid/UnScene3D / segment_graph

Function segment_graph

utils/cpp_utils/segmentator.cpp:17–44  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15
16
17universe* segment_graph(int num_vertices, int num_edges, edge* edges, float c) {
18 std::sort(edges, edges + num_edges); // sort edges by weight
19 universe* u = new universe(num_vertices); // make a disjoint-set forest
20 // threshold for each vertex
21 float* threshold = new float[num_vertices];
22 // set initial threshold
23 for (int i = 0; i < num_vertices; i++) {
24 threshold[i] = c;
25 }
26 // for each edge, in non-decreasing weight order
27 for (int i = 0; i < num_edges; i++) {
28 edge* pedge = &edges[i];
29 // components conected by this edge = initially 2 vertices
30 int a = u->find(pedge->a);
31 int b = u->find(pedge->b);
32 if (a != b) {
33 if ((pedge->w <= threshold[a]) && (pedge->w <= threshold[b])) {
34 // join components
35 u->join(a, b);
36 a = u->find(a);
37 // update threshold for a = edge weight + kthr / |a|
38 threshold[a] = pedge->w + (c / u->size(a));
39 }
40 }
41 }
42 delete[] threshold;
43 return u;
44}
45
46
47vector<int> segment_mesh(MeshDataf mesh, const float kthr, const int segMinVerts, std::map<std::pair<int, int>, int>& connectivity) {

Callers 1

segment_meshFunction · 0.85

Calls 3

findMethod · 0.80
joinMethod · 0.80
sizeMethod · 0.80

Tested by

no test coverage detected