LIDC-IDRI肺结节数据集xml解释及读取

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内容为:

LIDC-IDRI肺结节数据集xml解释及读取_第1张图片

观察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 >中内容为:

LIDC-IDRI肺结节数据集xml解释及读取_第2张图片

内容说明为:

LIDC-IDRI肺结节数据集xml解释及读取_第3张图片

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 >.

你可能感兴趣的:(LIDC-IDRI)