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