2D-3D image registration - COMPLETE 6D ESTIMATION
Mostrar comentarios más antiguos
Hello everyone,
I am simulating a 2D–3D image registration pipeline for 6D motion estimation (3D translation + rotation) from two 2D X-ray projections, based on the following paper:
[1] Fu & Kuduvalli, “A fast, accurate, and automatic 2D–3D image registration for image-guided cranial radiosurgery,” Med. Phys., 2008.
The pipeline consists of:
- Generating a 3D CT volume with known fiducials
- Applying a known 6D rigid transformation to the CT
- Generating two 2D projections (A and B)
- Performing accurate 2D–2D registration between each X-ray and its corresponding DRR
- Estimating the final 6D transformation using geometric back-projection / analytical decomposition (as described in the paper)
Problem Description
- The 2D image registrations are accurate and stable (x, y, in-plane rotation, and roll are recovered correctly for both projections).
- However, the final 6D estimation shows significant error, especially in:
- Out-of-plane translation
- Out-of-plane rotations
Because the 2D registrations behave as expected, I suspect the issue is in the geometric back-projection / 2D-to-3D decomposition step, rather than in the similarity metric or optimization.
Specifically, I am unsure whether:
- My implementation of the analytical back-projection equations is correct
- The projection geometry (scaling, sign conventions, coordinate frames) is consistent between the two views
- Additional geometric constraints or assumptions are required for observability
What I Am Looking For
I would greatly appreciate any insights or suggestions on:
- Correct implementation of 2D-to-3D geometric back-projection for dual-view registration
- Common pitfalls in coordinate systems, scaling factors, or sign conventions
- Whether a cone-beam vs. parallel-beam assumption materially affects the 6D solution
- Any recommended validation or sanity checks for this type of pipeline
I have attached the MATLAB code below for reference.
Thank you very much for your time and support.
Reference
[1] Fu, D., & Kuduvalli, G. (2008). A fast, accurate, and automatic 2D–3D image registration for image-guided cranial radiosurgery. Medical Physics, 35(5), 2180–2194.
Respuestas (1)
I haven't read the paper, but I don't see how the proposed method would ever work as you describe it. 6D motion simply does not propagate into 2D projections in a way that 2D-2D registration (step 4) can model, whether cone beam or parallel beam. Additionally, registering the DRR's to each projection independetly ignores the coupled effects of 3D motion on each projection.
Since you say the CT subject contains fiducials, it seems to me like the best approach would be to find the fiducials in the projections and then triangulate their 3D positions stereoscopically. (In fact, I vaguely wonder if that's the true purpose of the 2D-2D registration -- to help you search for the fiducial projections in 2D.)
To do the triangulation, the Computer Vision Toolbox has a command triangulate which may be helpful. Once you've triangulated, the problem reduces to a 3D-3D point registration, which you can do with,
13 comentarios
payam samadi
el 19 de Dic. de 2025
Editada: payam samadi
el 19 de Dic. de 2025
Given accurate per-projection in-plane motion estimates, is it theoretically and practically valid to recover a full 6D rigid transformation from these parameters alone, and under what geometric assumptions does this become observable?
Doesn't the paper tell you that? If it is possible, it is certainly not possible in a single, analytical step. It would have to be done iteratively. Possibly, the process you described is meant to be wrapped in an iterative loop? I.e., once you have the in-plane motion estimates, you are meant to somehow update the estimate of the 6D pose and recompute the DRRs?
To prove that it is not possible analytically, I offer the following example:
Imagine the CT subject is a centered cylinder with a single fiducial at the surface, centered in the AP view. Now let's rotate the cylinder by a small angle (3 degrees) about the scanner axis and see what the in-plane, per projection motion shows. The lateral projection will be almost unchanged, so its DRR registration will probably compute zero in-plane motion, effectively.
The AP view will see a slightly larger in-plane shift in the position of the fiducial, but the projection of the background cylinder will remain largely unchanged. Because most AP projection pixels remain unchanged, a rigid in-plane registration will yield unpredictable results, but it will assume some motion to account for the shift in the fiducial projection. A key point, though, is that the amount of the motion computed will depend on the size and density of the fiducial.
But because the computed in-plane motion depends on the size and density of the fiducial, it is impossible to use the motion parameters alone to back out the 3D rotation analytically. The same 3D motion can induce different projection registration results, depending on the composition of the phantom.
payam samadi
el 20 de Dic. de 2025
payam samadi
el 20 de Dic. de 2025
Matt J
el 20 de Dic. de 2025
I would really appreciate any guidance on how best to formulate or implement this iterative update step
How does the paper say to do it?
payam samadi
el 21 de Dic. de 2025
Matt J
el 21 de Dic. de 2025
Looking at registerSingleProjection(), it appears that it is not really a standard 2D-2D in-plane registration as your initial description suggests,
4. Performing accurate 2D–2D registration between each X-ray and its corresponding DRR
Had it been, you would be using imregister() or imregtform(). You also have an out-of-plane roll parameter, whose estimation is part of the novel content of the paper, proposed by the authors.
That being the case, you are probably barking up the wrong tree by looking for a troubleshooting in this forum, because your difficulty is not a Matlab issue. It is a problem with the authors' idea.
payam samadi
el 22 de Dic. de 2025
Editada: payam samadi
el 22 de Dic. de 2025
payam samadi
el 22 de Dic. de 2025
payam samadi
el 22 de Dic. de 2025
payam samadi
el 1 de En. de 2026
I need to be clear. Nobody is going to read the full article you have posted. It's the kind of thing no one has time for. And, without reading the article, there is no way for forum participants to know why the novel algorithm that it proposes even should work in the first place (or at least why it should work in the mind of the article's author).
What you need to do is identify a piece of the algorithm that everyone can agree should work, even without reading the article, but which doesn't work, according to a coded demonstration that you will present. The community then has a chance of helping you understand why that section is not working.
payam samadi
el 2 de En. de 2026
Categorías
Más información sobre Image Registration en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!