Ejemplo n.º 1
0
def flood_image(original_image_path, flooded_output_path):
    """
    Floods background of the image, starting at seeds that
    are obtained at the edges in unknown areas. After
    filling, unknown areas should only be inside particles.
    :param original_image_path: Path to input image
    :param flooded_output_path: Path to flooded image
    :return: Image where background is BG_COLOR and rest is
             either UNKNOWN_COLOR or FG_COLOR.
    """
    img = cv2.imread(original_image_path, 0)
    sure_fg = Filters.threshold(img, 130, False)

    #equalize histogram
    # equalized_img = ImageUtilities.histeq(img)
    # plt.subplot(121), plt.imshow(img, cmap='gray')
    # plt.title('img'), plt.xticks([]), plt.yticks([])
    # plt.subplot(122), plt.imshow(equalized_img, cmap='gray')
    # plt.title('equalized_img'), plt.xticks([]), plt.yticks([])
    # plt.show()

    # Scharr filter
    grad = Filters.scharr(img)
    grad_8 = np.uint8(grad)

    grad_bg = Filters.threshold(grad_8, 4, True)
    grad_bg[np.all([grad_bg == 0, img < 55], axis=0)] = 255
    sure_bg = grad_bg - sure_fg

    sure_bg_filtered = Filters.median_filter(sure_bg, 3)

    cv2.imwrite('Gradient.tif', grad_bg)
    cv2.imwrite('Gradient_Background.tif', grad_bg)
    cv2.imwrite('Sure_Background_Filtered.tif', sure_bg_filtered)

    sure_bg_inv = Filters.threshold(sure_bg_filtered, 2, True)
    sure_bg_inv = (sure_bg_inv // 255) + 1
    sure_bg_flood = np.copy(sure_bg_inv)

    seeds = find_seeds(sure_bg_flood)

    flood_fill(seeds, sure_bg_flood, UNKNOWN_COLOR, BG_COLOR)

    cv2.imwrite(flooded_output_path, sure_bg_flood)

    return sure_bg_flood