【Python】SimpleITK使用笔记

这篇具有很好参考价值的文章主要介绍了【Python】SimpleITK使用笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 概念

1.1 nii格式

nii 格式是保存医学图像非常重要一种格式,nii 格式就是后缀名为 .nii.nii.gz 的文件,该格式又叫 NIfTI-1。核磁共振成像(MRI)或者CT图像通常会以这种格式保存。详见

这种格式的作用,简单来理解就是将索引坐标映射到体素坐标。在nii格式中,为了将索引坐标(数组下标)映射到体素坐标(空间坐标),除了保存图像的数据外,即一个个离散的像素,还保存了一些额外信息,比如每个像素间的距离,原点坐标,方向等等,这样根据像素间的距离就可以计算某一像素在空间中真正的坐标了。

1.2 SimpleITK

SimpleITK 是专门处理医学影像的软件,是 ITK 的简化接口,使用起来非常便捷,SimpleITK 支持 8 种编程语言,包括c++、Python、R、Java、c#、Lua、Ruby 和 TCL。

1.3 SimpleITK 图像

在 SimpleITK 中,图像的概念与我们在计算机视觉中常用的RGB图像差异很大,后者只是一个多维矩阵,是一个数学上的概念,而在 SimpleITK 中图像是一个物理实体,图像中的每一个像素都是物理空间中的一个点,不光有着像素值,还有坐标、间距、方向等概念。

SimpleITK 图像是多维度的(2D~5D),包含以下元数据

  1. Origin:原点,起始点所在的坐标
  2. Spacing:不同维度像素之间的距离,每个体素之间的距离
  3. Size:不同维度的尺寸
  4. Direction:矩阵每个轴的方向,由于图像未必是正交,所以会用方向向量来指明不同轴的方向。

【Python】SimpleITK使用笔记

2. 基本操作

2.1 常见属性

sitk中有以下四种常见的属性,分别可以使用get的方式获取,代码如下所示:

# 获取图像的大小,size为图像的每一个维度的长度,即每个维度像素点的个数
# 读取的顺序为[X, Y, Z], 即先宽度,后高度,再深度,对应的三维医学图像中为:先矢状位,后冠状位,再横断位。
print(image.GetSize()) 

# 获取图像的原点坐标,读取顺序同GetSize()方法
print(image.GetOrigin()) 

# 获取每个维度上像素或体素之间的间距,单位mm,其中对于二维图像是像素,三维图像是体素
# 读取顺序同GetSize()方法, 每个维度可以具有不同的间距,且每个维度不一定是正交的。
print(image.GetSpacing()) 

# 获取图像的方向,即图像坐标系相对世界坐标系的角度,角度采用的是方向余弦矩阵
print(image.GetDirection()) 

2.1 读取和保存图像

SimpleITK 可以读取如 .mhd , .nii, .nrrd等图像数据格式。

读取图像

imagepath = "xxx.mhd"   # 图像路径
image1 = sitk.ReadImage(imagepath)
image2 = sitk.ReadImage(imagepath, sitk.sitkFloat32) # 同时可以指定读取的数据类型

保存图像

writepath = "xxx.mhd"  # 保存图像路径
sitk.WriteImage(image, writepath)

像素类型

在读取图片的时候可以指定像素类型,像素类型表示为枚举类型,下面是部分枚举类型的表

数据类型 含义
sitkUInt8 无符号8位整数
sitkInt8 有符号的8位整数
sitkUInt16 无符号16位整数
sitkInt16 有符号的16位整数
sitkFloat32 32位浮点

2.2 SimpleITK图像数据和Numpy矩阵数据之间的转换

SimpleITK 中,各术语对应如下

Width: 宽度,X轴,矢状面(Sagittal
Height: 高度,Y轴,冠状面(Coronal
Depth: 深度, Z轴,横断面(Axial

SimpleITK图像顺序是x,y,z三个方向的大小;而numpy矩阵的顺序是z,y,x三个方向的大小, 要注意索引位置。

SimpleITK2Numpy

GetArrayFromImage():返回图像数据的副本。然后可以自由地修改数据,因为它对原始SimpleITK图像没有影响。

# sitk image to numpy 
shape_img = image.GetSize() #输出形状为:(Width, Height, Depth),即原始SimpleITK数据的存储形式
print("image size:", shape_img) # image size:(320, 250, 80)

datanp_array = sitk.GetArrayFromImage(image)
print("np_array size:", np_array.shape) # np_array size:(80, 250, 320)

因为在训练时一般是[x, y, z],所以我们在dataset中需要将图像的坐标轴转换一下,即做一个transpose(2, 1, 0)操作。

Numpy2SimpleITK

GetImageFromArray():返回一个SimpleITK图像,原点设置为0,所有维度的间距设置为1,方向余弦矩阵设置为identity,强度数据从numpy数组中复制。在大多数情况下需要设置适当的元数据值。

# numpy data to sitk 
imagesitk_image = sitk.GetImageFromArray(np_array) 

# 转换完成后,设置元数据
sitk_image.SetOrigin(origin)
sitk_image.SetSpacing(spacing)
sitk_image.SetDirection(direction)

参考:
Python中SimpleITK库的常用函数
使用SimpleITK读取、保存、处理nii文件
SimpleITK学习笔记文章来源地址https://www.toymoban.com/news/detail-446628.html

到了这里,关于【Python】SimpleITK使用笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python矩阵数据保存为.csv格式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 .csv文件 CSV格式的文件的简单保存与读取 保存Array类型数据为.csv格式,代码如下(示例): 需要保存的矩阵文件内容: 保存的文件内容,重新加载与源文件内容一致 以上就是今天要讲的内容,本文仅仅

    2024年02月14日
    浏览(42)
  • Python采集某网站文档,并保存word格式

    哈喽兄弟们 我们平常需要下载文档的时候,是不是发现,要么不能下载,要么不能复制,就能难受。 常见的文档网站很多,但是这里就不一一说名字了,emmm 那么我们今天来分享一下,如何用Python将这些不给下载的文档给批量下载下来。 你需要准备 开发环境 模块使用 两个

    2024年02月16日
    浏览(56)
  • 【Python】tensor格式数据转为图像,并保存图像详解和示例

    在项目中遇到一个tensor格式的数据,要保存为图像,此文对转换过程通过示例分享,以记录学习过程和帮助大家遇到同类问题时使用。 示例过程: (1)先创建一个张量,此处可以换成自己的数据。 (2)然后.detach()来释放与该结果相关的缓存。 (3)再转为CPU格式,避免某些

    2024年01月16日
    浏览(56)
  • C++ 使用 GDI+ 实现格式为bmp的图像内存转为jpg格式,并且可以实现旋转保存

    将获取的bmp内存数据,经过转换成jpg格式,根据自己的需求可以对图像先做旋转,再进行保存,主要用到的是GDI+工具。 函数的说明 /// /获取的图像内存数据 /// /图像的像素位数 /// /图像的宽度 /// /图像的高度 /// /图像保存的路径 /// /图像保存的路径加图像名称 ///

    2024年02月16日
    浏览(45)
  • vue-cli4中使用eslint,保存时自动格式,冲刺7天拿下Offer

    “editor.codeActionsOnSave”: { “source.fixAll.eslint”: true }, “eslint.run”: “onSave”, “files.autoSaveDelay”: 3000, “eslint.codeAction.disableRuleComment”: { }, “files.autoSave”: “off”, 项目中安装eslint 在package.json文件中的devDependencies里面添加: “@vue/cli-plugin-eslint”: “~4.4.0”, “babel-eslint”: “

    2024年04月15日
    浏览(34)
  • 【医学影像数据处理】 XML 文件格式处理汇总

    xml(Extensible Markup Language,简称:XML) 可扩展标记语言,是一种 netconf 配置文件的格式。是一种固有的分层数据格式,最自然的表示方式是解析成树状。 但是, xml 这样的标签数据,是 面向“机器”识别的,是不利于“人类”识别的 ,所以看起来会比较的麻烦。 2003年5月成

    2024年02月08日
    浏览(49)
  • 【python学习笔记】:实现网页视频自动下载并保存

    如何使用python爬虫实现网页视频自动下载并保存: 使用python爬取页面,然后自动下载视频,但是这样会有一个问题,我并不是需要所有视频,有些是垃圾视频不需要下载,python似乎还没法做到识别我对哪些视频是有价值的,所以这一步人工绕不开,我选择直接把目标视频的详

    2024年02月11日
    浏览(49)
  • 掌握Python 机器学习 读书笔记 9 (流水线 && 算法保存)

    在机器学习里可以看到有一些必要的步骤, 这些步骤是可以作为workflow 自动化的。 而且流水线可以对每个fold来进行处理, 这样很大程度避免了数据泄露。 这也是为什么使用流水线的原因。 使用机器学习的时候很容易落入一个陷阱, 就是泄露你的训练数据到测试数据。 为

    2024年03月09日
    浏览(47)
  • PyQt学习笔记-使用QSettings保存系统配置参数

    QSettings继承于QObject,位于PyQt6.QtCore模块中,是PyQt中用来存储配置信息的常用工具。 QSettings的API基于QVariant,允许您以最小的工作量保存大多数基于值的类型,例如QString,QRect和QImage。 可通过配置将应用程序需要保存的参数数据保存到本地,如windows的注册表,macOS 和 iOS 上的

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包