diff --git a/VHR/segmentation.py b/VHR/segmentation.py index 31a247faf61c402fd2d6f319e55c30b48b1364b2..2ef0aadcf5a7ee935c002778fe9d41fd400aaae5 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, out): +def vectorize_tile(obj, startx, starty, sizex, sizey, to_do, out): print('Using startx {} and starty {}'.format(startx, starty)) r = otb.itkRegion() r['index'][0], r['index'][1] = startx, starty @@ -200,15 +200,20 @@ def vectorize_tile(obj, startx, starty, sizex, sizey, 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 (starty > 0 and o.bbox[0] == 0) or (startx > 0 and o.bbox[1] == 0): - clip['array'][clip['array'] == o.label] = 0 if o.bbox[2] > sizey - 1 or o.bbox[3] > sizex - 1: clip['array'][clip['array'] == o.label] = 0 if o.bbox[3] > sizex - 1 and sizex - o.bbox[1] > min_bb_x: 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) vec = otb.Registry.CreateApplication('SimpleVectorization') vec.ImportImage('in', clip) @@ -217,14 +222,14 @@ def vectorize_tile(obj, startx, starty, sizex, sizey, out): print('Returning min_bb_x {} and min_bb_y {}'.format(min_bb_x, min_bb_y)) - return min_bb_x, min_bb_y + return min_bb_x, min_bb_y, to_do 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 - vec_list = [] + to_do = [] 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)