3D ボリュームのサイズを変更/再サンプリングする機能があることは知っていますがscipy.ndimage.zoom
、それは numpy.array 用であり、悪名高いほど遅いです。したがって、代わりにResampleImageFilter
fromを使用しSimpleITK
ます。C++ simpleitk をベースにした方がはるかに高速に動作すると思います。
しかし、simpleitk を使用してリサンプリングすることに小さな欠陥があります。ResampleImageFilter
SimpleITK.Image では機能しますが、numpy.array では機能しないため、さらに操作を行うのはかなり不便です。3D ボリュームをリサンプリングする他の方法はありますか?
EDIT
なぜ私がこの懸念を抱いているのかというと、SimpleITKのリサンプリングの高速性を利用したいのですが、その間、コードをきれいに保ちたいからです。たとえば、ボリュームに対してバイナリしきい値を実行してから、全体を再サンプリングする必要があります。これが私の解決策です
binthresh = sitk.BinaryThresholdImageFilter()
... #setting up params for the binthresh
img = binarythresh.Execute(img)
resample = sitk.ResampleImageFilter()
... #setting up params for the resample
img = resample.Execute(img)
arr = sitk.GetArrayFromImage(img)
... # numpy operations on the arr
しかし実際には、numpy を使用してバイナリしきい値を実行するのは、ロジック インデックスを使用する方がはるかに簡単であり、コードをよりコンパクトにすることができます。
要約すると、SimpleITK のリサンプリングを最大限に活用したいのですが、いくつかの操作は numpy の方がうまくいくので、コードが SimpleITK と numpy の両方と少し絡み合ってしまいます。そして、それは良いことだとは思いません。