Filling holes in objects that touch the border of an image
Asked Answered
C

1

13

I'm trying to fill holes in the below image.

image to be filled

When I use SciPy's binary_fill_holes(), I am generally successful, with the exception of objects that touch the image's border.

enter image description here

Are there any existing Python functions that can fill holes in objects that touch the border? I tried adding a white border around the image, but that just resulted in the entire image being filled.

Cashmere answered 10/3, 2014 at 20:21 Comment(1)
What if you draw a white border, but leave a hole in it next to a black region?Stationery
D
8

This assumes that there is more background than other stuff. It basically does a connected component analysis on the image. Extract the largest component (assumed to be the background), and sets everything else to white.

import numpy as np
import matplotlib.pyplot as plt
import skimage.morphology, skimage.data

img = skimage.data.imread('j1ESv.png', 1)
labels = skimage.morphology.label(img)
labelCount = np.bincount(labels.ravel())
background = np.argmax(labelCount)
img[labels != background] = 255
plt.imshow(img, cmap=plt.cm.gray)
plt.show()

enter image description here

Denni answered 10/3, 2014 at 23:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.