LUNA16資料集肺結節系列一親測
ps主要是基於該博主https://home.cnblogs.com/u/wzyuan/feed/blog/2.html 的LUNA16資料集系列上的親測為更加小白的我一樣。博主的方法可行但是有些還有補全才能出結果,希望對你有幫助。
1.資料集太大了我就上傳我用的這個序列
連結:https://pan.baidu.com/s/1pcGQlQkE7ykGMczyz3JONw
提取碼:1h9k
2.改了之後的程式碼(相關庫可要自己裝了,不可以看之前的部落格或百度)
import SimpleITK as sitk
import matplotlib.pyplot as plt
import numpy as np
filename='E:\\JLS\\dcm_data\\luna\\subset1\\1.3.6.1.4.1.14519.5.2.1.6279.6001.173106154739244262091404659845.mhd'
itkimage = sitk.ReadImage(filename)#讀取.mhd檔案
OR=itkimage.GetOrigin()
print(OR)
SP=itkimage.GetSpacing()
print(SP)
numpyImage = sitk.GetArrayFromImage(itkimage)#獲取資料,自動從同名的.raw檔案讀取
def show_nodules(ct_scan, nodules,Origin,Spacing,radius=20, pad=2, max_show_num=4): # radius是正方形邊長一半,pad是邊的寬度,max_show_num最大展示數
show_index = []
for idx in range(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]-Origin[0])/SP[0]), int((nodules[idx, 1]-Origin[1])/SP[1]), int((nodules[idx, 2]-Origin[2])/SP[2])
print(x, y, z)
data = ct_scan[z]
radius=int(nodules[idx, 3]/SP[0]/2)
#pad = 2*radius
# 注意 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(idx)
plt.imshow(data, cmap='gray')
plt.show()
b = np.array([[-116.2874457,21.16102581,-124.619925,10.88839157],[-111.1930507,-1.264504521,-138.6984478,17.39699158],[73.77454834,37.27831567,-118.3077904,8.648347161]])
show_nodules(numpyImage,b,OR,SP)
3.結果影象
比較好的割出了結果。
4.針對這個資料很好的理解mhd引數和dcm的文章https://blog.csdn.net/zyc2017/article/details/84030903