pyradiomics 官方文檔里有幾個(gè)示例文件,里面涉及了包括yaml文件設(shè)置、feature extraction、可視化等一系列影像組學(xué)常規(guī)操作,是非常好的學(xué)習(xí)資料。源碼請(qǐng)參考:https://github.com/AIM-Harvard/pyradiomics
今天學(xué)習(xí)標(biāo)題名為"PyRadiomics toolbox in Python"的這份文檔。
0 加載module和函數(shù)
# Radiomics package
from radiomics import featureextractor
import six, numpy as np
1 獲取圖像及其掩模文件(Setting up data)
import os
import SimpleITK as sitk
from radiomics import getTestCase
imagepath_1, labelpath_1 = getTestCase('brain1')
imagepath_2, labelpath_2 = getTestCase('brain2')
image_1 = sitk.ReadImage(imagepath_1)
label_1 = sitk.ReadImage(labelpath_1)
image_2 = sitk.ReadImage(imagepath_2)
label_2 = sitk.ReadImage(labelpath_2)
- 查看圖像(Show the images)
# Display the images
%matplotlib inline
import matplotlib.pyplot as plt
plt.figure(figsize=(20,20))
# First image
plt.subplot(2,2,1)
plt.imshow(sitk.GetArrayFromImage(image_1)[12,:,:], cmap="gray")
plt.title("Brain #1")
plt.subplot(2,2,2)
plt.imshow(sitk.GetArrayFromImage(label_1)[12,:,:])
plt.title("Segmentation #1")
# Second image
plt.subplot(2,2,3)
plt.imshow(sitk.GetArrayFromImage(image_2)[8,:,:], cmap="gray")
plt.title("Brain #2")
plt.subplot(2,2,4)
plt.imshow(sitk.GetArrayFromImage(label_2)[8,:,:])
plt.title("Segmentation #2")
plt.show()

rad_fig1.png
- 提取特征值(Extract the features)
import os
# Instantiate the extractor
params = os.path.join(os.getcwd(), '..', 'examples', 'exampleSettings', 'Params.yaml')
extractor = featureextractor.RadiomicsFeatureExtractor(params)
result_1 = extractor.execute(image_1, label_1)
result_2 = extractor.execute(image_2, label_2)
- 作圖準(zhǔn)備(Prepare for plotting)
# Make an array of the values
feature_1 = np.array([])
feature_2 = np.array([])
for key, value in six.iteritems(result_1):
if key.startswith("original_"): # excluding meta-features
feature_1 = np.append ( feature_1, result_1[key])
feature_2 = np.append ( feature_2, result_2[key])
- 繪圖(可視化brain1和2的特征值,及其差異)
plt.figure(figsize=(20,20))
plt.subplot(3,1,1)
plt.plot(feature_1)
plt.yscale('log')
plt.title ( "Features from brain #1")
plt.subplot(3,1,2)
plt.plot(feature_2)
plt.yscale('log')
plt.title ( "Features from brain #1")
plt.subplot(3,1,3)
plt.plot(feature_1 - feature_2)
plt.yscale('log')
plt.title ( "Difference")
plt.show()

rad_fig2.png
Notes:不曉得為什么,沒(méi)有畫(huà)出和源碼里一樣的圖。嘗試在不同環(huán)境下Windows和MacOs使用pyradiomics也不奏效。