2016-12-02 5 views
1

Я установил SimpleITK для регистрации медицинских изображений. Он отлично работает для регистрации 3D-изображений CT/CT и 3D CT/MRI. Теперь я хочу реализовать регистрацию модели/изображения. Модель представляет собой сферу. В ITK существуют пространственные объекты, такие как Box, Ellipse, которые могут использоваться для регистрации модели/изображения. Но я не могу найти эти объекты в SimpleITK. Должен ли я создать поддельное изображение из модели и использовать регистрацию изображений/изображений для имитации регистрации модели/изображения?Как реализовать регистрацию модели для изображения в SimpleITK?

Благодаря,

Дэвид Ло

ответ

0

Преобразование пространственного объекта в изображении, а затем с помощью регистрации изображения к изображению, безусловно, одно решение. Точность регистрации будет несколько зависеть от разрешения сетки изображений для преобразования SpatialObject ->Image. Такое же расстояние между пикселями, как и другое изображение, является разумным выбором.

+0

Спасибо Dzenan. Ваш ответ очень полезен. Есть ли какой-либо фильтр в SimpleITK, который может преобразовать SpatialObject в Image? В ITK есть несколько фильтров, которые могут сделать это преобразование. –

0

В настоящее время 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)) 

Аналогичная операция может быть сделано для других неявных функций.