在已知DICOM和三维模型对应掩膜的情况下,计算三维模型的体积。

思路:

1、计算每个体素的体积。每个体素为长方体,x,y为PixelSpacing,z为层间距

使用pydicom.read_file读取DICOM文件,dcm_tag.PixelSpacing获取像素间距,dcm_tag.SliceLocation 获取层间距

2、计算体素的个数

代码如下: from PIL import Image

import numpy as np

import pydicom

import os

def get_pixels_No(bmp_data_dir):

pixels_No = 0

bmp_files = os.listdir(bmp_data_dir)

for bmp in bmp_files:

bmp_file = os.path.join(bmp_data_dir,bmp)

img = Image.open(bmp_file)

img_array = np.array(img)

# img_array.dtype为布尔类型,需要转换为Int类型,其累加和恰好为体素总和

img_array_int = img_array.astype(int)

pixels_No = pixels_No+img_array_int.sum()

return pixels_No

def get_pixel_info(dcm_data_dir):

pixel_infos = []

dcm_files = os.listdir(dcm_data_dir)

dcm_file_1 = os.path.join(dcm_data_dir,dcm_files[0])

dcm_tag_1 = pydicom.read_file(dcm_file_1)

# 获取像素间距.

spacex, spacey = dcm_tag_1.PixelSpacing

# 获取层间距

# 有些 dcm图像并不是按照InstanceNumber进行排序的,不能直接用最后一张的slicelocation减去第一张,再除以张数

SliceLocations = []

ImagePositon_z = []

for dcm in dcm_files:

dcm_file = os.path.join(dcm_data_dir, dcm)

dcm_tag = pydicom.read_file(dcm_file)

SliceLocations.append(dcm_tag.SliceLocation)

ImagePositon_z.append(dcm_tag.ImagePositionPatient[2])

SliceLocations_max =max(SliceLocations)

SliceLocations_min =min(SliceLocations)

ImagePositon_z_max = max(ImagePositon_z)

ImagePositon_z_min = min(ImagePositon_z)

print(SliceLocations_max)

print(SliceLocations_min)

print(ImagePositon_z_max)

print(ImagePositon_z_min)

if SliceLocations_max - SliceLocations_min < 1e-10:

spacez = abs(ImagePositon_z_max - ImagePositon_z_min)/(len(dcm_files)-1)

else:

spacez = abs(SliceLocations_max - SliceLocations_min)/(len(dcm_files)-1)

pixel_infos = [spacex, spacey, spacez]

return pixel_infos

def get_volume(dcm_data_dir,bmp_data_dir):

pixel_infos = get_pixel_info(dcm_data_dir)

pixels_No = get_pixels_No(bmp_data_dir)

volume=pixel_infos[0]*pixel_infos[1]*pixel_infos[2]*pixels_No/1000

return volume

# dcm = pydicom.read_file(r"E:\20181210090945_LENG HONGYING F-44Y\Venous\0000.dcm")

# print(dcm)

# print(dcm.ImagePositionPatient[2])

# print(dcm[0x0020, 0x0032].keyword,dcm[0x0020, 0x0032].value)

volume=get_volume(r"E:\20181210090945_LENG HONGYING F-44Y\Venous",r"E:\20181210090945_LENG HONGYING F-44Y\Results\LungL")

print("体积为%.1f"%volume)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。

用python计算长方体的体积用什么函数_python处理DICOM并计算三维模型体积相关推荐

  1. python计算长方体体积最简单代码_python处理DICOM并计算三维模型体积

    python处理DICOM并计算三维模型体积 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python处理DICOM并计算三维模型体积.txt ] (友情提示 ...

  2. python中比较重要的几个函数_Python 几个重要的内置函数 python中的内置函数和关键字需要背过吗...

    python重要的几个内置函数用法 python内置函数什么用忘不掉的是回忆,继续的是生活,错过的,就当是路过吧.来来往往身边出现很多人,总有一个位置,一直没有变.看看温暖的阳光,偶尔还是会想一想. ...

  3. python计算分段函数_Python练习题2.2计算分段函数

    本题目要求计算下列分段函数f(x)的值: 输入格式: 输入在一行中给出实数x. 输出格式: 在一行中按"f(x) = result"的格式输出,其中x与result都保留一位小数. ...

  4. python计算某天距元旦的天数_Python:根据下列信息计算在1901年1月1日至2000年12月31日间共有多少个星期天落在每月的第一天上?...

    具体要求:a)1900.1.1是星期一b)1月,3月,5月,7月,8月,10月和12月是31天c)4月,6月,9月和11月是30天d)2月是28天,在闰年是29天e)公元年数能被4整除且又不能被100 ...

  5. python内置方法就是内置函数_python内置函数

    什么是内置函数? 就是python给你提供的,拿来直接用的函数, 比如print 和 input等等. 截止到python版本3.6.2 python一共提供了68个内置函数. 他们就是python直 ...

  6. python列表不包含哪个内置函数_python 列表的推导器和内置函数

    #++ =================================== = 列表的推导式 # li = [] # for i in range(1,11): # li.append(i) # ...

  7. python中用于生成数字序列的函数_Python中的生成器?

    自从PEP 255引入以来,生成器就一直是python的重要组成部分. python中的Generator是一种特殊的例程,可用于控制循环的迭代行为.生成器类似于返回数组的函数.生成器具有参数,我们可 ...

  8. python语言接收信息的内置函数_python接收信息的内置函数是

    有的python内置函数怎么就一个pass这个模块是用C实现的,没有Python源码. 所以python代码中只有一个pass,因为代码中都是C实现的. 两种情况: 一种情况是继承的时候会用到的,父类 ...

  9. python中用来返回序列的最大函数_Python程序设计2——列表和元组

    数据结构:更好的说法是从数据角度来说,结构化数据,就是说数据并不是随便摆放的,而是有一定结构的,这种特别的结构会带来某些算法上的性能优势,比如排序.查找等. 在Python中,最基本的数据结构是序列( ...

最新文章

  1. 新浪博客服务器维护,服务器安全维护
  2. PHP 面向对象:类和对象
  3. 资源 | 普通程序员如何自学机器学习
  4. 《记得我们有约》17集
  5. C语言归并排序(合并排序)
  6. python的requests快速上手、高级用法和身份认证
  7. 修改Ubuntu系统的用户名和主机名、创建和删除用户
  8. MySql explain命令详解
  9. u盘iso安装centos5 ,centos6
  10. C语言实现超简单贪吃蛇(代码是抄的),我做一下讲解
  11. Cocos2D场景编辑器
  12. 有关mysql触发器的感悟_有关mysql触发器实例分享
  13. X轴间隔显示-长江水位
  14. 睡眠十律 (BBC纪录片) -- 讲述10分钟获得好睡眠的方法
  15. #151 – Dependency Properties Remember Non-Coerced Values(依赖属性强制转换之前的值会被记住)
  16. 【腾讯开源项目】一个开放式的开发平台,蓝鲸PaaS平台源码对外开放
  17. java word编辑_java实现word在线编辑及流转
  18. EChat(简易聊天项目)六、实现记住密码和自动登录
  19. transformer股票步骤
  20. 广州积分入户需要满足哪些条件

热门文章

  1. rpmbuild - 构建 RPM 打包
  2. Winform—C#读写config配置文件
  3. C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
  4. [bug]小米部分机型(5x、mix2)中,文字/背景闪现然后消失
  5. java8-2-Lambda表达式
  6. 这两天在学习微信小程序,不可避免的又要用到一些图标,通过问朋友解决了这个事情 想分享给你们一下 希望对你们有用...
  7. hdu 1255 覆盖的面积
  8. idea没有错误提示的解决方法(一直处于错误分析中)
  9. 京东推荐算法精排技术实践
  10. 【报告分享】2021年Z世代“潮力量”洞察报告.pdf(附下载链接)