python的三维画图(python处理DICOM并计算三维模型体积)
类别:脚本大全 浏览量:630
时间:2022-01-20 00:04:06 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) |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/yaoliuwei1426/article/details/85680152
您可能感兴趣
- python列表怎么赋值(详解Python列表赋值复制深拷贝及5种浅拷贝)
- 如何利用python编写日期的程序(Python读取指定日期邮件的实例)
- eclipse配置python(eclipse创建python项目步骤详解)
- python中可以改变的数据类型(Python常见数据类型转换操作示例)
- python处理时间序列常用方法汇总(python整小时 整天时间戳获取算法示例)
- python创建字典的代码(Python创建字典的八种方式)
- pythondjango后台管理(基于腾讯云服务器部署微信小程序后台服务Python+Django)
- python 写入d盘文件(python文件写入write的操作)
- python怎么抽取微信图片(Python 一键制作微信好友图片墙的方法)
- python中的eval函数的用法(Python eval的常见错误封装及利用原理详解)
- python数字形式转换详解(Python3.5实现的罗马数字转换成整数功能示例)
- pythonpickle使用方法(Python supervisor强大的进程管理工具的使用)
- python使用教程操作(详解python中@的用法)
- python编程ai人工智能(AI领域都在用Python即将被淘汰?网友预测未来的编程语言不会是TA)
- python ip代理池(Python 实现域名解析为ip的方法)
- python爬微信好友(python抓取需要扫微信登陆页面)
- 2019年外媒秋季新番动画角色CP排行榜,桐人和爱丽丝落榜(2019年外媒秋季新番动画角色CP排行榜)
- 新一小兰领衔 盘点动漫中的那些 远距离恋爱情侣(盘点动漫中的那些)
- 大事件 合肥四中火了(大事件合肥四中火了)
- 翼龙贷组织出借人调研 感受鄱阳 借 来的致富路(翼龙贷组织出借人调研)
- 2023新国风戏曲教育寒假集训班汇报演出《戏娃闹元宵》图文报道(2023新国风戏曲教育寒假集训班汇报演出戏娃闹元宵图文报道)
- 九儿《狐踪谍影》出演热血女特警,戏份杀青受关注(九儿狐踪谍影出演热血女特警)
热门推荐
- canvas绘图问题(记一次高分屏下canvas模糊问题)
- python弹跳小球(python GUI实现小球满屏乱跑效果)
- python程序运行步骤(详解python运行三种方式)
- pythonhttp文件服务器(使用Python创建简单的HTTP服务器的方法步骤)
- html5实现上传图片预览
- django连接mysql不支持中文插入(Django创建项目+连通mysql的操作方法)
- JavaScript中使用concat合并数组
- php商城支付接口(php实现银联商务公众号+服务窗支付的示例代码)
- tomcat启动慢什么原因(Tomcat服务器响应过慢解决方案)
- docker启动指定容器ip(Docker每次启动容器,IP及hosts指定的操作)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9