How can I localize 2D projections in (dense, transparent) 3D volumes? I seem to only find algorithms that work on datasets with non-transparent surfaces. Those algorithms rely on geometric assumptions that do not hold true in DVR environments (with semi-transparent objects).
I have CT/MRI scans (3D volumes) and X-rays (2D projections) of the same object and I need to match their coordinate systems. The goal is to find the position of features in the volume that are visible in the x-ray but not in the CT/MRI.
My idea was to synthesize images from the volume and use image matching algorithms to find the 'camera parameters' of the x-ray: I set up a renderer to synthesize 2D images from the volume (DRR - digitally reconstructed radiograph). I then added an ORB detector and matcher. Trying to brute-force it (iteratively move the camera position closer to the current best match (e.g. binary search or golden-section search) does not yield stable results.
I suspect this is partly due to the many degrees of freedom but also because the ORB detector is fed with a single-channel dataset and has trouble finding good features. I have a good starting point for the search but am not sure if the features remain 'stable enough' even for small variations of the camera position. I thought of using SLAM algorithms to map features of the volume and then use their relocalization feature but again, their geometric assumptions do not work in my environment. Using 'simpler' image matching algorithms is difficult as well, since the DRRs will never look exactly like the original and also because the x-ray is heavily obstucted (~50% usable).
I would greatly appreciate any ideas or references to related works. Thanks!
Edit: Source code is on github. Unfortunately I cannot share actual images, as they contain sensitive patient information. As an example, I can share a rendered image from a dummy head (actual scan from an artificial head with true to life densities):
The x-ray images will have ~50% obstructed by operation instruments. Currently my projections are rudimentary but produce upwards of 300fps. When adding orb detection and matching I still get around 120fps. I could make them better and trade off some performance but the entire process of matching two images to one volume must take place within few minutes as it will be used during operations. However my matcher doesn't even reliably find self generated images. Rotations work well but translation by a few cm already breaks it. Might orb detectors work better if I add filters to the image? For example sobel operator for border detection?