Есть ли какой-либо способ улучшить определение контура области зрачка по декартову изображению радужной оболочки?

#python-3.x #opencv

#python-3.x #opencv

Вопрос:

Итак, у меня есть изображения радужки, которые я превратил в декартовы изображения, включая область зрачка. Теперь проблема в том, что мне нужно удалить область зрачка с изображения. (область / размер зрачка различны для каждого изображения)

Я попытался замаскировать область зрачка, установив порог и найдя контур зрачка. Но результаты не очень хорошие, потому что некоторые изображения имеют отражение света, а некоторые имеют аналогичное пороговое значение с областью радужной оболочки.

 # convert to binary image
ret, thresh = cv.threshold(image, 35, 255, cv.THRESH_BINARY)

# dilate image to reduce hole in pupil area
kern = np.ones((5,5), np.uint8)
dilated = cv.dilate(thresh, kern, iterations =1)

# detect contour of pupil area by looking for the biggest contour found
contours,_= cv.findContours(dilated, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
maxContour = 0
for contour in contours:
    contourSize = cv.contourArea(contour)
    if contourSize > maxContour:
        maxContour = contourSize
        maxContourData = contour

# create mask amp; mask pupil contour area
mask = np.zeros_like(image)
cv.fillPoly(mask, [maxContourData], 1)
masked_pupil = np.multiply(image, mask)
  

Я ожидаю, что только область зрачка замаскирована, но на некоторых изображениях я действительно получил, что область зрачка частично замаскирована и связана с областью радужки.

Вот результирующие изображения:https://postimg.cc/FfGNWfbK
https://postimg.cc/fVcwdqJm

Комментарии:

1. Не могли бы вы добавить одно из проблемных изображений?

2. @J.D. Я обновил сообщение