Может несколько сегментировать кровеносные сосуды, вычитая размытое изображение из изображения зеленого канала, но контуры нескольких сосудов все еще удаляются при удалении контуров в определенной области (шум).В настоящее время я удаляю все контуры под площадью 100, но когда я двигаюсь до 1000 или 500, многие сосуды разбиваются.
Сначала я вычел медианный размытый зеленый канал из исходного изображения зеленого канала,Я пробовал простой cv2.blur, медианное размытие и двусторонний фильтр, но результаты практически совпадают.Я не знаю, нужно ли мне делать определенные морфологические операции, но общая цель - слишком убедиться, что контуры кровеносных сосудов все еще связаны, когда я удаляю большие контуры шума.
Код:
import os
import numpy as np
import cv2
def vessels(file):
img = cv2.imread(file)
#green channel extraction to provide most vessel information
imgG = img[:,:,1]
imgblurred = cv2.blur(imgG, (100,100))
f5 = imgG - imgblurred
ret,f6 = cv2.threshold(f5,15,255,cv2.THRESH_BINARY)
mask = np.ones(f5.shape[:2], dtype="uint8") * 255
im2, contours, hierarchy = cv2.findContours(f6.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
if cv2.contourArea(cnt) <= 100:
cv2.drawContours(mask, [cnt], -1, 0, -1)
im = cv2.bitwise_and(f5, f5, mask=mask)
ret,fin = cv2.threshold(im,15,255,cv2.THRESH_BINARY_INV)
return fin
Это оригинал:
Это то, что я могу создать, не удаляя слишком много шума:
Слабый шум:
Но когда у меня мало шума, у некоторых глаз кровеносные сосуды разбиваются и удаляются на полпути: