В настоящее время SimpleITK не поддерживает пространственные объекты или регистрацию космического объекта. Последний раз, когда я делал пространственный объект для регистрации изображений, он был довольно медленным, и я закончил «рендеринг» пространственного объекта к изображению, чтобы выполнить изображение для регистрации изображения. Существует несколько примеров C++ ITK (SpatialObjectToImage [0-3] .cxx), которые могут быть приняты для создания этого изображения.
Альтернативно, в SimpleITK есть PhysicalPointImageSource, которые генерируют изображение точек. Затем, используя перегруженные операторы, и уравнение сферы или гиперэллипса можно использовать для создания приближения к желаемому неявному объекту. Here является примером функции Маршнера 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 есть несколько фильтров, которые могут сделать это преобразование. –