介紹如何在 Python 中使用 ITK 的 SimpleFilterWatcher 輸出指定 filter 產生的管線事件(pieline events)詳細資訊。
在開發 ITK 應用程式時,如果需要觀察管線內部各個 filter 的運作狀況,可以在程式中加入 SimpleFilterWatcher,把指定 filter 的所產生的所有管線事件輸出至標準輸出(standard output)。
import itk # 影像維度 Dimension = 3 # 輸入影像類型 InputPixelType = itk.US InputImageType = itk.Image[InputPixelType, Dimension] # 讀取 MHA 影像檔案 inputImageFilename = "input.mha" # 建立影像 Reader reader = itk.ImageFileReader[InputImageType].New(FileName=inputImageFilename) # 建立 ThresholdImageFilter thresholdFilter = itk.ThresholdImageFilter[InputImageType].New() thresholdFilter.SetInput(reader.GetOutput()) thresholdFilter.ThresholdBelow(100) thresholdFilter.SetOutsideValue(0) # 輸出 Filter 管線事件資訊 watcher = itk.SimpleFilterWatcher(thresholdFilter, "Threshold") # 實際執行 thresholdFilter.Update()
-------- Start ThresholdImageFilter "Threshold" ThresholdImageFilter (0x358caa0)
  RTTI typeinfo:   itk::ThresholdImageFilter<itk::Image<unsigned short, 3u> >
  Reference Count: 3
  Modified Time: 16
  Debug: Off
  Object Name:
  Observers:
    StartEvent(SimpleMemberCommand)
    EndEvent(SimpleMemberCommand)
    ProgressEvent(SimpleMemberCommand)
    IterationEvent(SimpleMemberCommand)
    AbortEvent(SimpleMemberCommand)
  Inputs:
    Primary: (0x35ffa10) *
  Indexed Inputs:
    0: Primary (0x35ffa10)
  Required Input Names: Primary
  NumberOfRequiredInputs: 1
  Outputs:
    Primary: (0x41b7e60)
  Indexed Outputs:
    0: Primary (0x41b7e60)
  NumberOfRequiredOutputs: 1
  Number Of Work Units: 128
  ReleaseDataFlag: Off
  ReleaseDataBeforeUpdateFlag: Off
  AbortGenerateData: Off
  Progress: 0
  Multithreader:
    RTTI typeinfo:   itk::PoolMultiThreader
    Reference Count: 1
    Modified Time: 2
    Debug: Off
    Object Name:
    Observers:
      none
    Number of Work Units: 128
    Number of Threads: 48
    Global Maximum Number Of Threads: 128
    Global Default Number Of Threads: 48
    Global Default Threader Type: itk::MultiThreaderBaseEnums::Threader::Pool
    SingleMethod: 0
    SingleData: 0
  DynamicMultiThreading: On
  CoordinateTolerance: 1e-06
  DirectionTolerance: 1e-06
  InPlace: Off
  The input and output to this filter are the same type. The filter can be run in place.
  OutsideValue: 0
  Lower: 100
  Upper: 65535
Progress  | 0.00943396
Filter took 0.0180871 seconds.
-------- End ThresholdImageFilter "Threshold"
ThresholdImageFilter (0x358caa0)
  RTTI typeinfo:   itk::ThresholdImageFilter<itk::Image<unsigned short, 3u> >
  Reference Count: 3
  Modified Time: 16
  Debug: Off
  Object Name:
  Observers:
    StartEvent(SimpleMemberCommand)
    EndEvent(SimpleMemberCommand)
    ProgressEvent(SimpleMemberCommand)
    IterationEvent(SimpleMemberCommand)
    AbortEvent(SimpleMemberCommand)
  Inputs:
    Primary: (0x35ffa10) *
  Indexed Inputs:
    0: Primary (0x35ffa10)
  Required Input Names: Primary
  NumberOfRequiredInputs: 1
  Outputs:
    Primary: (0x41b7e60)
  Indexed Outputs:
    0: Primary (0x41b7e60)
  NumberOfRequiredOutputs: 1
  Number Of Work Units: 128
  ReleaseDataFlag: Off
  ReleaseDataBeforeUpdateFlag: Off
  AbortGenerateData: Off
  Progress: 1
  Multithreader:
    RTTI typeinfo:   itk::PoolMultiThreader
    Reference Count: 1
    Modified Time: 2
    Debug: Off
    Object Name:
    Observers:
      none
    Number of Work Units: 128
    Number of Threads: 48
    Global Maximum Number Of Threads: 128
    Global Default Number Of Threads: 48
    Global Default Threader Type: itk::MultiThreaderBaseEnums::Threader::Pool
    SingleMethod: 0
    SingleData: 0
  DynamicMultiThreading: On
  CoordinateTolerance: 1e-06
  DirectionTolerance: 1e-06
  InPlace: Off
  The input and output to this filter are the same type. The filter can be run in place.
  OutsideValue: 0
  Lower: 100
  Upper: 65535
參考資料:ITKExamples