2013-08-22 9 views
5

私は脳の3D画像を持っています(それをフラッシュと呼ぶ)、現在は263×256×185です。別の画像のサイズにリサイズしたいのですが(whole_brain_bravoと呼んでください) ; 256 x 256 x 176、および(うまくいけば)再サンプリングするためにlanczos補間を使う(Image.ANTIALIAS)。私の(失敗した)試み:3D画像のサイズ変更(およびリサンプリング)

from scipy import ndimage as nd 
import nibabel as nib 
import numpy as np 



a = nib.load('flash.hdr') # nib is what I use to load the images 
b = nib.load('whole_brain_bravo.hdr') 

flash = a.get_data() # Access data as array (in this case memmap) 
whole = b.get_data() 

downed = nd.interpolation.zoom(flash, zoom=b.shape) # This obviously doesn't work 

あなたはこれまで3D画像でこのようなことをやったことがありますか?二つの画像間のスケールファクタで何

""" 
zoom : float or sequence, optional 
    The zoom factor along the axes. If a float, `zoom` is the same for each 
    axis. If a sequence, `zoom` should contain one value for each axis. 
""" 

scipy.ndimage.interpolate.zoomのdocstringから

答えて

3

?すべての軸で一定ですか(つまり、等倍でスケーリングしていますか?)その場合、zoomは単一の浮動小数点値でなければなりません。それ以外の場合は、軸ごとに1つの浮動小数点数のシーケンスでなければなりません。 wholeflashの物理的な寸法は等しいと仮定できる場合たとえば

は、その後、あなたがこのような何か行うことができます:ドキュメントによると

dsfactor = [w/float(f) for w,f in zip(whole.shape, flash.shape)] 
downed = nd.interpolation.zoom(flash, zoom=dsfactor) 
+0

これは本当にありがとうございます。万が一にも再サンプリングする方法も知っていますか? – elefun

+0

これは、 'np.interpolation.zoom'が' flash'から 'downed'を生成するためのものです! 'order ='パラメータを使用してスプライン補間の順番を変更することができます(私はnumpy/scipyでLanczos補間を実装していません)。 –

+0

ああ、私はあなたが意味するものを参照してください。私はLanczosを使うことができると期待していた。しかしそれは大したことではない。そしてyesのlanczosはpythonイメージングライブラリに実装されています。 Image.ANTIALIASは実際にはCで書かれた3-lobe lanczosです(ドキュメントによると) – elefun

1

を、zoom引数は「軸に沿ってズームファクタ "を選択します。これは少し曖昧ですが、希望の次元ではなくスケールファクタを意味するように思えます。

これを試してみてください:フィルタの選択について

zoomFactors = [bi/float(ai) for ai, bi in zip(a, b)] 
downed = nd.interpolation.zoom(flash, zoom=zoomFactors) 

わからない - ドキュメントは、様々な注文のスプライン補間を言及。

+0

一般的には、Pythonで3D画像をリサンプリングする方法はありますか?私はあなたにイメージを与えて、あなたはそれを見て「オハイオがこのように見える、私はおそらくそれをもっと良くするために最も近い隣人をやるべきだ」と言っています。 – elefun

+0

どのような意味で、イメージをダウンサンプリングするとこれまで見栄えが良くなりましたか?配列を再サンプリングしたい場合は、scipy.ndimage.interpolation.zoomを使ってみるといいでしょう。それはあなたのために働いていないのですか?私はそれを行うにはたくさんの方法があると確信していますが、なぜこれが十分でないのかを記述しない限り、私はあえて助けることができません。 – Brionius

+0

それは十分ではありません、私はちょうど3D画像でそれを再現したいと思ったので、私はちょうどjpegをダウンサンプリングするときにlanczos方式が持っている結果が本当に好きです。しかし、それは大きな問題ではありません、スプラインは良いです(hehe私は韻を)。ご協力いただきありがとうございます! – elefun

関連する問題