Advertisement

LIDC数据集肺区分割

阅读量:

在使用LIDC数据集做肺结节检测时对肺区进行分割后效果会好很多,主要是减少肺区以外的组织对检测的干扰。

方法比较简单:

首先是阈值分割,设置CT值为480HU作为阈值对CT图像进行分割,得到二值图像,然后使用flood fill填充方法对肺区以外的部分进行填充,接下来使用形态学方法腐蚀掉肺区中的残余部分,最终将得到的结果作为掩模与原图像叠加得到肺区图像。

MATLAB代码:

复制代码
 def img_segmentation(dicom_file):

    
     threshold = -480 / dicom_file.RescaleSlope - dicom_file.RescaleIntercept
    
     mask=dicom_file.pixel_array
    
     mask=(mask>threshold).astype(np.float32)
    
     element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (10, 10))
    
     mask = cv2.erode(mask, element)
    
     cols,rows=mask.shape[:2]
    
     #cv2.imshow('mask', mask)
    
     #cv2.waitKey()
    
     mask_back=mask.copy()
    
     flood_mask=np.zeros([cols+2,rows+2],dtype=np.uint8)
    
     cv2.floodFill(mask,flood_mask,(0,0),255)
    
     element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (4, 4))
    
     mask = cv2.dilate(mask, element)
    
     #cv2.imshow('mask', mask)
    
     #cv2.waitKey()
    
     #mask=(mask.astype(np.uint8))*255
    
     #mask=255-mask
    
     #return mask
    
     #seg=mask*(dicom_file.pixel_array)
    
     mask=1.0-mask/255
    
     mask=mask-mask_back
    
     mask=mask*(mask>0)
    
     #mask=(mask.astype(np.uint8))*
    
     print mask.max(), mask.min()
    
     flood_mask = np.zeros([cols + 2, rows + 2], dtype=np.uint8)
    
     cv2.floodFill(mask, flood_mask, (0, 0), 255)
    
     print mask.max(), mask.min()
    
     mask=mask.astype(np.uint8)
    
     mask=(mask<128).astype(np.float32)
    
     #cv2.imshow('mask',mask)
    
     #cv2.waitKey()
    
     return mask

全部评论 (0)

还没有任何评论哟~