LLNL / LEAP

comprehensive library of 3D transmission Computed Tomography (CT) algorithms with Python and C++ APIs, a PyQt GUI, and fully integrated with PyTorch
https://leapct.readthedocs.io
MIT License
120 stars 12 forks source link

The pitch in helical reconstruction #117

Open stefenmax opened 1 month ago

stefenmax commented 1 month ago

Hi, Recently, I've been working on reconstructing multi-energy photon-counting CT data using LEAP. The reconstruction geometry is for a helical scan with a pitch of 10 mm.

I noticed that in d03, there’s a parameter called leapct.set_normalizedHelicalPitch(0.5). What unit is used here, and why is it referred to as "normalized" helical pitch?

Alternatively, should I be specifying the pitch directly in the following line instead?

leapct.set_conebeam(numAngles, numRows, numCols, pixelSize, pixelSize, 0.5*(numRows-1), 0.5*(numCols-1), leapct.setAngleArray(numAngles, 360.0*numTurns), 1100, 1400, pitch = 10)

Thanks!

kylechampley commented 1 month ago

The units of the helical pitch are mm/rad and the normalized helical pitch is unitless. These two quantities are related by: (helical pitch) = numRows * pixelHeight (sod/sdd)) / 2pi) (normalized helical pitch)

It is called normalized because the normalized helical pitch is given relative to the detector height at iso-center. So a normalized helical pitch of one means that for every full rotation of the source (360 degrees) and bed (or stage position) shifts by the detector height at iso. The "at iso" is the reason for the sod/sdd term.

It does not matter whether or not you specify the helical pitch in the set_conebeam function or whether you set it in set_helicalPitch or set_normalizedHelicalPitch

stefenmax commented 1 month ago

In my DICOM tag, the pitch can also calaulate by comparing SampleAxisPos and GantryRotationAngle private tags. The unit should be consistent with yours. But after specify that, the reconstruction result is not good. I already send you the one projection dicom file, once you have time can you help me check the parameter? Thanks!

kylechampley commented 1 month ago

I don't think I can help without getting more information. If it helps, I would be willing to sign an NDA.