LIDC-IDRI 链接
这篇博客也有介绍
下边介绍该数据集的xml格式及用python读取.
xml_path = ‘xml说明文件绝对路径’
with open(xml_path, 'r') as xml_file:
markup = xml_file.read()
xml = BeautifulSoup(markup, features="xml")
使用 BeautifulSoup对其解析.
得到的markup内容为:
观察markup,根据xml的格式读取其内容.
提取步骤为:
一:提取患者号,患者号的标识符为< SeriesInstanceUid >
patient_id = xml.LidcReadMessage.ResponseHeader.SeriesInstanceUid.text
二:提取专家对该病例做出的诊断,标识符为< readingSession >
reading_sessions = xml.LidcReadMessage.find_all("readingSession")
三:在每一个 readingSession里边找结节信息,包括< unblindedReadNodule >和< nonNodule >
(一).先找< unblindedReadNodule >
1.
for reading_session in reading_sessions:
nodules = reading_session.find_all("unblindedReadNodule")
for nodule in nodules:
nodule_id = nodule.noduleID.text
2.找到结节编号noduleID
nodule_id = nodule.noduleID.text
3.再找< characteristics >,如果找到,则表示此结节为大结节,则可提取 CT号,然后搜索< roi >,每个< roi >< /roi >之间即为结节的坐标信息.
< characteristics >中内容为:
内容说明为:
4.找到< roi >
rois = nodule.find_all("roi")
5.提取< roi >< /roi >中的坐标信息.
每对< roi >< /roi >中的< imageZposition >< /imageZposition >中的数据表示层位置,结节坐标位置则在每对< roi >< /roi >中的< edgeMap > < /edgeMap >中,< imageSOP_UID >< /imageSOP_UID >中的数据是每张CT图像唯一的UID标识.
6.如果只找到< roi >没有找到< characteristics >,则表示小结节,只需提取中心坐标即可.
(二).再找< nonNodule >
表示非结节,找到所需的非结节信息.
当然也可以根据< roi >< /roi >的个数来确定是属于< unblindedReadNodule >或者< nonNodule >.因为< nonNodule >里边只有一个< roi >< /roi >,而< unblindedReadNodule >里边大于1个< roi >< /roi >.