35 #include "modules/perception/lidar/detector/ncut_segmentation/common/graph_felzenszwalb/filter.h" 36 #include "modules/perception/lidar/detector/ncut_segmentation/common/graph_felzenszwalb/image.h" 37 #include "modules/perception/lidar/detector/ncut_segmentation/common/graph_felzenszwalb/misc.h" 38 #include "modules/perception/lidar/detector/ncut_segmentation/common/graph_felzenszwalb/segment_graph.h" 41 namespace perception {
45 return std::fabs(
imRef(I, x1, y1) -
imRef(I, x2, y2));
60 int width = im->
width();
65 edge *edges =
new edge[width * height * 4];
67 for (
int y = 0; y < height; y++) {
68 for (
int x = 0; x < width; x++) {
70 edges[num].
a = y * width + x;
71 edges[num].
b = y * width + (x + 1);
72 edges[num].
w =
diff(smooth_r, x, y, x + 1, y);
76 edges[num].
a = y * width + x;
77 edges[num].
b = (y + 1) * width + x;
78 edges[num].
w =
diff(smooth_r, x, y, x, y + 1);
81 if ((x < width - 1) && (y < height - 1)) {
82 edges[num].
a = y * width + x;
83 edges[num].
b = (y + 1) * width + (x + 1);
84 edges[num].
w =
diff(smooth_r, x, y, x + 1, y + 1);
87 if ((x < width - 1) && (y > 0)) {
88 edges[num].
a = y * width + x;
89 edges[num].
b = (y - 1) * width + (x + 1);
90 edges[num].
w =
diff(smooth_r, x, y, x + 1, y - 1);
99 for (
int i = 0; i < num; i++) {
100 int a = u->
find(edges[i].a);
101 int b = u->
find(edges[i].b);
102 if ((a != b) && ((u->
size(a) < min_size) || (u->
size(b) < min_size)))
108 for (
int y = 0; y < height; y++) {
109 for (
int x = 0; x < width; x++) {
110 int comp = u->
find(y * width + x);
111 imRef(output, x, y) = comp;
int height() const
Definition: image.h:55
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
int width() const
Definition: image.h:52
int find(int x)
Definition: disjoint_set.h:75
void join(int x, int y)
Definition: disjoint_set.h:84
int a
Definition: segment_graph.h:49
Definition: segment_graph.h:47
Image< float > * smooth(Image< float > *src, float sigma)
Definition: filter.h:71
int size(int x) const
Definition: disjoint_set.h:55
Definition: disjoint_set.h:49
Universe * segment_graph(int num_vertices, int num_edges, edge *edges, float c)
Definition: segment_graph.h:65
float w
Definition: segment_graph.h:48
int b
Definition: segment_graph.h:50
Image< int > * segment_image(Image< float > *im, float sigma, float c, int min_size, int *num_ccs)
Definition: segment_image.h:58
int num_sets() const
Definition: disjoint_set.h:56
float diff(Image< float > *I, int x1, int y1, int x2, int y2)
Definition: segment_image.h:44
#define imRef(im, x, y)
Definition: image.h:68