我安裝了SimpleITK進行醫學圖像註冊。它適用於3D CT/CT和3D CT/MRI圖像配準。現在我想實現模型/圖像註冊。該模型是一個球體。在ITK中,有Box,Ellipse等空間對象可用於模型/圖像註冊。但我無法在SimpleITK中找到這些對象。我應該從模型創建一個假圖像並使用圖像/圖像註冊來模擬模型/圖像註冊?如何在SimpleITK中實現模型到圖像的註冊?
謝謝,
大衛劉
我安裝了SimpleITK進行醫學圖像註冊。它適用於3D CT/CT和3D CT/MRI圖像配準。現在我想實現模型/圖像註冊。該模型是一個球體。在ITK中,有Box,Ellipse等空間對象可用於模型/圖像註冊。但我無法在SimpleITK中找到這些對象。我應該從模型創建一個假圖像並使用圖像/圖像註冊來模擬模型/圖像註冊?如何在SimpleITK中實現模型到圖像的註冊?
謝謝,
大衛劉
轉換空間對象的圖像,並且然後使用圖像到圖像配準肯定一個解決方案。配準精度將在一定程度上取決於圖像網格的分辨率,用於轉換SpatialObject
- >Image
。與其他圖像相同的像素間距是合理的選擇。
SimpleITK目前不支持空間對象或空間對象註冊。上次我做空間對象到圖像配準時,速度相當慢,我最終將空間對象「渲染」爲圖像以執行圖像到圖像配準。有幾個C++ ITK示例(SpatialObjectToImage [0-3] .cxx)可用於生成此圖像。
或者在SimpleITK中有PhysicalPointImageSource,它們會生成一個點的圖像。然後使用重載運算符,並且可以使用球或超橢圓的方程來生成對所需隱式對象的近似。 Here是正在生成Marschner Lobb的函數的一個例子:
def marschner_lobb(size=40, alpha=0.25, f_M=6.0):
img = sitk.PhysicalPointSource(sitk.sitkVectorFloat32, [size]*3, [-1]*3, [2.0/size]*3)
imgx = sitk.VectorIndexSelectionCast(img, 0)
imgy = sitk.VectorIndexSelectionCast(img, 1)
imgz = sitk.VectorIndexSelectionCast(img, 2)
del img
r = sitk.Sqrt(imgx**2 + imgy**2)
del imgx, imgy
pr = sitk.Cos((2.0*math.pi*f_M)*sitk.Cos((math.pi/2.0)*r))
return (1.0 - sitk.Sin((math.pi/2.0)*imgz) + alpha*(1.0+pr))/(2.0*(1.0+alpha))
類似的操作可以用於其它隱函數來完成。
謝謝Dzenan。你的回答非常有幫助。 SimpleITK中是否有可以將SpatialObject轉換爲Image的過濾器? ITK中有一些可以進行轉換的過濾器。 –