我们如何获得3D体积的Dicom CT图像 - Python

时间:2018-04-17 17:35:02

标签: python-3.x numpy pydicom numpy-ndarray

学习处理DICOM图像和Python,请耐心等我提出任何愚蠢的问题。

我正在努力将CT DICOM图像切片转换为体积,这可以进一步用于在3D中显示并且还可以操纵其他方程式。据我所知,像素值存储在pixel_array标题中,我无法弄清楚,如何可视化这些单个切片的体积,我看到的一个建议是初始化空白矩阵,其中vol =矩阵的大小(像素宽度,像素高度,切片) )使用numpy零,虽然我理解像素宽度和像素高度是我可以从DICOM标头获得的列和行,不确定是什么片。另外,我发现以下代码在Web上的多个区域给出了类似的结果,但是无法指出他们在下面使用音量的位置,我最终需要了解如何在3D体积矩阵中获取这些单独的图像数据,谢谢:< / p>

https://www.raddq.com/dicom-processing-segmentation-visualization-in-python/

def load_scan(path):
slices = [dicom.read_file(path + '/' + s) for s in os.listdir(path)]
slices.sort(key = lambda x: int(x.InstanceNumber))
try:
slice_thickness = np.abs(slices[0].ImagePositionPatient[2] - slices[1].ImagePositionPatient[2])
except:
slice_thickness = np.abs(slices[0].SliceLocation - slices[1].SliceLocation)
for s in slices:
s.SliceThickness = slice_thickness
return slices
def get_pixels_hu(scans):
image = np.stack([s.pixel_array for s in scans])
# Convert to int16 (from sometimes int16), 
# should be possible as values should always be low enough (<32k)
image = image.astype(np.int16)
# Set outside-of-scan pixels to 1
# The intercept is usually -1024, so air is approximately 0
image[image == -2000] = 0
# Convert to Hounsfield units (HU)
intercept = scans[0].RescaleIntercept
slope = scans[0].RescaleSlope
if slope != 1:
image = slope * image.astype(np.float64)
image = image.astype(np.int16)
image += np.int16(intercept)
return np.array(image, dtype=np.int16)
id=0
patient = load_scan(data_path)
imgs = get_pixels_hu(patient)

0 个答案:

没有答案