Python

ITK 以 LabelStatisticsImageFilter 套用遮罩影像計算統計量教學與範例

介紹如何使用 ITK 的 LabelStatisticsImageFilter 套用遮罩影像計算各種統計量,包含體積(數量)、加總、平均值、變異數、範圍等。

建立測試影像與遮罩影像

首先使用亂數的方式建立測試用的原始影像,並且手動建立一張測試用的遮罩影像:

import itk
import numpy as np
import matplotlib.pyplot as plt

# 建立測試影像
np.random.seed(1)
testArray = np.random.randint(0, 255, (15, 15)).astype(np.uint8)

# 建立測試用遮罩
maskArray = np.zeros((15, 15), dtype=np.uint8)
maskArray[2,1] = 1
maskArray[3,4] = 1
maskArray[5,9] = 1
maskArray[9,4] = 1
maskArray[7,3] = 2
maskArray[9,8] = 2

# 顯示影像與遮罩
fig, axes = plt.subplots(1, 2)
axes[0].imshow(testArray)
axes[1].imshow(maskArray)
影像與遮罩

從 NumPy 陣列建立 ITK 影像:

# 從 NumPy 陣列建立 ITK 影像
testImage = itk.GetImageFromArray(testArray)
maskImage = itk.GetImageFromArray(maskArray)

套用遮罩影像計算統計量

有了原始影像與遮罩影像之後,就可以使用 LabelStatisticsImageFilter 將遮罩照用在原始影像上計算物件的各種基本統計量:

# 影像類型
PixelType = itk.UC
Dimension = 2
ImageType = itk.Image[PixelType, Dimension]

# 建立 LabelStatisticsImageFilter
statFilter = itk.LabelStatisticsImageFilter[ImageType,ImageType].New()
statFilter.SetInput(testImage)       # 原始影像
statFilter.SetLabelInput(maskImage)  # 標註影像
statFilter.Update()

# 輸出統計結果
for label in statFilter.GetValidLabelValues():
    print("label", label)
    print("  Count =", statFilter.GetCount(label))
    print("  Bounding Box =", statFilter.GetBoundingBox(label))
    print("  Min =", statFilter.GetMinimum(label))
    print("  Max =", statFilter.GetMaximum(label))
    print("  Sum =", statFilter.GetSum(label))
    print("  Mean =", statFilter.GetMean(label))
    print("  Variance =", statFilter.GetVariance(label))
label 1
  Count = 4
  Bounding Box = (1, 9, 2, 9)
  Min = 7.0
  Max = 226.0
  Sum = 508.0
  Mean = 127.0
  Variance = 12144.666666666666
label 2
  Count = 2
  Bounding Box = (3, 8, 7, 9)
  Min = 76.0
  Max = 143.0
  Sum = 219.0
  Mean = 109.5
  Variance = 2244.5
label 0
  Count = 219
  Bounding Box = (0, 14, 0, 14)
  Min = 1.0
  Max = 254.0
  Sum = 27786.0
  Mean = 126.87671232876713
  Variance = 5690.402161618701

參考資料

Share
Published by
Office Guide
Tags: ITK

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago