sizeX, sizeY, sizeC = (reader.rdr.getSizeX(), reader.rdr.getSizeY(), reader.rdr.getSizeC()) tiler = Tiler((sizeX, sizeY, sizeC), (tile_size, tile_size, sizeC), overlap=0.05) def preprocess(img): img = cv2.resize(img, (0, 0), fx=1/downsample, fy=1/downsample) img = cv2.medianBlur(img, 3) return img print('Loading and processing tiles') imgs = [] for i, img in tqdm(tiler.iterate(reader_func), total=len(tiler)): imgs.append(preprocess(img)) masks, flows, styles, diams = model.eval( imgs, diameter=diameter, channels=channels) # Process shapes print('Converting masks to shapes') geoms = [] for tile_idx, mask in tqdm(enumerate(masks), total=len(masks)): x_offset, y_offset, _ = tiler.get_tile_bbox_position(tile_idx)[0] for i in range(mask.max()): m = (mask == i+1).astype(np.uint8) c, hier = cv2.findContours(m, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) c = max(c, key=cv2.contourArea).squeeze() c[:, 0] = c[:, 0] + x_offset/downsample