Невозможно обрезать изображение сетчатки - PullRequest
0 голосов
/ 04 октября 2019

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

retinal_image_cropped.jpg.

В чем проблема со следующим кодом. ,

Исходное изображение выглядит следующим образом

original_retinal_image.jpg

import cv2
# Load image, convert to grayscale, and find edges
image = cv2.imread('IDRiD_001.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
canny = cv2.Canny(gray, 120, 255, 1)

# Find contour and sort by contour area
cnts = cv2.findContours(canny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = sorted(cnts, key=cv2.contourArea)

# Find bounding box and extract ROI
for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    ROI = image[y:y+h, x:x+w]
    break

cv2.imwrite('retinal_image.jpg',ROI)

1 Ответ

1 голос
/ 04 октября 2019

Это связано с тем, что ROI назначен ограничивающий прямоугольник последнего контура в списке cnts. Либо определите ROI вне цикла for и возьмите объединение ROI, используя оператор union |, либо каким-либо образом убедитесь, что существует только один контур.

top = []
left = []
bot = []
right = []
for c in cnts:
    x, y, w, h = cv2.boundingRect(c)
    top.append(y)
    bot.append(y+h)
    left.append(x)
    right.append(x+w)

t, l, b, r = (min(top), min(left), max(bot), max(right))
ROI = image[t:b, l:r]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...