11 research outputs found
Improving Quantification in Lung PET/CT for the Evaluation of Disease Progression and Treatment Effectiveness
Positron Emission Tomography (PET) allows imaging of functional processes in vivo by measuring the distribution of an administered radiotracer. Whilst one of its main uses is directed towards lung cancer, there is an increased interest in diffuse lung diseases, for which the incidences rise every year, mainly due to environmental reasons and population ageing. However, PET acquisitions in the lung are particularly challenging due to several effects, including the inevitable cardiac and respiratory motion and the loss of spatial resolution due to low density, causing increased positron range. This thesis will focus on Idiopathic Pulmonary Fibrosis (IPF), a disease whose aetiology is poorly understood while patient survival is limited to a few years only. Contrary to lung tumours, this diffuse lung disease modifies the lung architecture more globally. The changes result in small structures with varying densities. Previous work has developed data analysis techniques addressing some of the challenges of imaging patients with IPF. However, robust reconstruction techniques are still necessary to obtain quantitative measures for such data, where it should be beneficial to exploit recent advances in PET scanner hardware such as Time of Flight (TOF) and respiratory motion monitoring. Firstly, positron range in the lung will be discussed, evaluating its effect in density-varying media, such as fibrotic lung. Secondly, the general effect of using incorrect attenuation data in lung PET reconstructions will be assessed. The study will compare TOF and non-TOF reconstructions and quantify the local and global artefacts created by data inconsistencies and respiratory motion. Then, motion compensation will be addressed by proposing a method which takes into account the changes of density and activity in the lungs during the respiration, via the estimation of the volume changes using the deformation fields. The method is evaluated on late time frame PET acquisitions using ¹⁸F-FDG where the radiotracer distribution has stabilised. It is then used as the basis for a method for motion compensation of the early time frames (starting with the administration of the radiotracer), leading to a technique that could be used for motion compensation of kinetic measures. Preliminary results are provided for kinetic parameters extracted from short dynamic data using ¹⁸F-FDG
Data Driven Surrogate Signal Extraction for Dynamic PET Using Selective PCA
Respiratory motion correction is beneficial in PET. Methods of motion correction include gated reconstruction, where the acquisition is binned, based on a respiratory trace. To acquire these respiratory traces, an external device, like the Real Time Position Management System, or a data driven method, such as PCA, can be used. Data driven methods have the advantage that they are non-invasive, and can be performed post-acquisition. However, data driven methods have the disadvantage that they are adversely affected by the tracer kinetics of a dynamic acquisition. This work seeks to evaluate several adaptions of the PCA method, through which it can be used with dynamic data. The methods explored in this work include, using a moving window (similar to the KRG method of Schleyer et al. (PMB 2014)), extrapolation of the principal component from later time points to earlier time points, as well as a method to select and combine multiple respiratory components. The respiratory traces acquired, were evaluated on 21 patients, by calculating their correlation with a Real Time Position Management System surrogate signal. The results indicate that all methods produce better surrogate signals than when applying static PCA to dynamic data. Extrapolating a late principal component, produced more promising results than using a moving window, and selecting and combining components held benefits for all methods
Data driven surrogate signal extraction for dynamic PET using selective PCA: time windows versus the combination of components
Objective. Respiratory motion correction is beneficial in positron emission tomography (PET), as it can reduce artefacts caused by motion and improve quantitative accuracy. Methods of motion correction are commonly based on a respiratory trace obtained through an external device (like the real time position management system) or a data driven method, such as those based on dimensionality reduction techniques (for instance principal component analysis (PCA)). PCA itself being a linear transformation to the axis of greatest variation. Data driven methods have the advantage of being non-invasive, and can be performed post-acquisition. However, their main downside being that they are adversely affected by the tracer kinetics of the dynamic PET acquisition. Therefore, they are mostly limited to static PET acquisitions. This work seeks to extend on existing PCA-based data-driven motion correction methods, to allow for their applicability to dynamic PET imaging. Approach. The methods explored in this work include; a moving window approach (similar to the Kinetic Respiratory Gating method from Schleyer et al (2014)), extrapolation of the principal component from later time points to earlier time points, and a method to score, select, and combine multiple respiratory components. The resulting respiratory traces were evaluated on 22 data sets from a dynamic [18F]-FDG study on patients with idiopathic pulmonary fibrosis. This was achieved by calculating their correlation with a surrogate signal acquired using a real time position management system. Main results. The results indicate that all methods produce better surrogate signals than when applying conventional PCA to dynamic data (for instance, a higher correlation with a gold standard respiratory trace). Extrapolating a late time point principal component produced more promising results than using a moving window. Scoring, selecting, and combining components held benefits over all other methods. Significance. This work allows for the extraction of a surrogate signal from dynamic PET data earlier in the acquisition and with a greater accuracy than previous work. This potentially allows for numerous other methods (for instance, respiratory motion correction) to be applied to this data (when they otherwise could not be previously used)
Consensus recommendations on the use of 18F-FDG PET/CT in lung disease
Positron emission tomography (PET) with 18F-fluorodeoxyglucose (18F-FDG)
has been increasingly applied, predominantly in the research setting,
to study drug effects and pulmonary biology and
monitor disease progression and treatment outcomes
in lung diseases, disorders that interfere with gas exchange through
alterations
of the pulmonary parenchyma, airways and/or
vasculature. To date, however, there are no widely accepted standard
acquisition
protocols and imaging data analysis methods for
pulmonary 18F-FDG PET/CT in these diseases, resulting in
disparate approaches. Hence, comparison of data across the literature is
challenging.
To help harmonize the acquisition and analysis and
promote reproducibility, acquisition protocol and analysis method
details
were collated from seven PET centers. Based on
this information and discussions among the authors, the consensus
recommendations
reported here on patient preparation, choice of
dynamic versus static imaging, image reconstruction, and image analysis
reporting
were reached.
</p
Effect of attenuation mismatches in time of flight PET reconstruction
© 2020 Institute of Physics and Engineering in Medicine. While the pursuit of better time resolution in positron emission tomography (PET) is rapidly evolving, little work has been performed on time of flight (TOF) image quality at high time resolution in the presence of modelling inconsistencies. This works focuses on the effect of using the wrong attenuation map in the system model, causing perturbations in the reconstructed radioactivity image. Previous work has usually considered the effects to be local to the area where there is attenuation mismatch, and has shown that the quantification errors in this area tend to reduce with improved time resolution. This publication shows however that errors in the PET image at a distance from the mismatch increase with time resolution. The errors depend on the reconstruction algorithm used. We quantify the errors in the hypothetical case of perfect time resolution for maximum likelihood reconstructions. In addition, we perform reconstructions on simulated and patient data. In particular, for respiratory-gated reconstructions from a wrong attenuation map, increased errors are observed with improved time resolutions in areas close to the lungs (e.g. from 13.3% in non-TOF to up to 20.9% at 200 ps in the left ventricle)
Recommended from our members
Data driven surrogate signal extraction for dynamic PET using selective PCA: time windows versus the combination of components.
Acknowledgements: This research was supported by GE Healthcare, the NIHR UCLH Biomedical Research Centre and the UCL EPSRC Centre for Doctoral Training in Intelligent, Integrated Imaging in Healthcare (i4health) Grant (EP/L016478/1). The software used was partly produced by the Computational Collaborative Project on Synergistic Biomedical Imaging, CCP SyneRBI, UK EPSRC Grant (EP/T026693/1). Jamie R McClelland is supported by a Cancer Research UK Centres Network Accelerator Award Grant (A21993) to the ART-NET consortium and a CRUK Multi-disciplinary Grant (CRC 521).Funder: NIHR UCLH Biomedical Research CentreFunder: GE Healthcare; doi: http://dx.doi.org/10.13039/100006775Objective.Respiratory motion correction is beneficial in positron emission tomography (PET), as it can reduce artefacts caused by motion and improve quantitative accuracy. Methods of motion correction are commonly based on a respiratory trace obtained through an external device (like the real time position management system) or a data driven method, such as those based on dimensionality reduction techniques (for instance principal component analysis (PCA)). PCA itself being a linear transformation to the axis of greatest variation. Data driven methods have the advantage of being non-invasive, and can be performed post-acquisition. However, their main downside being that they are adversely affected by the tracer kinetics of the dynamic PET acquisition. Therefore, they are mostly limited to static PET acquisitions. This work seeks to extend on existing PCA-based data-driven motion correction methods, to allow for their applicability to dynamic PET imaging.Approach.The methods explored in this work include; a moving window approach (similar to the Kinetic Respiratory Gating method from Schleyeret al(2014)), extrapolation of the principal component from later time points to earlier time points, and a method to score, select, and combine multiple respiratory components. The resulting respiratory traces were evaluated on 22 data sets from a dynamic [18F]-FDG study on patients with idiopathic pulmonary fibrosis. This was achieved by calculating their correlation with a surrogate signal acquired using a real time position management system.Main results.The results indicate that all methods produce better surrogate signals than when applying conventional PCA to dynamic data (for instance, a higher correlation with a gold standard respiratory trace). Extrapolating a late time point principal component produced more promising results than using a moving window. Scoring, selecting, and combining components held benefits over all other methods.Significance.This work allows for the extraction of a surrogate signal from dynamic PET data earlier in the acquisition and with a greater accuracy than previous work. This potentially allows for numerous other methods (for instance, respiratory motion correction) to be applied to this data (when they otherwise could not be previously used)
STIR Software for Tomographic Image Reconstruction
<h1>Summary of changes in STIR release 5.2.0</h1>
<p>This version is 100% backwards compatible with STIR 5.0 as far as usage goes. However, there are changes in the output of scatter estimation and ECAT8 normalisation, see below for more information.</p>
<h2>Overall summary</h2>
<p>Of course, there is also the usual code-cleanup and improvements to the documentation. See also <a href="https://github.com/UCL/STIR/milestone/6">the 5.2 milestone on GitHub</a>.</p>
<p>Overall code management and assistance by Kris Thielemans (UCL and ASC). Other main contributors were Daniel Deidda (NPL) and Markus Jehl (Positrigo).</p>
<h2>Patch release info</h2>
<ul>
<li>5.2.0 released 30/10/2023</li>
</ul>
<h2>Summary for end users (also to be read by developers)</h2>
<h3>Bug fixes</h3>
<ul>
<li>Scatter estimation was setting initial activity image to 1 at set-up, effectively ignoring the initial image, aside from geometric info.</li>
<li>Setting SPECTUB resolution model with STIR python or SIRF divided slope by 10 in error. The problem did not occur when set using parameter file</li>
</ul>
<h3>Changed functionality</h3>
<ul>
<li>The ECAT8 normalisation (used for the Siemens mMR) code now takes the 4th component <em>axial effects</em> into account. These normalisation factors are therefore different (even up to ~10%). This gives improved axial uniformity in the images. The use of the axial effects can be switched off by adding setting <code>use_axial_effects_factors:=0</code> to the parameter file (see an example in <code>examples/Siemens-mMR/correct_projdata_no_axial_effects.par</code>), or the class member of the same name.
In addition, the Siemens normalisation header is now read (using a new class <code>InterfileNormHeaderSiemens</code>) such that hard-coded variables for the Siemens mMR have been removed. Further testing of this functionality is still required however.
<a href="https://github.com/UCL/STIR/pull/1182/">PR #1182</a>.</li>
<li>Interfile header parsing now correctly identifies keywords that contain a colon by checking for <code>:=</code>.</li>
<li>The <code>set_up()</code> method of the ray-tracing projection matrix now skips further processing if it was already called with data of the same characteristics. This will means that any cached data will be re-used, potentially leading to a speed-up when re-using it from Python.
<a href="https://github.com/UCL/STIR/pull/1281/">PR #1281</a>.</li>
</ul>
<h3>New functionality</h3>
<ul>
<li><p>The <code>Discretised Shape3D</code> shape/ROI has now an extra value <code>label index</code>. For ROIs, this allows using a single volume with multiple ROIs encoded as labels, such as output by ITKSnap and many others. When used as a shape in <code>generate_image</code>, it could be used to extract a single ROI from such a label image.
<a href="https://github.com/UCL/STIR/pull/1196/">PR #1196</a>.</p>
</li>
<li><p>Global variables in SPECTUB have been substituted by class members, such that multiple SPECTUB projectors can be used.
<a href="https://github.com/UCL/STIR/pull/1169/">PR #1169</a>.</p>
</li>
<li><p>Global variables in PinholeSPECTUB have been substituted by class members, such that multiple PinholeSPECTUB projectors can be used.
<a href="https://github.com/UCL/STIR/pull/1212/">PR #1212</a>.</p>
</li>
<li><p>Scatter estimation is now smoothed in axial direction for BlocksOnCylindrical scanners.
<a href="https://github.com/UCL/STIR/pull/1172/">PR #1172</a>.</p>
</li>
<li><p><code>InverseSSRB</code> now works for BlocksOnCylindrical after a rewrite.
<a href="https://github.com/UCL/STIR/pull/1172/">PR #1172</a>. /</p>
</li>
<li><p>Parallelised function <code>set_fan_data_add_gaps_help</code> across segments to reduce computation time.
<a href="https://github.com/UCL/STIR/pull/1168/">PR #1168</a>.</p>
</li>
<li><p>New utility <code>SPECT_dicom_to_interfile</code> which reads a DICOM file with SPECT projection data and extracts the data and writes one or more Interfile 3.3 headers (still somewhat preliminary).
<a href="https://github.com/UCL/STIR/pull/1182/">PR #1182</a>.</p>
</li>
<li><p>The new <code>stir_timings</code> utility is mostly useful for developers, but you could use it to optimise the number of OpenMP threads to use for your data.
<a href="https://github.com/UCL/STIR/pull/1237/">PR #1237</a>.</p>
</li>
<li><p>New classes <code>SegmentIndices</code>, <code>ViewgramIndices</code> and <code>SinogramIndices</code>, used by <code>ProjData</code> related classes, as opposed to having to specify all the elements directly, e.g. in C++</p>
<pre><code> auto sinogram = proj_data.get_sinogram(sinogram_indices);</code></pre>
<p>This makes these functions more future proof, in particular for TOF. The older functions are now deprecated. Note that as <code>Bin</code> is now derived from <code>ViewgramIndices</code>, instantations of <code>Bin</code> can now be used to specify the indices as well in most places.
There is still more work to do here, mostly related to the symmetries.
<a href="https://github.com/UCL/STIR/pull/1273/">PR #1273</a>.</p>
</li>
</ul>
<h4>Python (and MATLAB)</h4>
<ul>
<li>Examples use <code>stir.ProjData.read_from_file</code> as opposed to <code>stir.ProjData_read_from_file</code>. The former is supported since SWIG 3.0, and the <a href="https://swig.org/Doc4.1/Python.html#Python_nn20">default from SWIG 4.1</a>.</li>
<li>Addition of <code>DetectionPosition</code> and <code>DetectionPositionPair</code>.</li>
<li><code>bin.time_frame_num</code> is now no longer a function in Python, but acts like a variable (as the other <code>Bin</code> members).</li>
<li>Addition of <code>RadionuclideDB</code></li>
</ul>
<h3>New examples</h3>
<ul>
<li><code>examples/python/construct_projdata_demo.py</code> illustrates constructing a <code>ProjDataInMemory</code></li>
</ul>
<h3>Changed functionality</h3>
<ul>
<li>Scatter estimation was resetting the activity image to 1 before each iteration. This led to cases where the reconstructed image (and therefore the scatter estimation) did not converge, especially when using a small number of sub-iterations. Now, the reconstructed image is continuouslu updated between scatter iterations by default. This should also allow users to use less sub-iterations, therefore saving some time for the scatter estimation. The old behaviour can be re-enabled by setting <code>restart_reconstruction_every_scatter_iteration</code> to true either via a parameter file or via the <code>set_restart_reconstruction_every_scatter_iteration()</code> function.
<a href="https://github.com/UCL/STIR/pull/1160/">PR #1160</a>.</li>
<li>energy resolution functions and keywords have now more documentation. <code>Scanner::check_consistency</code> also checks if the energy resolution is less than 20 (as it is FWHM/reference_energy).
<a href="https://github.com/UCL/STIR/pull/1149/">PR #1149</a>.</li>
<li>Errors now throw <code>std::runtime_error</code> instead of <code>std::string</code>.
<a href="https://github.com/UCL/STIR/pull/1131/">PR #1131</a>.</li>
<li>The parameter <code>use_view_offset</code> was removed from the <code>interpolate_projdata</code> functions. View-offset is now always taken into account.
<a href="https://github.com/UCL/STIR/pull/1172/">PR #1172</a>.</li>
<li>The info, warning and error calls are thread safe now (which makes them slower), and the logging output in <code>distributable.cxx</code> was changed from verbosity 2 (which is the STIR default) to verbosity 3. This is to reduce the default output during iterative reconstructions.
<a href="https://github.com/UCL/STIR/pull/1243/">PR #1243</a>.</li>
<li>The <code>Succeeded</code> class has a new method <code>bool succeeded()</code> enabling more concise code (avoiding the need for comparing with <code>Succeeded::yes</code> which is especially verbose in Python).</li>
<li>The example files for the Siemens mMR now use lower min/max thresholds for the (single) scatter scale. This gives better results, see <a href="https://github.com/UCL/STIR/issues/1163/">Issue #1163</a>.
<a href="https://github.com/UCL/STIR/pull/1279/">PR #1279</a>.</li>
</ul>
<h3>Deprecated functionality and upcoming changes to required tool versions</h3>
<ul>
<li>The following functions (previously used for upsampling the scatter estimate) have been made obsolete or replaced, and will be removed in STIR version 6.0.0: <code>interpolate_axial_position</code>, <code>extend_sinogram_in_views</code> and <code>extend_segment_in_views</code></li>
<li>Constructors/functions in <code>ProjData</code> related classes that explicitly use <code>axial_pos_num</code>, <code>view_num</code> etc in their arguments are now deprecated, and should be replaced by their respective versions that use <code>SegmentIndices</code>, <code>ViewgramIndices</code> or <code>SinogramIndices</code>. The former will not be compatible with TOF information that will be introduced in version 6.0.0.</li>
<li>Use of the AVW library to read Analyze files will be removed in 6.0, as this has not been checked in more than 15 years. Use ITK instead.</li>
<li>GE VOLPET and IE support will be removed in 6.0, as we have no files to test this, and it's obsolete anyway.</li>
<li>STIR version 6.0.0 will require C++ 14 (currently we require C++ 11, but already support C++ 20) and CMake 3.14.</li>
</ul>
<h3>Build system and dependencies</h3>
<ul>
<li>CMake 3.12 is now required on Windows.</li>
<li>We now use CMake's <a href="https://gitlab.kitware.com/cmake/community/-/wikis/doc/tutorials/Object-Library">OBJECT library feature</a> for the registries. This avoids re-compilation of the registries for every executable and therefore speeds-up building time. Use of STIR in an external project is not affected as long as the recommended practice was followed. This is now documented in the User's Guide.
<a href="https://github.com/UCL/STIR/pull/1141/">PR #1141</a>.</li>
<li>The <code>error</code> and <code>warning</code> functions are now no longer included from <code>common.h</code> and need to be included manually when used (as was already the case for <code>#include "stir/info.h"</code>).
<a href="https://github.com/UCL/STIR/pull/1192/">PR #1192</a>.</li>
<li>add .h and .i as dependencies for SWIG generated wrappers to make sure they get rebuild. (Currently adding all .h files, which is too much, but CMake needs a fix before we can do this properly).
<a href="https://github.com/UCL/STIR/pull/1218/">PR #1218</a>.</li>
</ul>
<h3>Changes for developers</h3>
<ul>
<li>moved all functionality in <code>CListEventCylindricalScannerWithDiscreteDetectors</code> to template class <code>CListEventScannerWithDiscreteDetectors</code> (templated in <code>ProjDataInfoT</code>). This enables re-use for generic/blocksoncylindrical scanners.
<a href="https://github.com/UCL/STIR/pull/1222/">PR #1222</a>.</li>
<li>rewritten <code>ProjDataInMemory</code> to avoid streams, causing a speed-up of some operations, and removing a limit of total size of 2GB.
<a href="https://github.com/UCL/STIR/pull/1260/">PR #1260</a>.</li>
</ul>
<h3>Known problems</h3>
<ul>
<li>See <a href="https://github.com/UCL/STIR/labels/bug">our issue tracker</a>.</li>
</ul>
<h3>Minor (?) bug fixes</h3>
<ul>
<li>Small change in scatter simulation to how non-arccorrected bins are computed. Added a check in the construction of non-arccorrected projdata that the number of tangential bins is not larger than the maximum non-arccorrected bins.
<a href="https://github.com/UCL/STIR/pull/1152/">PR #1152</a>.</li>
<li><code>extend_segment_in_views</code> does not handle view offsets correctly and does not work for BlocksOnCylindrical scanners
<a href="https://github.com/UCL/STIR/issues/1177/">issue #1177</a>. A new function <code>extend_segment</code> was added that works for Cylindrical and BlocksOnCylindrical and allows extension in tangential and axial direction as well.
<a href="https://github.com/UCL/STIR/pull/1172/">PR #1172</a>.</li>
<li><code>sample_function_on_regular_grid</code> did not handle offset correctly in all places
<a href="https://github.com/UCL/STIR/issues/1178/">issue #1178</a>.
<a href="https://github.com/UCL/STIR/pull/1172/">PR #1172</a>.</li>
<li>Ray tracing projection for BlocksOnCylindrical scanner geometries contained a bug where some bins were swapped across oblique segments
<a href="https://github.com/UCL/STIR/issues/1223/">issue #1223</a>. This sometimes lead to large artifacts in reconstructions.
<a href="https://github.com/UCL/STIR/pull/1231/">PR #1231</a>.</li>
</ul>
<h3>Documentation changes</h3>
<ul>
<li>Updated the STIR developers guide, which was quite out-of-date w.r.t. C++ features etc.</li>
</ul>
<h3>recon_test_pack changes</h3>
<ul>
<li>Updated headers of most images and projection data to avoid warnings.</li>
</ul>
<h3>Other changes to tests</h3>
<ul>
<li><code>test_Scanner.cxx</code> tests for energy resolution, <a href="https://github.com/UCL/STIR/pull/1149/">PR #1149</a>.</li>
<li>New file <code>test_interpolate_projdata</code>, <a href="https://github.com/UCL/STIR/pull/1141/">PR #1141</a>.</li>
</ul>If you use this software, please cite it using the metadata from this file
Low incidence of SARS-CoV-2, risk factors of mortality and the course of illness in the French national cohort of dialysis patients
International audienceThe aim of this study was to estimate the incidence of COVID-19 disease in the French national population of dialysis patients, their course of illness and to identify the risk factors associated with mortality. Our study included all patients on dialysis recorded in the French REIN Registry in April 2020. Clinical characteristics at last follow-up and the evolution of COVID-19 illness severity over time were recorded for diagnosed cases (either suspicious clinical symptoms, characteristic signs on the chest scan or a positive reverse transcription polymerase chain reaction) for SARS-CoV-2. A total of 1,621 infected patients were reported on the REIN registry from March 16th, 2020 to May 4th, 2020. Of these, 344 died. The prevalence of COVID-19 patients varied from less than 1% to 10% between regions. The probability of being a case was higher in males, patients with diabetes, those in need of assistance for transfer or treated at a self-care unit. Dialysis at home was associated with a lower probability of being infected as was being a smoker, a former smoker, having an active malignancy, or peripheral vascular disease. Mortality in diagnosed cases (21%) was associated with the same causes as in the general population. Higher age, hypoalbuminemia and the presence of an ischemic heart disease were statistically independently associated with a higher risk of death. Being treated at a selfcare unit was associated with a lower risk. Thus, our study showed a relatively low frequency of COVID-19 among dialysis patients contrary to what might have been assumed