文章目录

  • 数据集预览
    • CT图片和xml文件的对应关系
    • 查看dcm文件信息
    • 将dcm图像与xml标注文件配对

本文接着预览数据集的概况,看看图像文件和标注文件该如何处理。
本文所用代码: 我的Github

数据集预览

数据集分成三部分:
Images 为我们需要下载的影像资料。
Annotation Files 是目标检测的标注数据(即XML注释文件,标注了肿瘤位置和分类)。
Clinical Data 是患者相关的临床资料。

我们主要关注前两个部分。


Image部分含355个子文件夹,命名为"Lung_Dx-Xxxxx"。比如A0002,意为A分类(腺癌)的0002号病例。



Annotation Files 下是一些xml格式的标注文件,即目标检测的标注数据,标注了肿瘤位置和分类。
我们看到下图xml文件中标注了一个 A类 的物体(即 Bounding Box),以及它的四个坐标。
之后也有可能碰到一个xml文件标注了多个Bounding Box的情况,即一张CT标注了两个结节病灶。


这里有个问题,我们的CT图像和xml标注文件如何对应起来呢?即如何知道xml文件中描述的bounding box框对应的是哪一张CT图片呢?

CT图片和xml文件的对应关系

我们知道xml文件的文件名是一长串数字组成的,比如“1.3.6.1.4.1.14519.5.2.1.6655.2359.122259036515695905512549026864.xml”。
这是CT序列片中,一张CT图片的全局唯一标识,称为 SOP Instance UID。

我们可以用dcm软件(如RadiAnt)打开一张dcm影像文件,打开dcm文件的标签就可以看到SOP Instance UID。就是这个东西与xml文件一一对应了起来。


查看dcm文件信息

由于RadiAnt软件收费,我们完全可以使用python的pydicom库来查看处理dcm文件。
先通过pip install pydicom命令安装这个库。

然后,我们可以载入需要的dcm文件。
SOPInstanceUID属性即可查看 SOP Instance UID。
还可以获取像素矩阵,绘制出CT影像。
代码如下:

import pydicom
import matplotlib.pyplot as pltim = pydicom.read_file('manifest-1608669183333/Lung-PET-CT-Dx/Lung_Dx-A0001/04-04-2007-NA-Chest-07990/2.000000-5mm-40805/1-01.dcm')# 获取 UID
uid = im.SOPInstanceUID# 获取像素矩阵
img_arr = im.pixel_array
# 打印矩阵大小
print(img_arr.shape)# 绘制图像
plt.imshow(img_arr,cmap=plt.cm.gray)
plt.title("UID:{}".format(uid))

效果:


将dcm图像与xml标注文件配对

我们需要处理一下数据,将dcm图像与xml标注文件配对起来,并看看最后的锚框效果。

比如我们想要看看 A0001 号数据。

# 查看 A0001 号数据的图像文件和xml标注文件
import os# 查看指定目录下所有的dcm文件名
dcm_file=[]
for root, dirs, files in os.walk('manifest-1608669183333/Lung-PET-CT-Dx/Lung_Dx-A0001'):for file in files:file_path = os.path.join(root, file)if 'dcm' in file_path:dcm_file.append(file_path)
print(dcm_file[0])# 查看指定目录下所有的dcm文件的 SOP Instance UID
dcm_file_uid=[]
for dcm in dcm_file:im=pydicom.read_file(dcm)dcm_uid=im.SOPInstanceUIDdcm_file_uid.append(dcm_uid)
print(dcm_file_uid[0])# 查看指定Annotation的指定目录下所有的XML文件
xml_file=[]
for root, dirs, files in os.walk('Lung-PET-CT-Dx-Annotations-XML-Files-rev12222020/Annotation/A0001'):for file in files:file_path = os.path.join(root, file)      if 'xml' in file_path:xml_file.append(file_path)
print(xml_file[0])


# 从dcm_file找出“SOP Instance UID”与xml_file一致的文件
to_select_dcm = []
for xml in xml_file:xml_file_name = xml[66:-4]if xml_file_name in dcm_file_uid:idx = dcm_file_uid.index(xml_file_name)to_select_dcm.append(dcm_file[idx])
to_select_dcm[:5]


我们取第一张配对好的 dcm图片 和 XML标注文件,预览一下锚框的效果。

# 我们取第一张配对好的 dcm图片 和 XML标注文件
im, xml = to_select_dcm[0], xml_file[0]# 查看dcm图片文件
im = pydicom.read_file(im)# 获取 UID
uid = im.SOPInstanceUID
# 获取像素矩阵
img_arr = im.pixel_array
# 打印矩阵大小
print(img_arr.shape)
# 绘制图像
plt.imshow(img_arr,cmap=plt.cm.bone)
plt.title("UID:{}".format(uid))


# 取第1组标注框和类别
bbox, label = get_labelFromXml(xml)
bbox, label = bbox[0], label[0]  # 一张dcm图片可能对应多个标注框,这里取第1个def bbox_to_rect(bbox, color):# 将边界框(左上x,左上y,右下x,右下y)格式转换成matplotlib格式:# ((左上x,左上y),宽,高)return plt.Rectangle(xy=(bbox[0], bbox[1]), width=bbox[2]-bbox[0], height=bbox[3]-bbox[1],fill=False, edgecolor=color, linewidth=2)fig = plt.imshow(img_arr,cmap=plt.cm.bone)
plt.title("UID:{}".format(uid))fig.axes.add_patch(bbox_to_rect(bbox, 'red'))
fig.axes.text(bbox[0]+12, bbox[1]+12, label,va='center', ha='center', fontsize=12, color='red')

这样,我们就可以绘制锚框进行数据的预览了。

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——②预览数据集,绘制锚框相关推荐

  1. 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——①从TCIA获取影像数据集

    文章目录 数据集介绍 如何从TCIA下载数据集 下载数据集的一部分 数据集介绍 Lung-PET-CT-Dx是一个公开肺癌目标检测数据集,该公共数据集源自 The Cancer Imaging Arc ...

  2. 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——④转换成PASCAL VOC格式数据集

    文章目录 关于PASCAL VOC数据集 目录结构 ①创建VOC数据集的几个相关目录 XML文件的形式 ②读取dcm文件与xml文件的配对关系 ③创建VOC格式数据集 ④创建训练.验证集 本文所用代码 ...

  3. 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——③整理、验证数据,建立Dataset对象

    文章目录 数据整理 整理出所有的dcm文件 整理出所有的xml标注文件 整理数据①--舍弃错误的标注文件 整理数据②--两个标注文件指向同一个目标图片的情况 封装函数,传入xml文件,显示标注效果 整 ...

  4. Facebook 开源3D目标检测框架VoteNet,曾刷新两大数据集最高精度

    点击我爱计算机视觉标星,更快获取CVML新技术 VoteNet为Facebook何恺明等人于今年4月在论文Deep Hough Voting for 3D Object Detection in Po ...

  5. 快速玩转Yolov5目标检测—没有好的显卡也能玩(二)

    上篇  快速玩转Yolov5目标检测-没有好的显卡也能玩(一) 已经将YoloV5在我的笔记本电脑上快速跑起来了,因为电脑显卡一般,所以运行的CPU版本,从推理结果来看,耗时还是蛮高的,如下图,平均每 ...

  6. 快速玩转Yolov5目标检测—没有好的显卡也能玩(一)

    对目标检测关注很久了,比较有代表性的项目就是Yolov5了,前段时间终于安耐不住实验了一把. 多的不说了,先看下测试效果: 这是实时检测停车场的效果,还不错吧: 这是实时检测的北京卫视的效果: 安装方 ...

  7. 【目标检测实战】目标检测实战之一--手把手教你LMDB格式数据集制作!

    文章目录 1 目标检测简介 2 lmdb数据制作 2.1 VOC数据制作 2.2 lmdb文件生成 lmdb格式的数据是在使用caffe进行目标检测或分类时,使用的一种数据格式.这里我主要以目标检测为 ...

  8. 玩转CANN目标检测与识别一站式方案【介绍篇】

    背景介绍 目标检测与识别是计算机视觉领域中的关键技术,随着深度学习技术的发展,目标检测与识别的应用场景也越来越广泛.当前, 主要有以下几个应用场景: 安全领域:指纹识别.物体识别等. 交通领域:车牌号 ...

  9. 深度学习和目标检测系列教程 16-300:通过全球小麦数据集训练第一个yolov5模型

    @Author:Runsen 之前的检测系统重新利用分类器或定位器来执行检测,将模型应用于多个位置和比例的图像. Yolo 使用了一种完全不同的方法.它将单个神经网络应用于完整图像.该网络将图像划分为 ...

最新文章

  1. 【android-cocos2d-X2.2 环境配置】在Mac下搭建Cocos2d-X-android开发环境!
  2. python异常处理操作语句_异常处理语句(2)
  3. 飞凌 ok6410 按键驱动源码及测试代码
  4. postgresql中uuid的使用
  5. 计算机信息管理专业技能评价,计算机信息管理专业个人技能范文
  6. 百万数据php7取出循环_Thinkphp5 分批批量导出百万条数据记录的Code,不用PHPEXCEL哦!...
  7. Java - HashSet源码解析
  8. FabFilter Total Bundle 2021 Mac - 经典音频效果器合集
  9. Scrapy爬取起点小说网数据导入MongoDB数据库
  10. 【python】QQ 空间照片下载器
  11. 16 台服务器达成 1000 万 tpmC,挑战分布式数据库性能极限
  12. matlab插值与拟合例题_数学建模matlab插值与拟合
  13. 数字滤波算法——程序判断滤波
  14. 游戏美术基础:游戏贴图
  15. Servlet实现 教师管理系统
  16. 蚂蚁篇无聊吗?看看猎人骨灰粉丝绝妙分析(1)
  17. 网络协议栈分析——从设备驱动到链路层
  18. redis 学习曲线及记录笔记
  19. AttributeError: module ‘scipy.signal‘ has no attribute ‘correlation_lags‘
  20. 家居行业渠道商销售系统线上线下一体化运作,促进产品更新迭代

热门文章

  1. pytorch下搭建网络训练并保存模型
  2. windows域名映射
  3. oracle cmd窗口输入sqlplus / as sysdba 报协议适配器错误
  4. 2022年1月11日(星期二)
  5. 创建挂载squashfs
  6. 流程控制中的三种结构
  7. 【论文学习笔记】《Parallel WaveNet: Fast High-Fidelity Speech Synthesis》
  8. 新会计准则下金融工具的分类和计量
  9. 雷石服务器故障维修技术论坛,【图片】维修技术资料分享!!!!(不定期更新)!!!!【汽车维修技术吧】_百度贴吧...
  10. 十个小项目带你学会python编程,很简单,识字就行