Implementing Shift and Add Algorithm for 3D Reconstruction of X-ray Images

  • Thread starter Thread starter Aaerion
  • Start date Start date
  • Tags Tags
    Algorithm Shift
Click For Summary
SUMMARY

The forum discussion centers on implementing the shift and add algorithm for reconstructing 3D models from 16 X-ray images of a finger joint, captured using a C-arm X-ray system with 5-degree angular increments. The project references two key research articles: Kolitsi et al. (1992) and Li & Jiang (2005), which outline the methodology and equations necessary for the algorithm. The user faces challenges with the implementation, particularly with the calculation of the index value 'r', which often results in non-integer values and out-of-bounds errors. Adjustments to the code have been made, but the output still does not meet the expected results.

PREREQUISITES
  • Understanding of the shift and add algorithm in image processing
  • Familiarity with C-arm X-ray imaging techniques
  • Knowledge of matrix manipulation in programming
  • Proficiency in interpreting scientific research articles related to medical physics
NEXT STEPS
  • Review the equations and methodology presented in Li & Jiang's 2005 article for potential implementation insights
  • Learn about integer rounding techniques in programming to handle index values effectively
  • Explore debugging strategies for matrix manipulation in image processing
  • Investigate alternative algorithms for 3D reconstruction from projection images
USEFUL FOR

Students and researchers in medical imaging, software developers working on image processing algorithms, and professionals involved in 3D reconstruction techniques using X-ray data.

Aaerion
Messages
4
Reaction score
2
Problem:
In my class, we have been assigned a project where we must implement a shift and add algorithm to a set of xray images. There are 16 xray images of a finger joint taken with a 5 angle increment using a C-arm xray system. The xray images we will be given is from the second citation that I have below. We have to use the shift and add algorithm with these images to obtain cross-section slices through the entire figure so that we can reconstruct a 3D model of the object shown in the xray projections.

All of the work that we do in this project is based upon two research articles:

Z. Kolitsi, G. Panayiotakis, V. Anastassopoulos, A. Scodras, and N. Pallikarakis, “A multiple projection method for digital tomosynthesis,” Med. Phys. http://dx.doi.org/10.1118/1.596822 19, 1045–1050 (1992).

and

S. Li and H. Jiang, “A practical method for three-dimensional reconstruction of joints using C-arm system and shift-and-add algorithm,” Med. Phys. 32, 1491–1499 (2005). http://dx.doi.org/10.1118/1.1915289My understanding of the problem:

The experimental set-up in Li's article is the following:
experiment_zpsb1103de4.png

Where the cylindrical object is rotated along the y axis.The variables to describe the shift and add algorithm are given in the below figure:
nomen_zps2375ed23.png


Where:
ω= rotation relative to isocenter
b= distance of source to isocenter
d= distance of source to intensifier plane
l = distance of object plane to isocenter

The given equations in the article to describe the shift-and-add algorithm are the following:
equations_zps64afbbb6.png

Where:
i = column number in matrix of projection image M_n(i,j)
r= the column position where i is moved to in M'_n(i,j)

The final projection image at depth m is:
finaleq_zps76816a78.png

where M'_n(i,j) = M_n(r,j)My attempt:
From the above information, I determined:

i= 1 to total columns of image
l= 0 to 20mm
\omega= \omega + \Delta \omega = \omega + 5°
b= 315 mm
d= 315mm + 135mm =450 mm

I think this might be one place where I am going wrong, but I'm not sure how it would be wrong. The code that I made for this is: http://pastebin.com/S949UbQs

In order to test my code, I followed what Li did in his article and used an xray picture of a cylinder:
http://i1302.photobucket.com/albums/ag122/abysstheory/image1_zpsb2be43fc.jpg

My results looked like this:
http://i1302.photobucket.com/albums/ag122/abysstheory/0_zps21e9ff15.jpeg
http://i1302.photobucket.com/albums/ag122/abysstheory/11_zps0a0c4fe9.jpeg
http://i1302.photobucket.com/albums/ag122/abysstheory/20_zpsd7c1e352.jpeg

When they should have looked like this:
http://i1302.photobucket.com/albums/ag122/abysstheory/Proper_zps41ef5696.pngNoticed Problems:

When I run my code, the value of r is almost always is a non integer value which is strange since it is supposed to be an integer index value. I deal with this by rounding the value of r and using that as the new index value that column i will be shifted to.

Furthermore, I notice that many times r becomes greater than the maximum column value for the matrix or it becomes negative. I currently deal with this in my code by setting r=1, but I'm not sure that this is really the correct way to go about things.

I'm not really sure where I'm going wrong with my implementation of the shift and add algorithm.
 
  • Like
Likes   Reactions: Isha Tawade
Physics news on Phys.org
By the way, here are links to the sources:
https://drive.google.com/file/d/0B2znAN7W7eljdENfZE5tWUhUUk0/edit?usp=sharing

https://drive.google.com/file/d/0B2znAN7W7eljZTZPZV8tMUxuQVU/edit?usp=sharing

I made a slight change to my code because I had the following:

else
Mp(j,i)=imageData(j,rn);​

but then I realized that it should instead be:
else​
Mp(j,rn)=imageData(j,i);
since I am taking the data from imageData in the i column and shifting it to rn in the new matrix, Mp.

With this adjustment, I now get the following output (that is still not what I want):
http://i1302.photobucket.com/albums/ag122/abysstheory/0_zpscb7d6498.jpeg
 
  • Like
Likes   Reactions: Isha Tawade

Similar threads

Replies
1
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 6 ·
Replies
6
Views
3K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
13K
  • · Replies 3 ·
Replies
3
Views
2K