python处理DICOM并计算三维模型体积

来源:中文源码网    浏览: 次    日期:2019年11月5日

【下载文档:  python处理DICOM并计算三维模型体积.txt 】

(友情提示:右键点上行txt文档名->目标另存为)

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并计算三维模型体积相关推荐

  1. 用python计算长方体的体积用什么函数_python处理DICOM并计算三维模型体积

    在已知DICOM和三维模型对应掩膜的情况下,计算三维模型的体积. 思路: 1.计算每个体素的体积.每个体素为长方体,x,y为PixelSpacing,z为层间距 使用pydicom.read_file ...

  2. python计算长方体体积最简单代码_C语言编程简单的小程序,计算长方体体积!...

    计算长方体体积 有朋友会说长方体体积还不好算吗?长X宽X高.没错用计算器一下就可以出结果,编程反而麻烦些,但是我们说的是这种思维,如果复杂的重复运算的话写好程序就非常简单了. 简单运算下一个固定高度的 ...

  3. Python 程序示例 - 初学者的简单代码示例

    马克吐温说过,出人头地的秘诀就是开始.编程对于初学者来说似乎令人望而生畏,但最好的入门方式是直接投入并开始编写代码. 简单的代码示例是初学者入门和学习编程基础知识的好方法.在本文中,我将提供一系列非常 ...

  4. python用turtle画月亮的代码_Python利用turtle库绘制彩虹代码示例

    语言:Python IDE:Python.IDE 需求 做出彩虹效果 颜色空间 RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为R ...

  5. python中的pygame弹球游戏代码_python pygame实现挡板弹球游戏

    学了一天pygame,用python和pygame写一个简单的挡板弹球游戏 GitHub: # -*- coding:utf-8 -*- from sys import exit import pyg ...

  6. python敏感词过滤代码简单代码_Python 实现王者荣耀中的敏感词过滤示例

    Python 实现王者荣耀中的敏感词过滤示例 王者荣耀的火爆就不用说了,但是一局中总会有那么几个挂机的,总能看到有些人在骂人,我们发现,当你输入一些常见的辱骂性词汇时,系统会自动将该词变成" ...

  7. python敏感词过滤代码简单代码_Python实现敏感词过滤的4种方法

    在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去 ...

  8. python计算长方形周长代码_python微元法计算函数曲线长度的方法

    计算曲线长度,根据线积分公式: ,令积分函数f(x,y,z) 为1,即计算曲线的长度,将其微元化: 其中 根据此时便可在python编程实现,给出4个例子,代码中已有详细注释,不再赘述 ''' 计算曲 ...

  9. python字典示例简单代码_python学习笔记:字典的使用示例详解

    经典字典使用函数 dict:通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典.当然dict成为函数不是十分确切,它本质是一种类型.如同list. 代码如下: items=[('name' ...

最新文章

  1. 使用Redis存储Nginx+Tomcat负载均衡集群的Session
  2. expect批量执行命令
  3. sql 拆分_实践参考:MySQL架构设计从开发规范、选型、拆分到减压实战指南
  4. (pytorch-深度学习)门控循环单元(GRU)
  5. 再见 Nacos,我要玩 Service Mesh 了!
  6. XML模板解析————Dom4j解析xml案例分析
  7. Python错误,pip安装包或更新时因超时而报错误
  8. 花书+吴恩达深度学习(七)优化方法之基本算法(Momentum, Nesterov, AdaGrad, RMSProp, Adam)
  9. Vue中的静态类型检查
  10. UNIX高级环境编程 第11、12章 线程同步及属性
  11. 争锋职考职称计算机,PVP攻略 | 新秀职业的争锋天下?
  12. 哪个NBA球队会夺冠?用深度学习预测最有潜力的球员!
  13. 根据经纬度计算两地之间的距离
  14. Linux LED子系统调试与应用 设备树官方文档与 gpio-leds.c 源码详解
  15. 泛函分析之集合的映射和可数集与不可数集
  16. VMware 中搭建 SylixOS 环境
  17. ios各种手势,很有意思
  18. SpringMVC---注意事项
  19. 寒假思雨姐摸底G题,题解
  20. 别让灵魂跟不上我们的脚步

热门文章

  1. Spark提交 指定 kerberos 认证信息
  2. CPU Burst有副作用吗?让数学来回答!| 龙蜥技术
  3. 【数据湖加速篇】 —— 数据湖结构化数据优化与查询加速方案
  4. Sentinel 1.8.0 年度版本发布,熔断降级重构升级!
  5. 带出7个“师弟”,支付宝BASIC College的辅导员是个伪90后
  6. 安全多方计算新突破!阿里首次实现“公开可验证” 的安全方案
  7. 2018年最佳深度学习书单
  8. ESS控制台发布新功能:创建多实例规格的伸缩配置
  9. 携程梁建章:要让元宇宙技术成为真宇宙探索、旅游的灵感来源
  10. 五大数据库理念,读懂亚马逊云科技的数据库布局