导入相关的库
import SimpleITK as sitk
import numpy as np
import pandas as pd
import radiomics
from radiomics import featureextractor
导入文件
我们有两个文件,一个是原始图像的nii文件,一个是标签图像的nii文件。
# 读取原始NII文件
image_nii = sitk.ReadImage(r"C:\Users\Administrator\Desktop\Breast\AN_HAI_YING_DCE.nii")
# 读取标签NII文件
label_nii = sitk.ReadImage(r"C:\Users\Administrator\Desktop\Breast\Segmentation-Segment_1-label.nii")
实例化
然后实例化函数:也可以不传入参数,可以传入一些参数进行设置。
一些具体参数的设置参考使用pyradiomics提取影像组学特征【详细】_pyradiomics特征提取-CSDN博客
# 创建PyRadiomics的特征提取器
params = {'binWidth': 25} # 可以根据需要调整参数
extractor = featureextractor.RadiomicsFeatureExtractor(**params)
进行特征提取
# 提取特征
feature = extractor.execute(image_nii, label_nii)
打印我们的特征信息
# 打印提取的特征信息
for key, value in feature.items():
print(f"Feature '{key}' = {value}")
将特征保存到CSV文件
保存到csv文件中,不保存行列名。
# 将特征保存到CSV文件
result = pd.DataFrame([feature])
result = result.transpose()
result.to_csv(r"C:\Users\Administrator\Desktop\Breast\result.csv", index=False, header=False)
print("特征提取完成并保存到CSV文件。")
特征提取代码
import SimpleITK as sitk
import numpy as np
import pandas as pd
import radiomics
from radiomics import featureextractor
# 读取原始NII文件
image_nii = sitk.ReadImage(r"C:\Users\Administrator\Desktop\Breast\AN_HAI_YING_DCE.nii")
# 读取标签NII文件
label_nii = sitk.ReadImage(r"C:\Users\Administrator\Desktop\Breast\Segmentation-Segment_1-label.nii")
# 创建PyRadiomics的特征提取器
params = {'binWidth': 25} # 可以根据需要调整参数
extractor = featureextractor.RadiomicsFeatureExtractor(**params)
# 提取特征
feature = extractor.execute(image_nii, label_nii)
# 打印提取的特征信息
for key, value in feature.items():
print(f"Feature '{key}' = {value}")
# 将特征保存到CSV文件
result = pd.DataFrame([feature])
result = result.transpose()
result.to_csv(r"C:\Users\Administrator\Desktop\Breast\result.csv", index=False, header=False)
print("特征提取完成并保存到CSV文件。")
代码中用到的都是nii格式的文件
dcm转化为nii
我们需要将dcm文件转化为nii文件
#coding=utf-8
import SimpleITK as sitk
import os
def dcm2nii(dcms_path, nii_path):
# 1.构建dicom序列文件阅读器,并执行(即将dicom序列文件“打包整合”)
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(dcms_path)
reader.SetFileNames(dicom_names)
image2 = reader.Execute()
# 2.将整合后的数据转为array,并获取dicom文件基本信息
image_array = sitk.GetArrayFromImage(image2) # z, y, x
origin = image2.GetOrigin() # x, y, z
spacing = image2.GetSpacing() # x, y, z
direction = image2.GetDirection() # x, y, z
# 3.将array转为img,并保存为.nii.gz
image3 = sitk.GetImageFromArray(image_array)
image3.SetSpacing(spacing)
image3.SetDirection(direction)
image3.SetOrigin(origin)
sitk.WriteImage(image3, os.path.join(nii_path,))
dcms_path = r"F:\300多的乳腺MR图像\良性\enhance\BAI_JING_WEN-220411262" # dicom序列文件所在路径
nii_path = r"C:\Users\Administrator\Desktop\Breast\benign\BAI_JING_WEN.nii" # 所需.nii.gz文件保存路径
dcm2nii(dcms_path, nii_path)
参考文档医学图像将dcm格式转化的nii格式如何处理_dcm转nii-CSDN博客
参考视频
影像组学 特征提取(3Dslicer插件与pyradiomics 两个方法)_哔哩哔哩_bilibili
完整代码
import os
import pandas as pd
import SimpleITK as sitk
import radiomics
from radiomics import featureextractor
''''
origin_path是存放原图nii的文件夹
label_path是存放标签nii的文件夹
csv_file_path是存放结果的csv文件
'''
origin_path = r"C:\Users\Administrator\Desktop\Breast\benign\DCE"
label_path = r"C:\Users\Administrator\Desktop\Breast\benign_label"
# 设置 CSV 文件路径
csv_file_path = r"C:\Users\Administrator\Desktop\Breast\result.csv"
# 如果 CSV 文件已存在,则删除
if os.path.exists(csv_file_path):
os.remove(csv_file_path)
# 创建特征提取器
extractor = featureextractor.RadiomicsFeatureExtractor()
patients = os.listdir(label_path)
# 逐个处理每个病人
for p in patients:
name = p.split("-")[0]
origin = os.path.join(origin_path, name + ".nii")
label = os.path.join(label_path, p)
# 读取原始NII文件
origin_nii = sitk.ReadImage(origin)
# 读取标签NII文件
label_nii = sitk.ReadImage(label)
# 提取特征
feature = extractor.execute(origin_nii, label_nii)
result = pd.DataFrame([feature])
# 在DataFrame中添加Name列
result.insert(0, 'Name', name)
# 将特征追加到CSV文件中
result.to_csv(csv_file_path, mode='a', index=False, header=not os.path.exists(csv_file_path))
print("特征提取完成并追加到CSV文件。")