mha格式的CT体数据转为jpg切片
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切片的更多相关文章
- 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 ...
- 关于多条数据转为json格式单次传输的问题 2017.05.27
数据形式如下: var mycars = [];//定义数组存放多条数据 for(var i=0;i<2;i++){ var jsonData = {};//定义变量存放单条数据 jsonDat ...
- 利用VTK和PyQt5对医学体数据进行渲染并展示
简介 在一些医学相关的简单的项目(也许是学生的作业?毕业设计?)中,有时候可能需要集成一些可视化的功能,本文简单介绍一下,如何利用PyQt5和VTK来渲染体数据(三维数据),并集成进PyQt的UI框架 ...
- 什么是体数据可视化(Volume data visualization)?及体绘制的各种算法和技术的特点?
该文对体数据进行综述,并介绍了体数据的各种算法和技术的特点. 前言 由于3D数据采集领域的高速发展,以及在具有交互式帧率的现代化工作站上执行高级可视化的可能性,体数据的重要性将继续迅速增长. 数据集可 ...
- iOS如何将RGB565的原始图像数据转为UIImage对象
我们在做一些图像处理时,往往会涉及到RGB565这种图像数据格式.由于其每个像素仅占2个字节,对于不需要像素透明度的情况下使用RGB565既能基本能保证图像的色彩,又能降低图像数据尺寸,节省带宽.因此 ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
- XML Schema格式的"日期型数据”数据库存取
对于XML Schema格式的"日期型数据"在数据库中存于datetime字段的时候,出现错误 mysql> select @@sql_mode; +------------ ...
- MyBatis异常:元素内容必须由格式正确的字符数据或标记组成
今天在写接口查询SQL时,报了一个异常,如下: Cause: org.apache.ibatis.builder.BuilderException: Error creating document i ...
- Mybatis 元素内容必须由格式正确的字符数据或标记组成
一个web应用,框架为SpringMVC Spring Mybatis ,昨天写了一下午的代码,因为逻辑较大,期间也没测,打算写完这个功能点在进行测试,谁知道写完的时候,tomcat根本启动不起来了, ...
随机推荐
- Java 学习笔记之 异常法停止线程
异常法停止线程: public class RealInterruptThread extends Thread { @Override public void run() { try { for ( ...
- Java8 Lambda表达式详解手册及实例
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...
- Spring Boot 二十个注解
Spring Boot 二十个注解 占据无力拥有的东西是一种悲哀. Cold on the outside passionate on the insede. 背景:Spring Boot 注解的强大 ...
- oracle表空间不足:ORA-01653: unable to extend table
问题背景: oracle表空间不足报错是比较常见的故障,尤其是没有对剩余表空间做定期巡检的系统: 报错代码如下: oracle表空间不足错误代码:ORA-01653: unable to extend ...
- 【Autofac打标签模式】AutoConfiguration和Bean
[ Autofac打标签模式]开源DI框架扩展地址: https://github.com/yuzd/Autofac.Annotation/wiki *:first-child { margin-to ...
- 04-04 AdaBoost算法代码(鸢尾花分类)
目录 AdaBoost算法代码(鸢尾花分类) 一.导入模块 二.导入数据 三.构造决策边界 四.训练模型 4.1 训练模型(n_e=10, l_r=0.8) 4.2 可视化 4.3 训练模型(n_es ...
- Cocos2d-x 学习笔记(18) Label
1. 简介 Label直接继承了Node LabelProtocol BlendProtocol,用于渲染文本,让文本呈现的效果丰富. Label有4种类型,: enum class LabelTyp ...
- 造轮子了!NETCore跨平台UI框架,CPF
CPF(暂时命名)(Cross platform framework),模仿WPF的框架,支持NETCore的跨平台UI框架,暂时不够完善,只用于测试,暂时只支持Windows和Mac.支持数据绑定, ...
- java学习3-流程控制与数组
1.顺序结构 2.分支结构 3.循环结构 4.控制循环结构 break continue return 5.数组
- IaaS基础平台
第一部分:IaaS云计算基础架构平台 服务器:先电 任务一.IaaS云平台搭建 基础环境: 1.使用命令行方式设置主机名,防火墙以及 SELinux 设置如下: (1)设置控制节点主机名 contro ...