def load_center_evaluate(idx_row, df_annot, path_annot, path_visu=None, col_prefix=''): """ complete pipeline fon input image and seg_pipe, such that load them, generate points, compute features and using given classifier predict labels :param (int, DF:row) idx_row: :param {str: ...} params: :param {str: str} paths: :param classif: :return {str: float}: """ idx, row = idx_row dict_row = dict(row) dict_row['image'] = os.path.splitext( os.path.basename(dict_row['path_image']))[0] if not idx in df_annot.index: logging.debug( 'particular image/slice "%s" does not contain eggs ' 'of selected stage %s', idx, col_prefix) return dict_row name, img, segm, centres = run_train.load_image_segm_center((None, row)) if centres is None: logging.debug('center missing "%s"', idx) return dict_row assert all(c in df_annot.columns for c in tl_visu.COLUMNS_POSITION_EGG_ANNOT), \ 'some required columns %s are missing for %s' % \ (tl_visu.COLUMNS_POSITION_EGG_ANNOT, df_annot.columns) mask_eggs = estimate_eggs_from_info(df_annot.loc[idx], img.shape[:2]) try: if EXPORT_ANNOT_EGGS: path_img = os.path.join(path_annot, idx + '.png') tl_data.io_imsave(path_img, mask_eggs.astype(np.uint8)) if VISUAL_ANNOT_EGGS: fig = tl_visu.figure_image_segm_results(img, mask_eggs) fig.savefig(os.path.join(path_visu, idx + '_eggs.png')) plt.close(fig) if VISUAL_SEGM_CENTRES: run_clust.export_draw_image_centers_clusters(path_visu, name, img, centres, segm=segm) labels = np.array([1] * len(centres)) dict_stat = compute_statistic_eggs_centres(dict_row, centres, labels, mask_eggs, img, segm, path_visu, col_prefix) except Exception: logging.error(traceback.format_exc()) dict_stat = dict_row return dict_stat
def show_segm_results_2d(img, seg, path_dir, fig_name='test_segm_.png'): """ show and expert segmentation results :param ndarray img: input image :param ndarray seg: resulting segmentation :param str path_dir: path to the visualisations :param str fig_name: figure name """ fig = tl_visu.figure_image_segm_results(img, seg) path_fig = os.path.join(path_dir, fig_name) fig.savefig(path_fig, bbox_inches='tight', pad_inches=0.1) if logging.getLogger().getEffectiveLevel() == logging.DEBUG: plt.show() plt.close(fig)
def export_visual(idx_name, img, segm, debug_visual=None, path_out=None, path_visu=None): """ export visualisations :param str idx_name: :param ndarray img: input image :param ndarray segm: resulting segmentation :param debug_visual: dictionary with debug images :param str path_out: path to dir with segmentation :param str path_visu: path to dir with debug images """ logging.info('export results and visualization...') if set(np.unique(segm)) <= set([0, 1]): segm *= 255 path_img = os.path.join(path_out, str(idx_name) + '.png') logging.debug('exporting segmentation: %s', path_img) im_seg = Image.fromarray(segm.astype(np.uint8)) im_seg.convert('L').save(path_img) # io.imsave(path_img, segm) if path_visu is not None and os.path.isdir(path_visu): path_fig = os.path.join(path_visu, str(idx_name) + '.png') logging.debug('exporting segmentation results: %s', path_fig) fig = tl_visu.figure_image_segm_results(img, segm) fig.savefig(path_fig) plt.close(fig) if path_visu is not None and os.path.isdir(path_visu) \ and debug_visual is not None: path_fig = os.path.join(path_visu, str(idx_name) + '_debug.png') logging.debug('exporting (debug) visualization: %s', path_fig) fig = tl_visu.figure_segm_graphcut_debug(debug_visual) fig.savefig(path_fig, bbox_inches='tight', pad_inches=0.1) plt.close(fig)
def visualise_overlap(path_img, path_seg, path_out, b_img_scale=BOOL_IMAGE_RESCALE_INTENSITY, b_img_contour=BOOL_SAVE_IMAGE_CONTOUR, b_relabel=BOOL_ANNOT_RELABEL, segm_alpha=MIDDLE_ALPHA_OVERLAP): img, _ = tl_data.load_image_2d(path_img) seg, _ = tl_data.load_image_2d(path_seg) # normalise alpha in range (0, 1) segm_alpha = tl_visu.norm_aplha(segm_alpha) if b_relabel: seg, _, _ = segmentation.relabel_sequential(seg) if img.ndim == 2: # for gray images of ovary img = np.rollaxis(np.tile(img, (3, 1, 1)), 0, 3) if b_img_scale: p_low, p_high = np.percentile(img, q=(3, 98)) # plt.imshow(255 - img, cmap='Greys') img = exposure.rescale_intensity(img, in_range=(p_low, p_high), out_range='uint8') if b_img_contour: path_im_visu = os.path.splitext(path_out)[0] + '_contour.png' img_contour = segmentation.mark_boundaries(img[:, :, :3], seg, color=COLOR_CONTOUR, mode='subpixel') plt.imsave(path_im_visu, img_contour) # else: # for colour images of disc # mask = (np.sum(img, axis=2) == 0) # img[mask] = [255, 255, 255] fig = tl_visu.figure_image_segm_results(img, seg, SIZE_SUB_FIGURE, mid_labels_alpha=segm_alpha, mid_image_gray=MIDDLE_IMAGE_GRAY) fig.savefig(path_out) plt.close(fig)
def export_draw_image_segm_contour(img, segm, path_out, name, suffix=''): logging.debug('export draw image segmentation countours') fig = tl_visu.figure_image_segm_results(img, segm) fig.savefig(os.path.join(path_out, name + suffix + '.png')) plt.close(fig)