介紹如何在 Python 以 SimpleITK 模組讀取 Allen Mouse Brain Atlas 老鼠標準腦、繪製切面圖,並計算各種基本統計量。
讀取標準腦影像
老鼠的標準腦 volume 影像可從 Allen Mouse Brain Atlas 的網站 下載,解壓縮之後即可使用 Python 的 SimpleITK 模組來讀取:
import SimpleITK as sitk
# 讀取 Allen Mouse Brain Atlas 影像
image = sitk.ReadImage("atlasVolume/atlasVolume.mhd")
# 影像大小
print("Image Size:", image.GetSize())
# 像素類型
print("Pixel Type:", image.GetPixelIDTypeAsString())
# Voxel Size (um)
print("Voxel Size:", image.GetSpacing())
Image Size: (528, 320, 456) Pixel Type: 8-bit unsigned integer Voxel Size: (25.0, 25.0, 25.0)
顯示影像切面:
import matplotlib.pyplot as plt
# 轉為 NumPy 陣列
nda = sitk.GetArrayViewFromImage(image)
# 顯示影像切面
z_index = 228
slice = nda[z_index,:,:]
plt.imshow(slice)
plt.show()

以 seaborn 模組繪製像素值分佈圖(要先安裝 statsmodels 模組):
# 像素值分佈
import seaborn as sns
sns.set()
sns.distplot(nda.flatten())
plt.show()

計算像素值的各種基本統計量:
import numpy as np
print("Min:", nda.min()) # 像素值最小值
print("Max:", nda.max()) # 像素值最大值
print("Mean:", nda.mean()) # 像素值平均值
print("Variance:", nda.var() ) # 像素值變異數
print("Standard Deviation:", nda.std()) # 像素值標準差
print("Median:", np.median(nda)) # 像素值中位數
Min: 0 Max: 255 Mean: 23.121027711323762 Variance: 1350.532555098347 Standard Deviation: 36.749592584113735 Median: 0.0
排除零值
排除像素值為 0 的資料,重新繪製像素值分佈:
# 排除 0 值
ndaNonZero = np.extract(nda > 0, nda)
# 像素值分佈(排除 0 值)
sns.distplot(ndaNonZero.flatten())
plt.show()

排除像素值為 0 的資料後,重新計算各種基本統計量:
print("Min:", ndaNonZero.min()) # 像素值最小值
print("Max:", ndaNonZero.max()) # 像素值最大值
print("Mean:", ndaNonZero.mean()) # 像素值平均值
print("Variance:", ndaNonZero.var()) # 像素值變異數
print("Standard Deviation:", ndaNonZero.std()) # 像素值標準差
print("Median:", np.median(ndaNonZero)) # 像素值中位數
Min: 1 Max: 255 Mean: 48.98333937406607 Variance: 1594.3650678915421 Standard Deviation: 39.92950122267422 Median: 41.0
