diff --git a/VHR/segmentation.py b/VHR/segmentation.py index 2ef0aadcf5a7ee935c002778fe9d41fd400aaae5..eadf869a78cff4df23dd694bdb707dd509d12cbf 100644 --- a/VHR/segmentation.py +++ b/VHR/segmentation.py @@ -188,7 +188,7 @@ def write_qgis_seg_style(out_file, line_color='255,255,0,255', line_width=0.46): ) return out_file -def vectorize_tile(obj, startx, starty, sizex, sizey, to_do, out): +def vectorize_tile(obj, startx, starty, sizex, sizey, to_skip, out): print('Using startx {} and starty {}'.format(startx, starty)) r = otb.itkRegion() r['index'][0], r['index'][1] = startx, starty @@ -200,7 +200,6 @@ def vectorize_tile(obj, startx, starty, sizex, sizey, to_do, out): min_bb_y = 0 rp = regionprops(np.squeeze(clip['array'].astype(np.int))) - to_do += [o.label for o in rp] for o in rp: if o.bbox[2] > sizey - 1 or o.bbox[3] > sizex - 1: @@ -209,11 +208,12 @@ def vectorize_tile(obj, startx, starty, sizex, sizey, to_do, out): min_bb_x = sizex - o.bbox[1] if o.bbox[2] > sizey - 1 and sizey - o.bbox[0] > min_bb_y: min_bb_y = sizey - o.bbox[0] - else: - if o not in to_do: - clip['array'][clip['array'] == o.label] = 0 - else: - to_do.remove(o) + elif o.label in to_skip: + clip['array'][clip['array'] == o.label] = 0 + + for o in rp: + if (o.bbox[2] >= sizey - min_bb_y and o.bbox[2] <= sizey - 1) or (o.bbox[3] >= sizex - min_bb_x and o.bbox[3] <= sizex - 1) : + to_skip.append(o.label) vec = otb.Registry.CreateApplication('SimpleVectorization') vec.ImportImage('in', clip) @@ -222,14 +222,15 @@ def vectorize_tile(obj, startx, starty, sizex, sizey, to_do, out): print('Returning min_bb_x {} and min_bb_y {}'.format(min_bb_x, min_bb_y)) - return min_bb_x, min_bb_y, to_do + return min_bb_x, min_bb_y, to_skip def tiled_vectorization(input_segm, nominal_tile_size, output_template): obj_to_tile_map = {} in_seg = to_otb_pipeline(input_segm) W,H = in_seg.GetImageSize('out') idx = 0 - to_do = [] + vec_list = [] + to_skip = [] min_bb_x, min_bb_y = 0, 0 for x in range(0,W,nominal_tile_size[0]): x = max(0, x - min_bb_x - 1) @@ -239,7 +240,7 @@ def tiled_vectorization(input_segm, nominal_tile_size, output_template): y = max(0, y - min_bb_y - 1) th = min(nominal_tile_size[1]+min_bb_y+1, H-y) fn = output_template.format(idx) - min_bb_x_tmp, min_bb_y = vectorize_tile(in_seg, x, y, tw, th, fn) + min_bb_x_tmp, min_bb_y, to_skip = vectorize_tile(in_seg, x, y, tw, th, to_skip, fn) min_bb_x = max(min_bb_x, min_bb_x_tmp) vec_list.append(fn) idx += 1