CERN / TIGRE

TIGRE: Tomographic Iterative GPU-based Reconstruction Toolbox
BSD 3-Clause "New" or "Revised" License
581 stars 190 forks source link

Half-beam (offset) CT reconstruction #557

Closed ProjX0 closed 3 months ago

ProjX0 commented 5 months ago

I am attempting half-beam (offset) CT using the TIGRE toolkit. I have modified my code as follows. Could you provide any additional code or advice to improve the image quality for half-beam (offset) geometry?

And, my issue is geometry calibration in half-beam CT. Does TIGRE have any functions for geometry calibration, such as correcting offsets?


%%
angles = linspace(0, 2*pi, size(P.ProjLog,3)); 

% geo
geo.DSD = 660;                                              % Distance Source Detector (mm)
geo.DSO = 410;                                              % Distance Source Origin (mm)

% Detector parameters
geo.nDetector = [size(P.ProjLog,2); size(P.ProjLog,1)];     % number of pixels [Width, Height] (px)
geo.dDetector = [0.098 * P.Bin; 0.098 * P.Bin];             % size of each pixel (mm)
geo.sDetector = geo.dDetector.* geo.nDetector;              

% Image parameters
geo.nVoxel = [750; 750; 450];                               % number of voxels [Width, Height, Depth] (vx)
geo.sVoxel = [750 * 0.20; 750 * 0.20; 450 * 0.20];          % total size of the image (mm)
geo.dVoxel = geo.sVoxel ./ geo.nVoxel;                      % size of each voxel (mm)

% Offsets
geo.offOrigin = [0; 0; 0];                                  % Offset of image from origin (mm)
% geo.offDetector = [120.927; 3.57295];                       % Offset of Detector (mm)
geo.offDetector = [-120.927 /P.Bin; 3.57295 /P.Bin];
geo.COR = 0;                                                % Center of Rotation offset (mm)

% Auxiliary
geo.accuracy = 0.5;                                         % Accuracy of FWD proj (vx/sample)
geo.mode = 'cone';                                          % Cone beam CT

% FDK with wang weight
imgFDK1 = FDK(single(P.ProjLog), geo, angles, 'filter', 'hann', 'wang', true);

figure,imshow3Dfull(imgFDK1,[0 0.1])
AnderBiguri commented 5 months ago

Is there any issue with this reconstruction?

But we don't have any geometry calibration code no, TIGRE assumes you know your geometry perfectly.

ProjX0 commented 5 months ago

Actually, I am unsure about the offset part of the geometry information. Therefore, I asked about motion compensation in this issue on https://github.com/CERN/TIGRE/issues/558 . I wanted to know if it is possible to estimate the offset for center of half-beam.

AnderBiguri commented 5 months ago

@ProjX0 Those are very different topics actually. If you are "correcting" for motion of the machine, that is just a geometry definition issue. Estimating that is not a trivial thing, but its generally called "geometric calibration/estimation" in the literature. TIGRE has no functions to do so, as I said, it expectes you to know the geometry. Motion compensation is for when the patient/object is moving, generally in a non-rigid way.

I can help with the offsets, but you will need to be more descriptive than "unsure about offset part", so I know what to explain. For a detector offset scan, indeed geo.offDetector is the parameter to change, as you do in the code you showed.

ProjX0 commented 5 months ago

After much trial and error, I have successfully reconstructed half-beam CT images using TIGRE. Thank you very much for providing such a useful toolkit. If I encounter any bugs related to this, I will inform you. You can close the issue.

AnderBiguri commented 5 months ago

Great news! Don't hesitate to come with any other issue :)