# -*- coding: utf-8 -*-
# Copyright 2021- 2022 United Kingdom Research and Innovation
# Copyright 2021 - 2022 The University of Manchester
# Copyright 2021 - 2022 Technical University of Denmark
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Authored by: Jakob S. Jørgensen (DTU)
# Laura Murgatroyd (UKRI-STFC)
To further experiment with tomographic reconstruction and data processing using CIL we provide a few additional data sets, suggestions for experiments and links to CIL resources including publications, documentation and demos.
The following data sets have been downloaded and are available on the STFC Cloud shared drive (read only).
Most of the data sets provided are 3D. For faster execution times in the experiments we suggest to extract a single slice and work only with such a 2D data set. From the loaded 3D AcquisitionData
object, data3D
, a 2D slice AcquisitionData
can be extracted using the get_slice
method, for example
data2D = data3D.get_slice(vertical=27)
will extract vertical slice number 27 as a new 2D AcquisitionData
object, data2D
.
For Cone3D cone-beam datasets only the central slice can be extracted as a Cone2D (fan-beam) dataset, this is done using
data2D = data3D.get_slice(vertical='centre')
If an even number of slices are available in data3D
, then the above command will produce a slice that is interpolated from the two central slices.
Nikon datasets can be loaded using the CIL NikonDataReader
in the cil.io
module.
Zeiss datasets can be loaded using the CIL ZEISSDataReader
in the cil.io
module.
Crystals in clay:
Cone-beam Nikon data set of crystals in clay from, described at
SophiaBeads:
Cone-beam Nikon data set of glass beads. Data sets with different trade-offs between numbers of projections and exposure time are available, the 256-projection data set is available on the STFC Cloud. Description at
LEGO laminography dataset:
A rotary laminography tomography dataset of a sample of LEGO brick acquired on a Nikon micro-CT instrument, described at
HDTomo datasets:
Six Zeiss cone-beam data sets including the walnut dataset, as well as Kinder Surprise chocolate eggs, a USB stick and more, with descriptions at
Sandstone:
The parallel-beam sandstone synchrotron data set, both a small extracted data set and the full projections are available from
FIPS data: A collection of X-ray CT data sets is available from the Finnish Inverse Problems Society:
Try reconstructing different real data sets:
Choose one or more of the datasets listed above. Load the dataset, determine and carry out any preprocessing required, and compute an FBP or FDK reconstruction. Try also to reconstruct using your favourite iterative/regularized reconstruction method. Apply CIL processors to preprocess data as necessary, possibly after having added noise, artifacts or reduced the datasets yourself.
Relevant notebooks: 01_intro_walnut_conebeam.ipynb, 02_intro_sandstone_parallel_roi.ipynb, 03_preprocessing.ipynb
Synthetic data:
Try out loading and generating simulated data from phantoms provided by CIL (cil.utilities.dataexample) or the TomoPhantom CIL plugin (cil.plugins.TomoPhantom). Choose either full data or incomplete data of your choice, add noise, and reconstruct using FBP or iterative methods SIRT or CGLS.
Relevant notebooks: 03_preprocessing.ipynb, 04_FBP_CGLS_SIRT.ipynb
Reduced data reconstruction:
Use CIL processors (e.g. Slicer or Binner or Masker/MaskGenerator) to remove parts of or downsample data sets, for example to obtain a reduced number of projections, a limited angle problem, truncated projections (region of interest data), exterior problem, etc. Compare for example different reconstruction methods at increasingly few projections.
Relevant notebooks: 03_preprocessing.ipynb
Investigate "inverse crime":
When simulating data, if we use the same model, i.e., LinearOperator for generating the data and for reconstructing, then we may obtain too promising results, because the data is "too good". For example we commit an inverse crime if we use a 256x256 phantom and generate data with a ProjectionOperator and then choose to also reconstruct on the same 256x256 domain using the same ProjectionOperator. Compare the inverse crime scenario reconstruction result with more realistic simulation using a phantom at finer resolution (e.g., 500x500, 1000x1000, 2000x2000 pixels, i.e. more but smaller pixels) and reconstruction onto a 256x256 grid.
Relevant notebooks: 00_CIL_geometry.ipynb
Geometric artifacts:
To obtain a high-quality reconstruction the acquisition geometry used in the reconstruction procedure must closely match the actual acquisition geometry of X-ray CT system. Otherwise geometric or misalignment artifacts will occur. Experiment with using one acquisition geometry for simulation of data and a modified acquisition geometry for the reconstruction to see the effect of different types and amounts of incorrect geometry. This could include different center of rotation, detector pixel size or orientation and for cone-/fan-beam different source to centre or centre to detector distances.
Relevant notebooks: 00_CIL_geometry.ipynb
CIL documentation
https://tomographicimaging.github.io/CIL/
Main CIL GitHub repository
https://github.com/TomographicImaging/CIL
CIL demos and training material repository
https://github.com/TomographicImaging/CIL-Demos
Core Imaging Library -- Part I: a versatile Python framework for tomographic imaging
by Jakob S. Jørgensen, Evelina Ametova, Genoveva Burca, Gemma Fardell, Evangelos Papoutsellis, Edoardo Pasca, Kris Thielemans, Martin Turner, Ryan Warr, William R. B. Lionheart, Philip J. Withers
https://arxiv.org/abs/2102.04560
Core Imaging Library -- Part II: Multichannel reconstruction for dynamic and spectral tomography
by Evangelos Papoutsellis, Evelina Ametova, Claire Delplancke, Gemma Fardell, Jakob S. Jørgensen, Edoardo Pasca, Martin Turner, Ryan Warr, William R. B. Lionheart, and Philip J. Withers
https://arxiv.org/abs/2102.06126
Enhanced hyperspectral tomography for bioimaging by spatiospectral reconstruction
by Ryan Warr, Evelina Ametova, Robert J. Cernik, Gemma Fardell, Stephan Handschuh, Jakob S. Jørgensen, Evangelos Papoutsellis, Edoardo Pasca, and Philip J. Withers
https://arxiv.org/abs/2103.04796
Crystalline phase discriminating neutron tomography using advanced reconstruction methods
by Evelina Ametova, Genoveva Burca, Suren Chilingaryan, Gemma Fardell, Jakob S. Jørgensen, Evangelos Papoutsellis, Edoardo Pasca, Ryan Warr, Martin Turner, William R B Lionheart, and Philip J Withers