为了账号安全,请及时绑定邮箱和手机立即绑定

按顺序导入图像数据集

按顺序导入图像数据集

守着星空守着你 2021-12-09 10:42:03
我正在尝试按顺序导入 3D 图像并将识别标签链接到每个文件夹。目前我有代码可以为 dicom 文件执行此操作,但我也在尝试使用 .tiff 图像文件:data_dir = "\\tiff\\"patients =  os.listdir(data_dir)labels_df = pd.read_csv('\\tiff_labels.csv', index_col = 0)IMG_PX_SIZE = 50HM_SLICES = 20def process_data(patient, labels_df, image_px_size = 50, hm_slices = 20, visualize = False):    label = labels_df.at[patient, 'label']    path = data_dir + patient    slices = [pydicom.read_file(path + '/' + s, force = True) for s in os.listdir(path)]    slices.sort(key = lambda x: int(x.ImagePositionPatient[2]))我尝试将第 9 行和第 10 行更改为:slices = [cv2.imread(path + '/' + s) for s in os.listdir(path)]slices.sort()我发现的问题在第 10 行:key = lambda x: int(x.ImagePositionPatient[2])。ImagePositionPatient 是 dicoms 独有的东西,无法找到用另一种方式对图像进行排序的方法。我收到错误:Traceback (most recent call last):  File "preprocessing_data.py", line 83, in <module>    image_data, label = process_data(patient, labels_df, image_px_size = IMG_PX_SIZE, hm_slices = HM_SLICES)  File "preprocessing_data.py", line 28, in process_data    slices.sort()ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

如果您尝试对 numpy 数组列表进行排序,请尝试以下操作:

slices.sort(key=len)


查看完整回答
反对 回复 2021-12-09
?
冉冉说

TA贡献1877条经验 获得超1个赞

我看到的问题是

slices = [cv2.imread(path + '/' + s) for s in os.listdir(path)]

创建一个仅包含图像数据的数组列表,没有可用于排序的有意义的信息。如果你想按文件名排序,你可以这样做:

slices = [[s,cv2.imread(path + '/' + s)] for s in os.listdir(path)]

它为您读取的每个文件创建一个包含 2 个条目的列表,第一个条目是文件名,第二个条目是图像数据。然后slices.sort()开箱即用。但是您必须索引这两个列表才能获取图像数据。例如,要访问第 5 个图像,将是slices[5][1].


查看完整回答
反对 回复 2021-12-09
  • 2 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信