2017-03-25 10 views
0

私は脳腫瘍のセグメンテーションに関するプロジェクトを行っています。そして、私がファイル(.mha)にN4BiasCorrectionを適用するとき、私はスライサーとsimpleITKメソッドを使用しました。 私はSlicer-N4ITKモジュールを使用して各ファイルを手作業で処理するだけで、コードを使ってすべてのファイルを実行する方法がわからないため、Slicerはうまくいくが時間がかかる。simpleITK N4BiasFieldCorrectionは実行速度と結果に関して奇妙に実行されます

次に、私はpythonでsimpleITKを試してみると、問題が表示されます。まず、各.mhaファイルで非常に遅く実行され、n4biasfieldcorrectionを適用した後、非常に大きなファイル(Slicerを使用して4.4MBと比較して36.7MB)を取得します。次に、速度を上げるために、Shrinkパラメータを4に設定しましたが、.mhaファイル全体が実際にぼやけてしまいました。スライダを使用しても起こりません。

誰でも私にそれが正常かどうか教えてもらえますか?私のファイルをぼかすことなくスピードアップする方法はありますか?または、Slicer pythonインタラクタ内でN4BiasFieldCorrectionを適用する例を教えてください。

ありがとうございます!

# -*- coding: utf-8 -*- 
 
""" 
 
Spyder Editor 
 

 
This is a temporary script file. 
 
""" 
 
from __future__ import print_function 
 
import SimpleITK as sitk 
 
import sys 
 
import os 
 
#from skimage import io 
 
from glob import glob 
 
import numpy as np 
 

 

 
def n4process(inputimage, outpath): 
 
    inputImage = sitk.ReadImage(inputimage)  
 
# numberFilltingLevels = 4 
 
    maskImage = sitk.OtsuThreshold(inputImage, 0, 1, 200) 
 
# inputImage = sitk.Shrink(inputImage, [ 2 ] * inputImage.GetDimension()) 
 
# maskImage = sitk.Shrink(maskImage, [ 2 ] * inputImage.GetDimension()) 
 
    inputImage = sitk.Cast(inputImage, sitk.sitkFloat32) 
 
    corrector = sitk.N4BiasFieldCorrectionImageFilter(); 
 
    corrector.SetConvergenceThreshold=0.001 
 
    corrector.SetBiasFieldFullWidthAtHalfMaximum=0.15 
 
    corrector.SetMaximumNumberOfIterations=50 
 
    corrector.SetNumberOfControlPoints=4 
 
    corrector.SetNumberOfHistogramBins=200 
 
    corrector.SetSplineOrder=3 
 
    corrector.SetWienerFilterNoise=0.1 
 
    output = corrector.Execute(inputImage,maskImage)  
 
    sitk.WriteImage(output, outpath) 
 

 
    
 
input_path = '/Users/chenrui/Desktop/BRATS2015_Training/HGG/' 
 
patientpath = glob('/Users/chenrui/Desktop/BRATS2015_Training/HGG/*') 
 
num = 0 
 
for i in patientpath: 
 
    num = num+1 
 
#i = '/Users/chenrui/Desktop/BRATS2015_Training/HGG/brats_2013_pat0001_1' 
 
    flair = glob(i + '/*Flair*/*.mha') 
 
    flair_outpath = '/Users/chenrui/Desktop/BRATS2015_Training/test/'+'Flair/'+str(num)+'.mha' 
 
    n4process(flair[0], flair_outpath) 
 
    
 
    t2 = glob(i + '/*T2*/*.mha') 
 
    t2_outpath = '/Users/chenrui/Desktop/BRATS2015_Training/HGG_n4/'+'T2/'+str(num)+'.mha' 
 
    n4process(t2[0], t2_outpath) 
 
    
 
    t1c = glob(i + '/*_T1c*/*.mha') 
 
    t1c_outpath = '/Users/chenrui/Desktop/BRATS2015_Training/HGG_n4/'+'T1c/'+str(num)+'.mha' 
 
    n4process(t1c[0], t1c_outpath) 
 
    
 
    t1 = glob(i + '/*_T1*/*.mha') 
 
    t1 = [scan for scan in t1 if scan not in t1c] 
 
    t1_outpath = '/Users/chenrui/Desktop/BRATS2015_Training/HGG_n4/'+'T1/'+str(num)+'.mha' 
 
    n4process(t1[0],t1_outpath)

答えて

0

元の実装http://www.insight-journal.org/browse/publication/640

を見てから、あなたはこれをダウンロードして、あなたのデータをテストする例を生成することができます。あなたが設定したパラメータは、WeinerFilterNoise以外のデフォルトで定義されたものと同じように見えます。これは、理由を変えない限り、0.01にする必要があります。

サイズ差(x8増加)は、おそらく8ビットから64ビットなどのデータを保存したことになります。 metaimageヘッダーを確認すると、これが表示されます。これはキャスティングで解決できます。

+0

ご返信ありがとうございます。そして、出力にキャストをint16に追加すると、全体のサイズは17.9Mに減少しました。そして、私はリンクからダウンロードされたコードがC++で書かれていることに気付きました。多分、私はOSプラットフォームでそれらを使用する方法を理解するためにより多くの時間を費やす必要があります。非常にゆっくりと実行され、WeinerFilterNoiseのパラメータを0.01に変更しても結果がぼやけているような問題が残っています。 – Chen

関連する問題