Example #1
0
def display_instance_gen(image, cyto_list, nuclei_list, alpha=0.5):
    h, w, _ = image.shape

    for idx, cyto in enumerate(cyto_list):
        cyto_mask = np.array(cyto, np.int)
        cyto_mask = [list(itertools.chain.from_iterable(cyto_mask.tolist()))]
        cyto_mask = maskUtils.frPyObjects(cyto_mask, h, w)
        cyto_mask = maskUtils.decode(cyto_mask[0])
        r, g, b = get_colors(int(2 * idx))
        image[:, :,
              0] = image[:, :, 0] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (b * alpha) + image[:, :, 0] * (1 - alpha))
        image[:, :,
              1] = image[:, :, 1] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (g * alpha) + image[:, :, 1] * (1 - alpha))
        image[:, :,
              2] = image[:, :, 2] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (r * alpha) + image[:, :, 2] * (1 - alpha))
    for idx, cyto in enumerate(nuclei_list):
        cyto_mask = np.array(cyto, np.int)
        cyto_mask = [list(itertools.chain.from_iterable(cyto_mask.tolist()))]
        cyto_mask = maskUtils.frPyObjects(cyto_mask, h, w)
        cyto_mask = maskUtils.decode(cyto_mask[0])
        r, g, b = get_colors(int(2 * idx + 1))
        image[:, :,
              0] = image[:, :, 0] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (b * alpha) + image[:, :, 0] * (1 - alpha))
        image[:, :,
              1] = image[:, :, 1] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (g * alpha) + image[:, :, 1] * (1 - alpha))
        image[:, :,
              2] = image[:, :, 2] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (r * alpha) + image[:, :, 2] * (1 - alpha))

    return image
Example #2
0
def display_instance_gen_rle(image, cyto_list, nuclei_list, alpha=0.5):
    h, w, _ = image.shape

    for idx, cyto in enumerate(cyto_list):
        cyto_mask = maskUtils.decode(cyto)
        r, g, b = get_colors(int(2 * idx))
        image[:, :,
              0] = image[:, :, 0] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (b * alpha) + image[:, :, 0] * (1 - alpha))
        image[:, :,
              1] = image[:, :, 1] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (g * alpha) + image[:, :, 1] * (1 - alpha))
        image[:, :,
              2] = image[:, :, 2] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (r * alpha) + image[:, :, 2] * (1 - alpha))
    for idx, cyto in enumerate(nuclei_list):
        cyto_mask = maskUtils.decode(cyto)
        r, g, b = get_colors(int(2 * idx + 1))
        image[:, :,
              0] = image[:, :, 0] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (b * alpha) + image[:, :, 0] * (1 - alpha))
        image[:, :,
              1] = image[:, :, 1] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (g * alpha) + image[:, :, 1] * (1 - alpha))
        image[:, :,
              2] = image[:, :, 2] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (r * alpha) + image[:, :, 2] * (1 - alpha))

    return image
Example #3
0
def vis_predict(dataset, gt, dt, name, show_gt=True):
    # input: list of dicts
    def convert_to_np(x):
        rle = x['segmentation']
        arr = maskUtils.decode(rle)
        return arr

    dt = map(convert_to_np, dt)
    name, w, h = name.split('~')
    # img = dataset._imgpath%name
    img = os.path.join(dataset.root, name + '.png')
    img = ops.open_slide(img)
    img = img.read_region((int(w), int(h)), 0,
                          (dataset.maxWS, dataset.maxWS)).convert("RGB")
    img = np.asarray(img)
    canvas = np.zeros_like(img, dtype=np.uint8)

    for idx, d in enumerate(dt):
        if d.shape != (1000, 1000):
            import pdb
            pdb.set_trace()
        r, g, b = get_colors(idx)
        canvas[:, :, 0] = canvas[:, :, 0] + b * d
        canvas[:, :, 1] = canvas[:, :, 1] + g * d
        canvas[:, :, 2] = canvas[:, :, 2] + r * d

    canvas2 = np.zeros_like(img, dtype=np.uint8)
    if show_gt:
        gt = map(convert_to_np, gt)

        for idx, ins in enumerate(gt):
            if ins.shape != (1000, 1000):
                import pdb
                pdb.set_trace()
            r, g, b = get_colors(idx)
            canvas2[:, :, 0] = canvas2[:, :, 0] + b * ins
            canvas2[:, :, 1] = canvas2[:, :, 1] + g * ins
            canvas2[:, :, 2] = canvas2[:, :, 2] + r * ins
    img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
    add_img = cv2.addWeighted(img, 0.5, canvas, 0.5, 0)
    add_img2 = cv2.addWeighted(img, 0.5, canvas2, 0.5, 0)
    return add_img, add_img2
Example #4
0
def vis_mask(masklist, image, normalize=[102.9801, 115.9465, 122.7717]):

    if isinstance(masklist, SegmentationMask):
        for i, polygon in enumerate(SegmentationMask):
            poly = polygon[0].polygons
            mask = np.asarray(poly[0])
            mask = np.reshape(mask, (int(len(mask) / 2), 2)).astype(np.int32)
            color = get_colors(i)
            image = np.asarray(image)
            cv2.polylines(np.asarray(image), [mask], 1, color.tuple(), 3)
            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    else:
        for j, mask in enumerate(masklist):
            mask = np.asarray(mask[0])
            mask = np.reshape(mask, (int(len(mask) / 2), 2)).astype(np.int32)
            color = get_colors(j)
            image = np.asarray(image)
            cv2.polylines(np.asarray(image), [mask], 1, color.tuple(), 3)
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    return image
Example #5
0
def vis_bbox(bboxlist, imagelist, normalize=[102.9801, 115.9465, 122.7717]):
    if isinstance(imagelist, ImageList):
        images = []
        for i, bbox in enumerate(bboxlist):
            if bbox.mode != 'xyxy':
                bbox = bbox.convert('xyxy')

            image = imagelist.tensors[i].numpy()
            image = np.squeeze(image)
            image = np.transpose(image, (1, 2, 0))
            image += normalize

            image = image.copy()
            for j in range(bbox.bbox.shape[0]):
                box_coordinate = bbox.bbox[j].numpy().astype(np.int32)
                color = get_colors(j)
                image = cv2.rectangle(image,
                                      tuple(box_coordinate[:2]),
                                      tuple(box_coordinate[2:]),
                                      color=color.tuple(),
                                      thickness=3)
            images.append(image)
    else:
        bbox = bboxlist
        image = imagelist

        if bbox.mode != 'xyxy':
            bbox = bbox.convert('xyxy')
        image = image.copy()

        for j in range(bbox.bbox.shape[0]):
            box_coordinate = bbox.bbox[j].numpy().astype(np.int32)
            color = get_colors(j)
            image = cv2.rectangle(image,
                                  tuple(box_coordinate[:2]),
                                  tuple(box_coordinate[2:]),
                                  color=color.tuple(),
                                  thickness=3)
        images = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    return images
Example #6
0
def visualize_pseudo_label(mask, image, alpha=0.5):
    RLES = []
    for segm in mask.polygons:
        rles = maskUtils.frPyObjects([p.numpy() for p in segm.polygons], 800,
                                     800)
        rle = maskUtils.merge(rles)
        RLES.append(rle)
    for idx, cyto in enumerate(RLES):
        cyto_mask = maskUtils.decode(cyto)
        r, g, b = get_colors(int(2 * idx))
        image[:, :,
              0] = image[:, :, 0] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (b * alpha) + image[:, :, 0] * (1 - alpha))
        image[:, :,
              1] = image[:, :, 1] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (g * alpha) + image[:, :, 1] * (1 - alpha))
        image[:, :,
              2] = image[:, :, 2] * (cyto_mask == 0) + (cyto_mask > 0) * (
                  (r * alpha) + image[:, :, 2] * (1 - alpha))
    return image
Example #7
0
def display_instance_dt(dataset,
                        image_name,
                        dt,
                        show_masks=True,
                        show_bbox=True,
                        alpha=0.5,
                        show_caption=True):
    '''

    :param image: h,w,c
    :param dt, gt : dict
    :param title:  (optional) Figure title
    :param figsize:(optional) the size of the image
    :param color: (optional) An array or colors to use with each object
    :param captions:(optional) A list of strings to use as captions for each object
    :return:
    '''

    # input: list of dicts

    def convert_seg_to_np(x):
        rle = x['segmentation']
        arr = maskUtils.decode(rle)
        return arr

    seg_dt = list(map(convert_seg_to_np, dt))

    name, w, h = image_name.split('~')
    # img = dataset._imgpath%name
    img = os.path.join(dataset.root, name)
    img1 = cv2.imread(img)
    # canvas = np.zeros_like(img, dtype =  np.uint8)
    # 1. draw masks
    if show_masks:
        for idx, d in enumerate(seg_dt):
            r, g, b = get_colors(idx)
            # visualize masks
            # convert list to numpy
            img1[:, :, 0] = img1[:, :, 0] * (d == 0) + (d > 0) * (
                (b * d * alpha) + img1[:, :, 0] * (1 - alpha))
            img1[:, :, 1] = img1[:, :, 1] * (d == 0) + (d > 0) * (
                (g * d * alpha) + img1[:, :, 1] * (1 - alpha))
            img1[:, :, 2] = img1[:, :, 2] * (d == 0) + (d > 0) * (
                (r * d * alpha) + img1[:, :, 2] * (1 - alpha))
    # 2. show others
    for idx, d in enumerate(seg_dt):
        r, g, b = get_colors(idx)
        # visualize masks
        contour_list = maskToPolygons(d)
        cv2.polylines(img1, contour_list, True, (b, g, r), thickness=1)
        if show_bbox:
            bbox = dt[idx]['bbox']
            cv2.rectangle(img1, (round(bbox[0]), round(bbox[1])),
                          (round(bbox[2]), round(bbox[3])), (b, g, r),
                          thickness=1)
        # add information
        class_id = dt[idx]['category_id'][0]
        score = dt[idx]['score']
        if show_caption:
            x = random.randint(int(bbox[1]), round((bbox[1] + bbox[3]) / 2))
            caption = "{} {:.3f}".format(class_id, score)
            cv2.putText(img1, caption, (round(bbox[0]), x),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (b, g, r), 2,
                        cv2.LINE_AA)
    # canvas2 = np.zeros_like(img, dtype =  np.uint8)

    return img1
Example #8
0
def display_instance(dataset,
                     image_name,
                     gt,
                     dt,
                     show_masks=False,
                     show_bbox=True,
                     show_gt=True,
                     alpha=0.5,
                     show_caption=True):
    '''

    :param image: h,w,c
    :param dt, gt : dict
    :param title:  (optional) Figure title
    :param figsize:(optional) the size of the image
    :param color: (optional) An array or colors to use with each object
    :param captions:(optional) A list of strings to use as captions for each object
    :return:
    '''

    # input: list of dicts
    def convert_seg_to_np(x):
        rle = x['segmentation']
        arr = maskUtils.decode(rle)
        return arr

    seg_dt = list(map(convert_seg_to_np, dt))

    name, w, h = image_name.split('~')
    # img = dataset._imgpath%name
    try:
        img = os.path.join(dataset.root, name + '.png')
        img = ops.open_slide(img)
    except:
        img = os.path.join(dataset.root, 'image', name + '.png')
        img = ops.open_slide(img)
    # pdb.set_trace()
    # img = img.read_region(0, 0, 0, (3152, 2760)).convert("RGB")
    img = img.read_region((int(w), int(h)), 0,
                          (dataset.maxWS, dataset.maxWS)).convert("RGB")
    img = np.asarray(img)
    img1 = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
    img2 = img1.copy()
    # canvas = np.zeros_like(img, dtype =  np.uint8)
    # 1. draw masks
    # pdb.set_trace()
    if show_masks:
        for idx, d in enumerate(seg_dt):
            r, g, b = get_colors(idx)
            # visualize masks
            # convert list to numpy
            img1[:, :, 0] = img1[:, :, 0] * (d == 0) + (d > 0) * (
                (b * d * alpha) + img1[:, :, 0] * (1 - alpha))
            img1[:, :, 1] = img1[:, :, 1] * (d == 0) + (d > 0) * (
                (g * d * alpha) + img1[:, :, 1] * (1 - alpha))
            img1[:, :, 2] = img1[:, :, 2] * (d == 0) + (d > 0) * (
                (r * d * alpha) + img1[:, :, 2] * (1 - alpha))
    # 2. show others
    # pdb.set_trace()
    for idx, d in enumerate(seg_dt):
        r, g, b = get_colors(idx)
        # visualize masks
        contour_list = maskToPolygons(d)
        cv2.polylines(img1, contour_list, True, (b, g, r), thickness=1)
        if show_bbox:
            bbox = dt[idx]['bbox']
            cv2.rectangle(img1, (round(bbox[0]), round(bbox[1])),
                          (round(bbox[2]), round(bbox[3])), (b, g, r),
                          thickness=1)
        # add information
        class_id = dt[idx]['category_id'][0]
        score = dt[idx]['score']
        if show_caption:
            x = random.randint(int(bbox[1]), round((bbox[1] + bbox[3]) / 2))
            caption = "{} {:.3f}".format(class_id, score)
            cv2.putText(img1, caption, (round(bbox[0]), x),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (b, g, r), 1,
                        cv2.LINE_AA)
    # canvas2 = np.zeros_like(img, dtype =  np.uint8)
    # img2 = None
    if show_gt:
        # 1. show masks
        pdb.set_trace()
        seg_gt = list(map(convert_seg_to_np, gt))
        if show_masks:
            for idx, ins in enumerate(seg_gt):
                r, g, b = get_colors(idx)
                img2[:, :, 0] = img2[:, :, 0] * (ins == 0) + (ins > 0) * (
                    (b * ins * alpha) + img2[:, :, 0] * (1 - alpha))
                img2[:, :, 1] = img2[:, :, 1] * (ins == 0) + (ins > 0) * (
                    (g * ins * alpha) + img2[:, :, 1] * (1 - alpha))
                img2[:, :, 2] = img2[:, :, 2] * (ins == 0) + (ins > 0) * (
                    (r * ins * alpha) + img2[:, :, 2] * (1 - alpha))
        # 2. show others
        for idx, ins in enumerate(seg_gt):
            r, g, b = get_colors(idx)
            contour_list = maskToPolygons(ins)
            cv2.polylines(img2, contour_list, True, (b, g, r), thickness=2)
            if show_bbox:
                bbox = gt[idx]['bbox']
                cv2.rectangle(img2, (round(bbox[0]), round(bbox[1])),
                              (round(bbox[2]), round(bbox[3])), (b, g, r),
                              thickness=3)
                x = random.randint(int(bbox[1]), round(
                    (bbox[1] + bbox[3]) / 2))
                class_id = gt[idx]['category_id'][0]
                caption = "{}".format(class_id)
                cv2.putText(img2, caption, (round(bbox[0]), x),
                            cv2.FONT_HERSHEY_SIMPLEX, 0.5, (b, g, r), 2,
                            cv2.LINE_AA)

    return img1, img2