Как улучшить сегментацию сосудов, чтобы части кровеносных сосудов не удалялись при удалении небольших контуров? - PullRequest
0 голосов
/ 20 июня 2019

Может несколько сегментировать кровеносные сосуды, вычитая размытое изображение из изображения зеленого канала, но контуры нескольких сосудов все еще удаляются при удалении контуров в определенной области (шум).В настоящее время я удаляю все контуры под площадью 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

Это оригинал: Original Image

Это то, что я могу создать, не удаляя слишком много шума: Lots of Noise

Слабый шум: Little Noise

Но когда у меня мало шума, у некоторых глаз кровеносные сосуды разбиваются и удаляются на полпути: Problem when Little Noise

...