mha格式的CT体数据转为jpg切片

mha格式

.mha文件是一种体数据的存储格式,由一个描述数据的头和数据组成,一般我们拿到的原始医学影像的数据是.dcm也就是dicom文件,dicom文件很复杂包含了各种各样的标签,通常我们只关心dicom里的影像信息,所以一般会把多个dicom切片转成一个文件,例如.mha .mhd文件,这些文件里只包含简单的描述信息和体数据信息,便于处理。.mha的文件的样子如下图

上半部分是关于数据的介绍,例如数据的维数,体素的真实的大小,数据的存储的类型等,下面的XXX等,就是数据部分了,ElementType就解释了下面的数据是一个一个Short类型的数,一共51251258个Short类型的数。

.mhd文件和.mha文件类型,不过.mha文件一般分为.mhd文件和.raw文件,相当于.mha文件的两部分,一部分是描述信息,一部分是纯数据文件。

窗宽窗宽

一般CT值在-1000+1000范围内,有2000多个级别,而一般显示器能显示出256个级别(灰度图0-255),所以不能展现出所有信息(就算可以,人眼也分辨不了),所以需要定一个范围,例如在以40为中心,400为宽度的范围内,展示图像信息,即-160240之间的CT值要显示出来,低于-160都算作-160,高于240的都算作240,即把-160240映射到0255,这样设置不同窗位和窗宽就能展示不同组织的信息(不同组织的CT值不同)。

将.mha转换成jpg切片

下面将利用opencv和simpleitk,将.mha文件转为一组jpg文件。

import SimpleITK as sitk
import numpy as np
import cv2
import os def mha2jpg(mhaPath,outFolder,windowsCenter,windowsSize): """
The function can output a group of jpg files by a specified mha file.
Args:
mhaPath:mha file path.
outfolder:The folder that the jpg files are saved.
windowsCenter:the CT windows center.
windowsSize:the CT windows size.
Return:void """
image = sitk.ReadImage(mhaPath)
img_data = sitk.GetArrayFromImage(image)
channel = img_data.shape[0] if not os.path.exists(outFolder):
os.makedirs(outFolder) low = windowsCenter-windowsSize/2
high = windowsCenter+windowsSize/2 for s in range(channel):
slicer = img_data[s,:,:]
slicer[slicer<low] = low
slicer[slicer>high] = high
slicer = slicer-low
img = cv2.normalize(slicer, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
cv2.imwrite(os.path.join(outFolder,str(s)+'.jpg'),img) def main():
mha = input("Enter the mha path:")
out = input("Enter the out folder:")
wc = int(input("Enter the windows center:"))
ws = int(input("Enter the windows size:"))
mha2jpg(mha,out,wc,ws) if __name__ == "__main__":
main()

结果

这里随机选取了两张张转换后的切片,分别选择不同窗宽的窗位,可以得到下图

计划

博主正在学习医学影像处理相关方面的技能和知识,新开了一个git,会把觉得有用的可复用的代码丢进去,刚刚起步,目前还比较空

https://github.com/MangoWAY/medicalImageScriptDemo

mha格式的CT体数据转为jpg切片的更多相关文章

  1. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  2. 关于多条数据转为json格式单次传输的问题 2017.05.27

    数据形式如下: var mycars = [];//定义数组存放多条数据 for(var i=0;i<2;i++){ var jsonData = {};//定义变量存放单条数据 jsonDat ...

  3. 利用VTK和PyQt5对医学体数据进行渲染并展示

    简介 在一些医学相关的简单的项目(也许是学生的作业?毕业设计?)中,有时候可能需要集成一些可视化的功能,本文简单介绍一下,如何利用PyQt5和VTK来渲染体数据(三维数据),并集成进PyQt的UI框架 ...

  4. 什么是体数据可视化(Volume data visualization)?及体绘制的各种算法和技术的特点?

    该文对体数据进行综述,并介绍了体数据的各种算法和技术的特点. 前言 由于3D数据采集领域的高速发展,以及在具有交互式帧率的现代化工作站上执行高级可视化的可能性,体数据的重要性将继续迅速增长. 数据集可 ...

  5. iOS如何将RGB565的原始图像数据转为UIImage对象

    我们在做一些图像处理时,往往会涉及到RGB565这种图像数据格式.由于其每个像素仅占2个字节,对于不需要像素透明度的情况下使用RGB565既能基本能保证图像的色彩,又能降低图像数据尺寸,节省带宽.因此 ...

  6. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  7. XML Schema格式的"日期型数据”数据库存取

    对于XML Schema格式的"日期型数据"在数据库中存于datetime字段的时候,出现错误 mysql> select @@sql_mode; +------------ ...

  8. MyBatis异常:元素内容必须由格式正确的字符数据或标记组成

    今天在写接口查询SQL时,报了一个异常,如下: Cause: org.apache.ibatis.builder.BuilderException: Error creating document i ...

  9. Mybatis 元素内容必须由格式正确的字符数据或标记组成

    一个web应用,框架为SpringMVC Spring Mybatis ,昨天写了一下午的代码,因为逻辑较大,期间也没测,打算写完这个功能点在进行测试,谁知道写完的时候,tomcat根本启动不起来了, ...

随机推荐

  1. ThinkPHP5通过composer安装Workerman安装失败问题(避坑指南)

    $ composer require topthink/think-workerUsing version ^2.0 for topthink/think-worker./composer.json ...

  2. Python 对cookies的处理——urllib2

    import urllib2 import cookielib cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2 ...

  3. Redis AOF 持久化详解

    Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是一旦进程退出,Redis 的数据就会丢失. 为了解决这个问题,Redis 提供了 RDB 和 ...

  4. Mysql高手系列 - 第22篇:深入理解mysql索引原理,连载中

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第22篇. 背景 使用mys ...

  5. MySQL8安装及使用当中的一些注意事项

    前言 这两天构建新项目,在本地安装的mysql8(本地环境windows),期间忘了密码,又卸载重装了一番,然后捣鼓了一顿授权给别人访问,最后磕磕绊绊的搞好了,下面是在这过程中遇到的问题及解决办法小结 ...

  6. 开发一个带UI的库(asp.net core 3.0)

    在GitHub上有个项目,本来是作为自己研究学习.net core的Demo,没想到很多同学在看,还给了很多星,所以觉得应该升成3.0,整理一下,写成博分享给学习.net core的同学们. 项目名称 ...

  7. MongoDB 走马观花(全面解读篇)

    目录 一.简介 二.基本模型 BSON 数据类型 分布式ID 三.操作语法 四.索引 索引特性 索引分类 索引评估.调优 五.集群 分片机制 副本集 六.事务与一致性 一致性 小结 一.简介 Mong ...

  8. eclipse中Tomcat version 9.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5, 6, 7, and 8 Web modules

    eclipse中导入了一个别人的项目,运行时提示没有可以使用的服务器,如下: 查看了下项目属性设置中的服务器,还是提示没有可用服务器: 尝试对部署在已有服务器下的项目Add and Remove... ...

  9. C语言入门-结构类型

    一.声明结构类型 #include <stdio.h> int main(int argc, char const *argv[]) { // 声明结构类型 struct date { i ...

  10. 数据结构(java)

    数据结构1.什么是数据结构?数据结构有哪些? 数据结构是指数据在内存中存放的机制. 不同的数据结构在数据的查询,增删该的情况下性能是不一样的. 数据结构是可以模拟业务场景. 常见的数据结构有:栈,队列 ...