bugfix> itk > 投稿

2つのMRI画像の微分同相デーモン登録を実行しようとしています。処理パイプラインはこれまでのところこれまでです。

  1. スカルストリッピング
  2. 異方性拡散(スムージング)
  3. ヒストグラムマッチング
  4. アフィン登録
  5. 微分同相悪魔の登録

何人かの研究者が作成したスライサーソフトウェアツールを修正してクリーンアップするだけで、プロセスは思いつきませんでした。私は夏の学生であり、ドメインにかなり精通していませんが、何が起こっているのかについてはあまり理解し始めていません。過去数週間にわたって解決できなかった問題は、次のエラーです。

itk::ExceptionObject (0x1231130)
Location: "void itk::ImageToImageFilter<TInputImage, TOutputImage>::VerifyInputInformation() [with TInputImage = itk::Image<itk::Vector<float, 3u>, 3u>; TOutputImage = itk::Image<itk::Vector<float, 3u>, 3u>]" 
File: /home/parallels/Desktop/Slicer-SuperBuild/ITKv4/Modules/Core/Common/include/itkImageToImageFilter.hxx
Line: 241
Description: itk::ERROR: DiffeomorphicDemonsRegistrationFilter(0x13870b0): Inputs do not occupy the same physical space! 
InputImage Origin: [7.9639916e+01, -1.1042095e+02, -1.0426932e+02], InputImageMovingImage Origin: [-8.8678563e+01, -1.4923204e+02, 1.2193930e+02]
    Tolerance: 1.5000000e-05
InputImage Spacing: [1.5000000e+01, 1.5000000e+01, 1.9199951e+01], InputImageMovingImage Spacing: [1.5154560e+01, 1.5108180e+01, 1.9319538e+01]
    Tolerance: 1.5000000e-05
InputImage Direction: 1.5926319e-08 1.4070701e-08 -1.0000000e+00
9.9237583e-01 -1.2324859e-01 1.4070700e-08
1.2324859e-01 9.9237583e-01 1.5926320e-08
, InputImageMovingImage Direction: -0.0000000e+00 5.5205551e-10 1.0000000e+00
5.5205551e-10 1.0000000e+00 -5.5205553e-10
-1.0000000e+00 5.5205551e-10 0.0000000e+00
    Tolerance: 1.0000000e-06

私が理解していることから、微分同相位置合わせは一致する2つの画像に依存しているため、事前にアフィン位置合わせステップが行われます。何らかの理由で、アフィン変換は2つの画像を適切に並べません。その結果、同じ物理スペースを占有しません。私は明らかに何かを見逃していますが、それが何であるかを理解することができないようです。

これでアフィン登録が行われますファイル (スライサーモジュールの入出力方法に準拠するためにローカルコピーを編集しましたが、ほとんど同じです)。作成された変換には、次の特性がありました。

Optimizer stop condition: RegularStepGradientDescentOptimizerv4: Step too small after 33 iterations. Current step (9.76563e-05) is less than minimum step (0.0001).
 Result = 
 Center X      = -1.95155
 Center Y      = 11.6381
 Center Z      = 36.5165
 Translation X = 1.09423
 Translation Y = 0.021133
 Translation Z = -0.0154539
 Iterations    = 34
 Metric value  = 8974.52
 Scale 1         = 1.15384
 Scale 2         = 1.08962
 Angle (degrees) = -5.6116

次のコードは、変換をファイルに保存するために使用されました。

 // Write the transform to a file
  itk::TransformFileWriter::Pointer transformWriter = itk::TransformFileWriter::New();
  transformWriter->SetInput( registration->GetOutput()->Get() );
  transformWriter->SetFileName( outputMatrix.c_str() );
  transformWriter->Update();

そしてこれでデーモン登録が行われますファイル (いくつかの編集を行いましたが、ほとんど同じです)。アフィン変換は799行目でロードされます。

Reading transform from transform input file.
Found: AffineTransform (0x1e0c0b0)
  RTTI typeinfo:   itk::AffineTransform<double, 3u>
  Reference Count: 3
  Modified Time: 1322
  Debug: Off
  Object Name: 
  Observers: 
    none
  Matrix: 
    1.01338 0.0887047 0.0223631 
    -0.11891 1.09423 0.021133 
    -0.0154539 0.0302253 1.14062 
  Offset: [-0.256888, -34.7809, -17.895]
  Center: [-1.95155, 11.6381, 36.5165]
  Translation: [1.56597, -32.6804, -12.3781]
  Inverse: 
    0.977286 -0.0787352 -0.0177019 
    0.105999 0.905809 -0.0188607 
    0.0104321 -0.0250698 0.876975 
  Singular: 0

編集: 次の行をコメントアウトしても、結果の出力には何も変わりません。つまり、初期変位はまったく適用されていません。理由はまだわかりません。

typedef typename itk::MultiResolutionPDEDeformableRegistration <ImageType, ImageType, DeformationFieldType, PixelType >   MultiResRegistrationFilterType;
typename MultiResRegistrationFilterType::Pointer multires = MultiResRegistrationFilterType::New();
// Commenting out this line doesn't change anything
multires->SetArbitraryInitialDisplacementField ( inputDefField );

回答 1 件
  • Diffeomorphic Demons Registration のように見える  使用しているコードには Fixed が必要です  および Moving  画像は同じ物理的空間を持ちます:

    原点

    間隔

    寸法

    moving image をリサンプリングしようとしましたか   fixed image へ  スペース、そして Diffeomorphic Demons Registration を呼び出します  この resampled moving image で  および fixed image

    この EZminc を知らなかった  コードですが、どうやら両方の入力が同じスペースにある必要があるようです。

あなたの答え