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