70 int width = im->
width();
75 edge *edges =
new edge[width * height * 4];
77 for (
int y = 0; y < height; y++) {
78 for (
int x = 0; x < width; x++) {
80 edges[num].
a = y * width + x;
81 edges[num].
b = y * width + (x + 1);
82 edges[num].
w =
diff(smooth_r, x, y, x + 1, y);
86 edges[num].
a = y * width + x;
87 edges[num].
b = (y + 1) * width + x;
88 edges[num].
w =
diff(smooth_r, x, y, x, y + 1);
91 if ((x < width - 1) && (y < height - 1)) {
92 edges[num].
a = y * width + x;
93 edges[num].
b = (y + 1) * width + (x + 1);
94 edges[num].
w =
diff(smooth_r, x, y, x + 1, y + 1);
97 if ((x < width - 1) && (y > 0)) {
98 edges[num].
a = y * width + x;
99 edges[num].
b = (y - 1) * width + (x + 1);
100 edges[num].
w =
diff(smooth_r, x, y, x + 1, y - 1);
109 for (
int i = 0; i < num; i++) {
110 int a = u->
find(edges[i].a);
111 int b = u->
find(edges[i].b);
112 if ((a != b) && ((u->
size(a) < min_size) || (u->
size(b) < min_size)))
118 for (
int y = 0; y < height; y++) {
119 for (
int x = 0; x < width; x++) {
120 int comp = u->
find(y * width + x);
121 imRef(output, x, y) = comp;