介紹如何在 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