用python计算长方体的体积用什么函数_python处理DICOM并计算三维模型体积
在已知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并计算三维模型体积相关推荐
- python计算长方体体积最简单代码_python处理DICOM并计算三维模型体积
python处理DICOM并计算三维模型体积 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python处理DICOM并计算三维模型体积.txt ] (友情提示 ...
- python中比较重要的几个函数_Python 几个重要的内置函数 python中的内置函数和关键字需要背过吗...
python重要的几个内置函数用法 python内置函数什么用忘不掉的是回忆,继续的是生活,错过的,就当是路过吧.来来往往身边出现很多人,总有一个位置,一直没有变.看看温暖的阳光,偶尔还是会想一想. ...
- python计算分段函数_Python练习题2.2计算分段函数
本题目要求计算下列分段函数f(x)的值: 输入格式: 输入在一行中给出实数x. 输出格式: 在一行中按"f(x) = result"的格式输出,其中x与result都保留一位小数. ...
- 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 ...
- python内置方法就是内置函数_python内置函数
什么是内置函数? 就是python给你提供的,拿来直接用的函数, 比如print 和 input等等. 截止到python版本3.6.2 python一共提供了68个内置函数. 他们就是python直 ...
- python列表不包含哪个内置函数_python 列表的推导器和内置函数
#++ =================================== = 列表的推导式 # li = [] # for i in range(1,11): # li.append(i) # ...
- python中用于生成数字序列的函数_Python中的生成器?
自从PEP 255引入以来,生成器就一直是python的重要组成部分. python中的Generator是一种特殊的例程,可用于控制循环的迭代行为.生成器类似于返回数组的函数.生成器具有参数,我们可 ...
- python语言接收信息的内置函数_python接收信息的内置函数是
有的python内置函数怎么就一个pass这个模块是用C实现的,没有Python源码. 所以python代码中只有一个pass,因为代码中都是C实现的. 两种情况: 一种情况是继承的时候会用到的,父类 ...
- python中用来返回序列的最大函数_Python程序设计2——列表和元组
数据结构:更好的说法是从数据角度来说,结构化数据,就是说数据并不是随便摆放的,而是有一定结构的,这种特别的结构会带来某些算法上的性能优势,比如排序.查找等. 在Python中,最基本的数据结构是序列( ...
最新文章
- 新浪博客服务器维护,服务器安全维护
- PHP 面向对象:类和对象
- 资源 | 普通程序员如何自学机器学习
- 《记得我们有约》17集
- C语言归并排序(合并排序)
- python的requests快速上手、高级用法和身份认证
- 修改Ubuntu系统的用户名和主机名、创建和删除用户
- MySql explain命令详解
- u盘iso安装centos5 ,centos6
- C语言实现超简单贪吃蛇(代码是抄的),我做一下讲解
- Cocos2D场景编辑器
- 有关mysql触发器的感悟_有关mysql触发器实例分享
- X轴间隔显示-长江水位
- 睡眠十律 (BBC纪录片) -- 讲述10分钟获得好睡眠的方法
- #151 – Dependency Properties Remember Non-Coerced Values(依赖属性强制转换之前的值会被记住)
- 【腾讯开源项目】一个开放式的开发平台,蓝鲸PaaS平台源码对外开放
- java word编辑_java实现word在线编辑及流转
- EChat(简易聊天项目)六、实现记住密码和自动登录
- transformer股票步骤
- 广州积分入户需要满足哪些条件
热门文章
- rpmbuild - 构建 RPM 打包
- Winform—C#读写config配置文件
- C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
- [bug]小米部分机型(5x、mix2)中,文字/背景闪现然后消失
- java8-2-Lambda表达式
- 这两天在学习微信小程序,不可避免的又要用到一些图标,通过问朋友解决了这个事情 想分享给你们一下 希望对你们有用...
- hdu 1255 覆盖的面积
- idea没有错误提示的解决方法(一直处于错误分析中)
- 京东推荐算法精排技术实践
- 【报告分享】2021年Z世代“潮力量”洞察报告.pdf(附下载链接)