Разделение границ ячеек на следующем изображении, а также подсчет ядер с использованием python - PullRequest
0 голосов
/ 27 апреля 2020

Я пытался использовать водораздел с Оцу для определения порога, но он только собирает ядерные границы, я хочу разделить границы ячеек

Я использовал Оцу с последующим удалением шума с открытием, идентифицируя верный фон, применяя преобразование расстояния, используя его для определения верного переднего плана, определения неизвестного, создания маркеров enter image description here

import cv2
import numpy as np
img = cv2.imread("images/bio_watershed/Osteosarcoma_01.tif")

cells=img[:,:,0]  
#Threshold image to binary using OTSU. ALl thresholded pixels will be set 
#to 255

ret1, thresh = cv2.threshold(cells, 0, 255, 
cv2.THRESH_BINARY+cv2.THRESH_OTSU)



# Morphological operations to remove small noise - opening

 kernel = np.ones((3,3),np.uint8)
 opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, 
 iterations = 2)

 # finding sure background

 sure_bg = cv2.dilate(opening,kernel,iterations=10)
 #applying dustance transform

 dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5)

 ret2, sure_fg 
 =cv2.threshold(dist_transform,0.5*dist_transform.max(),255,0)


 # Unknown region 
 sure_fg = np.uint8(sure_fg)
 unknown = cv2.subtract(sure_bg,sure_fg)

 #Now we create a marker and label the regions inside. 

 ret3, markers = cv2.connectedComponents(sure_fg)


 #add 10 to all labels so that sure background is not 0, but 10

 markers = markers+10

 # Now, mark the region of unknown with zero

 markers[unknown==255] = 0

 #applying watershed 

 markers = cv2.watershed(img,markers)

 # color boundaries in yellow. 

 img[markers == -1] = [0,255,255]  

 img2 = color.label2rgb(markers, bg_label=0)

 cv2.imshow('Overlay on original image', img)
 cv2.imshow('Colored Cells', img2)
 cv2.waitKey(0)

, запустив этот код, я получаю следующую ядерную сегментацию границ, но хочу получить границы ячеек nuclear segmentation

Большое спасибо за вашу помощь

...