LUNA16數據集(二)肺結節可視化


在檢測到肺結節后,還需要可視化,這樣才能為診斷服務。

我使用的項目地址為:https://github.com/wentaozhu/DeepLung

項目基於論文:DeepLung: Deep 3D Dual Path Nets for Automated Pulmonary Nodule Detection and Classification

該項目論文地址為:https://arxiv.org/abs/1801.09555

檢測出肺結節可疑區域后,將其在原始CT圖像上展示出來,原理比較簡單,就是找出肺結節對應的切片,並圈出結節。貼下代碼

首先是讀取原始CT數據,需要sitk包,讀取的filename是.mhd格式,里面包含CT圖像的信息,不過數據其實在同名的.raw文件。

itkimage = sitk.ReadImage(filename)#讀取.mhd文件
numpyImage = sitk.GetArrayFromImage(itkimage)#獲取數據,自動從同名的.raw文件讀取

之后,將其傳入下面的函數,ct_scan就是上面的numpyImage。

def show_nodules(ct_scan,nodules,radius=20,pad=5,max_show_num=3):#radius是正方形邊長一半,pad是邊的寬度,max_show_num最大展示數
    
    show_index = []
    for idx in xrange(nodules.shape[0]):#lable是一個nx4維的數組,n是肺結節數目,4代表x,y,z,以及直徑
        if idx<max_show_num:
            if abs(nodules[idx,0])+abs(nodules[idx,1])+abs(nodules[idx,2])+abs(nodules[idx,3])==0: continue

            x, y, z = int(nodules[idx,0]), int(nodules[idx,1]), int(nodules[idx,2])

            data = ct_scan[z]

            #注意 y代表縱軸,x代表橫軸
            data[max(0,y-radius):min(data.shape[0],y+radius), max(0,x-radius-pad):max(0,x-radius)] = 3000#豎線
            data[max(0,y-radius):min(data.shape[0],y+radius), min(data.shape[1],x+radius):min(data.shape[1],x+radius+pad)] = 3000#豎線
            data[max(0,y-radius-pad):max(0,y-radius), max(0,x-radius):min(data.shape[1],x+radius)] = 3000#橫線
            data[min(data.shape[0],y+radius):min(data.shape[0],y+radius+pad), max(0,x-radius):min(data.shape[1],x+radius)] = 3000#橫線

            if z in show_index:#檢查是否有結節在同一張切片,如果有,只顯示一張
                continue
            show_index.append(z)
            plt.figure
            plt.imshow(data,cmap='gray')
        
    plt.show()

需要強調的是,檢測出的肺結節有不止一個,分布於不同切片,有些結節位於同一張切片,一般來講,單個CT的肺結節數不會超過三個,所以只展示可能性最高的三個就應該夠了。

此處可視化的辦法是直接修改像素值,其它方法我還沒有試過,相信只要能畫出線條就可以。

結果展示

 

論文官方也給出了展示demo,不過略有不同,官方展示的是預處理后的切片,肺結節的位置自然也是與之對應,展示一下

LUNA16切片的大小統一為512X512,預處理后的尺寸明顯不同了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM