日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2024/9/27 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python计算长方体体积最简单代码_python处理DICOM并计算三维模型体积 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python處理DICOM并計(jì)算三維模型體積

來(lái)源:中文源碼網(wǎng)????瀏覽: 次????日期:2019年11月5日

【下載文檔:??python處理DICOM并計(jì)算三維模型體積.txt?】

(友情提示:右鍵點(diǎn)上行txt文檔名->目標(biāo)另存為)

python處理DICOM并計(jì)算三維模型體積在已知DICOM和三維模型對(duì)應(yīng)掩膜的情況下,計(jì)算三維模型的體積。

思路:

1、計(jì)算每個(gè)體素的體積。每個(gè)體素為長(zhǎng)方體,x,y為PixelSpacing,z為層間距

使用pydicom.read_file讀取DICOM文件,dcm_tag.PixelSpacing獲取像素間距,dcm_tag.SliceLocation 獲取層間距

2、計(jì)算體素的個(gè)數(shù)

代碼如下:

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為布爾類型,需要轉(zhuǎn)換為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進(jìn)行排序的,不能直接用最后一張的slicelocation減去第一張,再除以張數(shù)

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)以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持中文源碼網(wǎng)。

親,試試微信掃碼分享本頁(yè)!?*^_^*

總結(jié)

以上是生活随笔為你收集整理的python计算长方体体积最简单代码_python处理DICOM并计算三维模型体积的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。