获取肿瘤的最大层面
影像组学分析过程中,有时候会进行最大层面的计算。
本文记录我的计算ROI最大层面的思路,供大家参考。
因为代码是我自己摸索写出,如果其中有什么疑问或者觉得代码有什么问题的, 请私信,以便修正。
思路
ROI是N×M×H的矩阵,里面只有0和1,先统计每个层面的0和1的数目。
然后比较每个层面的1的大小,1最多的就是最大ROI层面。
具体操作如下:
import SimpleITK as sitk
mask_img = sitk.ReadImage(img_path)
mask_img_arr = sitk.GetArrayFromImage(mask_img)
all_slice_lable_count = cal_ROI_counter(mask_img_arr) # 输入mask_img_arry,获取每个层面的不同label的面积值
max_value = -1 # 最大ROI的lable值
max_area = 0 # 最大ROI的面积
max_id = 1314 # 最大ROI的index
for i in range(len(all_slice_lable_count)):
if all_slice_lable_count[i]:
temp_area = max(all_slice_lable_count[i].values())
temp_value = max(all_slice_lable_count[i], key=all_slice_lable_count[i].get)
if temp_area >= max_area:
max_area = temp_area
max_value = temp_value
max_id = i
else:
continue
获取肿瘤的最大层面,max_id是最大ROI的index
# 获取肿瘤的最大层面,max_id是最大ROI的index
return mask_img_arr,max_value,max_id,max_area
相关函数定义区
def cal_ROI_counter(mask_img_arr): # 输入mask_img_arry,获取每个层面的不同label的面积值
all_slice_lable_count = []
for i in range(mask_img_arr.shape[0]):
dc = dict(Counter(mask_img_arr[i,:,:].flatten()))
del dc[0]
all_slice_lable_count.append(dc)
return all_slice_lable_count
PS:如果有疑问和错误,请私信,但是苦逼上班族996,如果需要帮忙解决小白报错,求各位老板付费咨询,万分感谢!