ldctbench.evaluate.ldct_iqa
LDCTIQA(device=None)
Class to perform no-reference IQA on LDCT images using the winning model of the Low-dose Computed Tomography Perceptual Image Quality Assessment Grand Challenge 20231 which was organized in conjunction with MICCAI 2023.
The aim of the challenge was to develop no-reference IQA methods that correlate well with scores provided by radiologists. To this end, the organizers generated a total of 1,500 (1,000 train, 200 val, 300 test) images of various quality by introducing noise and streak artifacts into routine-dose abdominal CT images. Resulting images were rated by radiologists on a five-point Likert scale and their mean score was used as the ground truth.
The five-point Likert scale was defined as follows (see Table 1 in the paper1):
Numeric score | Verbal descriptive scale | Diagnostic quality criteria |
---|---|---|
0 | Bad | Desired features are not shown |
1 | Poor | Diagnostic interpretation is impossible |
2 | Fair | Images are suitable for limited clinical interpretation |
3 | Good | Images are suitable for diagnostic interpretation |
4 | Excellent | The anatomical structure is evident |
The model that we use here is a slight variation of the winning model (agaldran). The differences to the model used in the challenge are:
- We retrained including the additional 300 test images from the challenge
- Only using the muli-head swin transformer (no ResNeXt)
- No ensemble, only one model on a single training/validation split of the 1,500 images
Use with out-of-distribution (OOD) data
Be aware that any evaluation using this model will most likely be an OOD setting and predicted scores should be interpreted with caution. The model was
- trained only using abodminal CT images. However, the paper1 performs some experiments using a clinical head CT dataset, to evaluate the methods generalization capabilities.
- trained on four distinct noise levels only. These noise levels may not be representative of your data.
- not trained on denoised images at all. It has only seen routine-dose images and various distorted versions thereof. It remains unclear how well the model generalizes to denoised images.
-
Lee, Wonkyeong, Fabian Wagner, Adrian Galdran, Yongyi Shi, Wenjun Xia, Ge Wang, Xuanqin Mou, et al. 2025. “Low-Dose Computed Tomography Perceptual Image Quality Assessment.” Medical Image Analysis 99 (January):103343. https://doi.org/10.1016/j.media.2024.103343. ↩↩↩
Parameters:
-
device
(device
, default:None
) –Device to run LDCTIQA model on
__call__(x, preprocess=True)
Predict the IQA score for a given image
Parameters:
-
x
(Union[Tensor, ndarray]
) –if
preprocess
isTrue
, expects numpy float array in HU + 1024 (i.e., air should have a value of ~24) of shape[1,512,512]
. Otherwise, expects preprocessed torch tensor of shape[B,3,512,512]
-
preprocess
(bool
, default:True
) –Whether inputs should be preprocessed (i.e., windowed and normalized)
Returns:
-
Tensor
–Predicted score on a five-point Likert scale
[0,4]
in0.2
increments
Examples:
Evaluate IQA on a single DICOM slice
preprocess(x)
Preprocess a given CT image
The function takes a numpy float array in HU + 1024, applies windowing with (C,W) = (300, 1400) HU (as was done for the training data) and normalizes the image to the ImageNet mean and standard deviation.
Parameters:
-
x
(ndarray
) –A
np.ndarray
of shape[512,512]
or[1,512,512]
representing a CT image in HU + 1024
Raises:
-
ValueError
–If input is not a numpy array
-
ValueError
–If image shape is not
[512,512]
or[1,512,512]
Returns:
-
Tensor
–Preprocessed image as torch.Tensor of shape
[1,3,512,512]
evaluate_dicom(dicom_path, savedir=None, device=None, disable_progress=False)
Evaluate LDCTIQA on a single DICOM file or a series of DICOM files in a folder
Parameters:
-
dicom_path
(str
) –Path to a single DICOM file or a folder containig one or more DICOM files
-
savedir
(str
, default:None
) –Foldername where to store evaluation results. If not provided, results are not saved, only returned
-
device
(Optional[device]
, default:None
) –torch.device, optional
-
disable_progress
(bool
, default:False
) –Disable progress bar, by default False
Returns:
-
list
–List of IQA scores for each DICOM file
Raises:
-
ValueError
–If provided path is neither a DICOM file nor a folder containing at least one DICOM file
-
ValueError
–If image shape is not
512 x 512
Examples:
Evaluate a folder of DICOM files and save the results to a file scores.json
in the provided savedir
:
from ldctbench.evaluate import evaluate_dicom
scores = evaluate_dicom(dicom_path="path/to/dicom/series", savedir="path/to/save")
from ldctbench.evaluate import evaluate_dicom
scores = evaluate_dicom(dicom_path="path/to/dicom/series")
The function is also documented in this example.