Не удалось точно определить кровеносные сосуды - PullRequest
0 голосов
/ 16 октября 2018

Существует ли какая-либо функция в OpenCV или Skimage для точного определения тонких сосудов или какая операция рекомендуется?Потому что мое сегментированное изображение содержит гораздо меньше деталей по сравнению с изображением истинной земли.

import cv2 as cv
import numpy as np

img = cv.imread('dataset.tif')
cv.imshow('Input Image',img)

b,g,r= cv.split(img)
cv.imshow('Red Channel',r)
cv.imshow('Green Channel',g)
cv.imshow('Blue Channel',b)
img2= cv.bitwise_not(g)
cv.imshow('Processed Image',img2)

kernel3 = cv.getStructuringElement(cv.MORPH_ELLIPSE,(13,13))

tophat = cv.morphologyEx(img2, cv.MORPH_TOPHAT, kernel3)
cv.imshow('Top hat',tophat)

thres= 12
maxValue = 255
ret,thresh41 = cv.threshold(tophat,thres, maxValue,cv.THRESH_TOZERO)
th, dat = cv.threshold(tophat, thres, maxValue, cv.THRESH_BINARY)
cv.imshow('thresh',dat)
kernel1 = cv.getStructuringElement(cv.MORPH_ELLIPSE,(2,2))
dilation = cv.dilate(dat,kernel1,iterations = 1)
erosion = cv.erode(dilation,kernel1,iterations = 1)
erosion1=cv.GaussianBlur(erosion,(5,5),0)
erosion1=cv.blur(erosion,(5,5),0)
x=cv.subtract(dilation,erosion1)
x = cv.medianBlur(x,5)
cv.imshow("op1",x)
b2=cv.add(erosion,x)
cv.imshow("fin",b2)
#dilation2 = cv.dilate(b2,kernel1,iterations = 1)
output=cv.erode(b2,kernel1,iterations=1)
cv.imshow("Result image",output)


cv.waitKey(0)
cv.destroyAllWindows()

Сегментированный кровеносный сосуд: Segmented blood vessel

Изображение истинной земли: Ground truth image

...