Удалить шум в изображении BW

Я использовал MATLAB для создания этого изображения (используя bwareaopen). В середине у меня есть двухмерный эллипсоид. Как я могу очистить весь "шум", окружающий его, и получить чистый эллипсоид?

введите описание изображения здесь

исходное изображение

введите описание изображения здесь

1 ответ

Решение

Посмотрите на это решение. Как уже упоминалось в комментариях, я использовал DoG - Разница Гаусса

Что значит DoG?

Сначала вы должны взять два отдельных гауссиана изображения с двумя отдельными ядрами. (Под гауссовым я подразумеваю применение размытия по Гауссу). Разница двух результирующих называется DoG.

Вот что я сделал:

  • Преобразовал данное изображение в серую шкалу:

введите описание изображения здесь

  • Затем я применил двустороннюю фильтрацию, чтобы сохранить края и сгладить не края:

введите описание изображения здесь

(Если вы внимательно посмотрите, вы можете увидеть разницу).

  • Применимо размытие по Гауссу к изображению выше:

введите описание изображения здесь

  • Теперь выполнил DoG с двумя вышеупомянутыми изображениями, чтобы получить это: (Я просто вычитал два изображения выше)

введите описание изображения здесь

  • Затем я выполнил морфологическую операцию, используя ядро эллипса для усиления края ячейки:

введите описание изображения здесь

  • Чтобы удалить нежелательные пятна вокруг изображения, я выполнил медианную фильтрацию и в итоге получил следующее:

введите описание изображения здесь

Вы можете усовершенствовать этот процесс, чтобы получить улучшенное изображение.

РЕДАКТИРОВАТЬ:

Вот код, который я использовал:

import cv2

filename = 'Cell.jpg'
img = cv2.imread(filename)
cv2.imwrite('img.jpg',img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imwrite('gray.jpg',gray)

bi = cv2.bilateralFilter(gray,7,75,75)
cv2.imwrite('bi.jpg',bi)
blur = cv2.GaussianBlur(bi,(3,3),0)
cv2.imwrite('blur.jpg',blur)
blur1 = cv2.GaussianBlur(bi,(17,17),0)
dog = blur1 - bi
cv2.imwrite('DoG.jpg',dog)

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
close = cv2.morphologyEx(dog, cv2.MORPH_CLOSE, kernel, 13)
cv2.imwrite('close.jpg',close)

median = cv2.medianBlur(close,3)
cv2.imwrite('median.jpg',median)

cv2.waitKey(0)
cv2.destroyAllWindows()   
Другие вопросы по тегам