在检测到肺结节后,还需要可视化,这样才能为诊断服务。

我使用的项目地址为:https://github.com/wentaozhu/DeepLung

项目基于论文:DeepLung: Deep 3D Dual Path Nets for Automated Pulmonary Nodule Detection and Classification

该项目论文地址为:https://arxiv.org/abs/1801.09555

检测出肺结节可疑区域后,将其在原始CT图像上展示出来,原理比较简单,就是找出肺结节对应的切片,并圈出结节。贴下代码

首先是读取原始CT数据,需要sitk包,读取的filename是.mhd格式,里面包含CT图像的信息,不过数据其实在同名的.raw文件。

itkimage = sitk.ReadImage(filename)#读取.mhd文件
numpyImage = sitk.GetArrayFromImage(itkimage)#获取数据,自动从同名的.raw文件读取

之后,将其传入下面的函数,ct_scan就是上面的numpyImage。

def show_nodules(ct_scan,nodules,radius=20,pad=5,max_show_num=3):#radius是正方形边长一半,pad是边的宽度,max_show_num最大展示数

    show_index = []
for idx in xrange(nodules.shape[0]):#lable是一个nx4维的数组,n是肺结节数目,4代表x,y,z,以及直径
if idx<max_show_num:
if abs(nodules[idx,0])+abs(nodules[idx,1])+abs(nodules[idx,2])+abs(nodules[idx,3])==0: continue x, y, z = int(nodules[idx,0]), int(nodules[idx,1]), int(nodules[idx,2]) data = ct_scan[z] #注意 y代表纵轴,x代表横轴
data[max(0,y-radius):min(data.shape[0],y+radius), max(0,x-radius-pad):max(0,x-radius)] = 3000#竖线
data[max(0,y-radius):min(data.shape[0],y+radius), min(data.shape[1],x+radius):min(data.shape[1],x+radius+pad)] = 3000#竖线
data[max(0,y-radius-pad):max(0,y-radius), max(0,x-radius):min(data.shape[1],x+radius)] = 3000#横线
data[min(data.shape[0],y+radius):min(data.shape[0],y+radius+pad), max(0,x-radius):min(data.shape[1],x+radius)] = 3000#横线 if z in show_index:#检查是否有结节在同一张切片,如果有,只显示一张
continue
show_index.append(z)
plt.figure
plt.imshow(data,cmap='gray') plt.show()

需要强调的是,检测出的肺结节有不止一个,分布于不同切片,有些结节位于同一张切片,一般来讲,单个CT的肺结节数不会超过三个,所以只展示可能性最高的三个就应该够了。

此处可视化的办法是直接修改像素值,其它方法我还没有试过,相信只要能画出线条就可以。

结果展示

论文官方也给出了展示demo,不过略有不同,官方展示的是预处理后的切片,肺结节的位置自然也是与之对应,展示一下

LUNA16切片的大小统一为512X512,预处理后的尺寸明显不同了。

LUNA16数据集(二)肺结节可视化的更多相关文章

  1. 肺结节CT影像特征提取(二)——肺结节CT图像特征提取算法描述

    摘自本人毕业论文<肺结节CT影像特征提取算法研究> 医学图像特征提取可以认为是基于图像内容提取必要特征,医学图像中需要什么特征基于研究需要,提取合适的特征.相对来说,医学图像特征提取要求更 ...

  2. LUNA16数据集(三)预处理

    在(一)和(二)中简单介绍了LUNA16数据集的组成,以及肺结节的可视化,有了对数据集的基本了解后,还要对数据集进行预处理,计算机视觉中原始数据一般不会直接送入神经网络,这里也是如此. 这篇博客想写已 ...

  3. LUNA16数据集(一)简介

    LUNA16,全称Lung Nodule Analysis 16,是16年推出的一个肺部结节检测数据集,旨在作为评估各种CAD(computer aid detection计算机辅助检测系统)的ban ...

  4. 肺结节CT影像特征提取(四)——肺结节CT影像特征提取MATLAB代码实现

    之前的文章讲述了肺结节CT影像数据特征提取算法及基于MATLAB GUI设计的肺结节CT影像特征提取系统.本文将讲述几个主要部分的代码实现,分别是预处理.灰度特征提取.纹理特征提取.形态特征提取数据. ...

  5. 肺结节CT影像特征提取(三)——肺结节CT影像特征提取系统软件设计

    肺结节的特征提取在临床中有着重要应用,在上篇文章已经对肺结节的基本特征和CT影像特征提取算法有了介绍,提出了三类肺结节CT影像特征提取算法.本文重点介绍肺结节CT影像特征提取系统的功能介绍及使用,利用 ...

  6. 肺结节CT影像特征提取(五)——肺结节CT影像ROI区域灰度直方图及其图形化

    在博客肺结节CT影像特征提取中,已经实现了肺结节的灰度.纹理和形态特征的提取.但是,对于进一步了解ROI区域像素值或者说CT值的分布来说,还存在一定的不足,不能够很好的显示ROI区域. 因此,本文将进 ...

  7. 机器学习——logistic回归,鸢尾花数据集预测,数据可视化

    0.鸢尾花数据集 鸢尾花数据集作为入门经典数据集.Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数 ...

  8. 学习笔记TF056:TensorFlow MNIST,数据集、分类、可视化

    MNIST(Mixed National Institute of Standards and Technology)http://yann.lecun.com/exdb/mnist/ ,入门级计算机 ...

  9. TensorFlow 下 mnist 数据集的操作及可视化

    from tensorflow.examples.tutorials.mnist import input_data 首先需要连网下载数据集: mnsit = input_data.read_data ...

随机推荐

  1. 一次Mono解析Excel文档编码出错排查记录

    最近在捯饬Asp.Net站点部署到Linux平台上面,在文档导入的操作中经过网上搜索采用了能够支持跨平台的ExcelDataReader组建.在本地windows上测试通过NuGet安装的组建,这货依 ...

  2. C#调用带返回值的存储过程

    ()在SQL Server中建立如下的存储过程: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[GetNa ...

  3. 将openfire部署到CentOS云服务器上

    http://ishere.cn/2014/07/25/centos-64bit-openfire.html      CentOS 64位安装openfire http://www.cnblogs. ...

  4. linux命令-vim

    vim是vi的升级版 //////////////////////////////////////////////////////////////////////////////// 首先安装vim ...

  5. H264中的SPS、PPS提取与作用<转>

    牛逼的视频会议网站:http://wmnmtm.blog.163.com/blog/#m=0 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  6. equals()与hashCode()方法详解

    java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...

  7. 报错:空指针java.lang.NullPointerException 原因 Action层 private UserService userservice 上未加@Autowire注解

    java.lang.NullPointerException at com.itheima.test.Test2.fun1(Test2.java:18) at sun.reflect.NativeMe ...

  8. Windows libQGLViewer2.7.0,libQGLViewer2.6.2与g2o20160427, g2o20170730编译生成G2O

    1. Win10, VS2013, libQGLViewer2.6.2 和 QT5.6.3编译时候会出错,初步判断libQGLViewer2.6.2不支持QT5 错误 error LNK1120: 个 ...

  9. 线程池的原理以及实现线程池的类ExecutorService中方法的使用

    1.线程池:线程池就是就像一个容器,而这个容器就是用来存放线程的,且有固定的容量. 如果没有线程池,当需要一个线程来执行任务时就需要创建一个线程,我们设创建线程的时间为t1,执行线程的时间为t2,销毁 ...

  10. Linux系统命令Top/free的使用及参数详解

    1.作用 top命令用来显示执行中的程序进程,使用权限是所有用户. 2.格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 3.主要参数 d:指定更新的间隔,以秒 ...