Можно ли использовать morphology.remove_small_objects для удаления небольшого шума? - PullRequest
0 голосов
/ 25 октября 2019

В моем двоичном изображении много шума (маленькие белые пятна размером около 3-6 пикселей). Можно ли использовать функцию skimage.morphology.remove_small_objects (), чтобы удалить эти маленькие капли?

В моих экспериментах функция оставляет изображение неизменным. Я неправильно использую эту функцию или она не подходит для того, чего я хочу достичь?

src = cv2.imread('plan4.png')
src = cv2.GaussianBlur(src, (3,3), 1)

edges = get_edges(src.copy())

noise_reduced = morphology.remove_small_objects(edges .copy(), 2,)

cv2.imshow('src', src)
cv2.imshow('noise_reduced', noise_reduced)
cv2.imshow('edges ', edges )

Ниже приведен оригинал с маленькими белыми каплями (которые я хочу удалить) и результат remove_small_objects()обратите внимание, что они одинаковы, и капли не удалены. * Примечание: морфологическое закрытие или открытие изображения может привести к удалению этих маленьких пятен, но это также сильно ухудшает мои линии. Я действительно предпочитаю находить капли размером около 6 пикселей и удалять их.

enter image description here

1 Ответ

3 голосов
/ 26 октября 2019

Когда вы передаете целочисленное изображение, scikit-image предполагает, что все пиксели с одинаковыми значениями принадлежат одному и тому же объекту, даже если они не связаны. Итак, в вашем случае все пиксели считаются частью одного (большого) объекта, поэтому ни один из них не удаляется. Вместо этого вы должны использовать

from skimage.measure import label

noise_reduced = morphology.remove_small_objects(label(edges), 2,)

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...