how to implement registration between DSA(2d)-CTA(3d) image

Is there any method to register DSA(2d)-CTA(3d) images? For every point in CTA, I want to know the corresponding point in DSA.

I find an example for 2d-3d registration. In this ITKTwoProjectionRegistration, I don’t know what’s the meaning of two projection? I have only one DSA. Can I use this example?

The IJ paper references IntensityBased2D3DRegistration, complaining that it only does single-projection registration. ITKApps has been discontinued for a long time now, but you could try to revive this particular application. I don’t know whether ITKTwoProjectionRegistration works with a single projection.

@dzenanz Thanks for your kindly reply. Do you know where can I find the input data /data/BrainWeb/brainweb165a10f17.mha

That file, along with some other test data, can be found here.

@dzenanz IntensityBased2D3DRegistration is what I want~~~

But I still have two questions:

  1. how to understand itk::RayCastInterpolateImageFunction, what’s the meaning of itk::RayCastInterpolateImageFunction::m_FocalPoint? Could you please recommand me some information to understand this ray cast model?

  2. Is there any InterpolateImageFunction can obtain the maximum intensity projection rather than ray cast integrate?

RayCastInterpolateImageFunction’s docs link to DigitallyReconstructedRadiograph1.cxx example. That example has a lot of helpful comments. Also read about perspective projection.

There is MaximumProjectionImageFilter, looking at its source code might help.

@dzenanz Can MaximumProjectionImageFilter be used in registration? I want a MIPInterpolateImageFunction which can replace the RayCastInterpolateImageFunction, and be used in 3D-2D registration.

ProjectionImageFilter does projection only along an axis, it does not do perspective.

But changing itkRayCastInterpolateImageFunction.hxx to do max instead of a sum should not be that hard. You could subclass and only override that method, or change the existing function to have a MIP/accumulate switch.

@dzenanz Is DSA a perspective or parallel projection to the imaged object? Does RayCastInterpolateImageFunction can generate projection image similar to DSA?

I assume that digital subtraction angiography uses perspective projection, and that RayCastInterpolateImageFunction emulates that.

1 Like

Hello @zhang-qiang-github,

The question is mixing two things, camera geometry and how it is used to create the image.

DSA - Digital Subtraction Angiography using a fluoroscope which is commonly modeled as a pin-hole camera, per @dzenanz’s answer. The second step is that two images are acquired, pre-contrast and with contrast. The pre-contrast is subtracted from the contrast.

That being said, when modeling the world we are always using approximations. Depending on the needs, an approximation can be coarse or fine.

You already indicated that you are approximating the subtraction operation by acquiring a single maximal intensity projection. If the focal point of your x-ray machine is very far from the detector it can be reasonably approximated by a parallel projection. With most C-arm based fluoroscopy machines a perspective projection is more appropriate.

1 Like

@dzenanz @zivy Thank you for the nice reply.