Обнаружить диск opti c на изображении сетчатки, используя обнаружение контура в opencv? - PullRequest
2 голосов
/ 07 мая 2020

У меня есть следующее изображение сетчатки, и я пытаюсь нарисовать круг вокруг диска opti c (белая круглая форма на изображении сетчатки). Вот исходное изображение:

enter image description here

Я применил адаптивное пороговое значение, затем cv2.findcontour:

import cv2
def detectBlob(file):
    # read image
    img = cv2.imread(file)
    imageName = file.split('.')[0]
    # convert img to grayscale
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # do adaptive threshold on gray image
    thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 101, 3)

    # apply morphology open then close
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
    blob = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (20,20))
    blob = cv2.morphologyEx(blob, cv2.MORPH_CLOSE, kernel)

    # invert blob
    blob = (255 - blob)

    # Get contours
    cnts,hierarchy = cv2.findContours(blob, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

        # write results to disk
    result = img.copy()
    cv2.drawContours(result, cnts, -1, (0, 0, 255), 3)
    cv2.imwrite(imageName+"_threshold.jpg", thresh)
    cv2.imwrite(imageName+"_blob.jpg", blob)
    cv2.imwrite(imageName+"_contour.jpg", result)

detectBlob('16.png')

Вот что порог выглядит так:

enter image description here

Вот окончательный вывод контуров:

enter image description here

В идеале ищу такой вывод:

enter image description here

Ответы [ 2 ]

3 голосов
/ 08 мая 2020

Адаптивная установка пороговых значений не выполняется, поскольку размер фильтра слишком мал. И хотя мы этого не понимаем, волны на заднем фоне весьма возмущают.

Я получил интересный результат, уменьшив разрешение изображения в 16 раз и применив адаптивный фильтр размером 99x99.

enter image description here

0 голосов
/ 07 мая 2020

Вам необходимо определить более крупные конструкции. В идеале вам понадобится структура размером примерно 1/4 радиуса диска opti c, чтобы сбалансировать результаты и время обработки (экспериментируйте с большими размерами, пока не станет приемлемым).

Или вы можете уменьшить разрешение изображения (уменьшить разрешение и уменьшите изображение), что более или менее то же самое, даже если вы потеряете точность на границах диска opti c.

...