Version: Pre-Release v1.0
Derived from the Hazen MRI QA framework project, this is a extension which is designed to work with the medium ACR phantom. Some other additions have also been made such as the GUI although the framework remains intact with the original hazen project.
- Add medium ACR phantom compatibility to the Hazen code base.
- Incorporate docker image of the Hazen code base with medium ACR compatibility.
- Build GUI for the medium ACR phantom implementation.
- Build a version of the GUI which does not require internet connection (to update Docker image).
- Make a release package
- Build unit tests.
- Write documentation.
- get baseline values from a series of scanners
- Windows (Mac and Linux coming soon)
- Download the latest release.
- Unzip the file and navigate to where it was downloaded.
- Double click and start ACR QA Analysis.exe.
- Select the location of the DICOM folder using the "Set DICOM Path" button.
- Select where the results will be outputted to usign the "Set Results Output Path" button.
- Select what sequence to analyse using the dropdown.
- Select whats tests you want to run from the checkboxes.
- Click "Start Analysis"
- On completion the results are displaeyd and you can view individual results by selecting the dropdown (below the "Start Analysis" button) following the "View Results" button.
Scan the ACR Phantom as laid our in the ACR Large and medium guidance document. It is possible to scan in other orientations than axial but the phantom must be rotated correctly (see below). It is also possible to use other coils than the head but this has not been fully tested.
It is expected to be a directory containing DICOM files, where each file coresponds to one slice, it is possible to have several sequeunces contained within the folder. Data should be collected as laid out in the ACR Large and medium guidance document. If it is desired to test sagittal and coronal axis, this is possible by rotating the phantom appropriately. It is important that the phantom or field of view is rotated such that circular component as at the top of the image and the resolution block is located at the bottom regardless if you are imaging axial, sagittal or coronal. See the Image below for an example.
This is computed by moving a 1cm^2 circular ROI over the phantom and computing the mean pixel value in each region. By considering the maximum and minimum values the percentage uniformity can be determeined.
On the ACR Phantom, the slice position can be determined by examining two bars located at the top of the phantom. The difference in the bars height coresponds to the error in slice position. The code produces a line profile over each bar and determines the offset between them. Hence it can compute the slice position error.
On slice 1 there is a series of dot matrices designed to measure resoloution performance. For each grid, this module automatically attempts to determine what row and coloumn in each grid yeilds the highest contrast response. This is repeated for each grid yeilding a contrast response value as a function of grid size.
On slice 1 an edge is found and a line profile extracted over it. This profile is differentated and the fourier transform taken, computing the MTF. For this to be effective the phantom is expected to be rotated by at least 3 degrees.
This module displays to the user each resolution grid. The user then has to highlight the peaks and troughs on each grid image. This is conducted by left clicking 4 times to identify the 4 horizontal peaks (blue crosses) and then 3 times to identify the 3 troughs (blue circles). By holding ctrl then left clicking the user can highlight the 4 vertical peaks and 3 vertical troughs in the same fashion as the horizontal component, these are labeled as red crosses and circles. By Pressing Alt, the troughs are automatically assigned based on the middle location between the peaks. The windowing can also be adjusted by right clicking and dragging. By shift-clicking or ctrl-shift-clicking points already placed on the image can be removed. After all 4 resolution grids have been evaluated the contrast response is computed.
The ACR phantom contains two ramps which depending on the slice thickness will appear longer or shorter. The code draws a line over each bar and computes the full width half maximum of the profile. Based on the width of the profile, the slice thickness can be deteremined.
Signal to noise ratio is computed by firstly taken the mean pixel value in 5 regions of interest to produce 5 signal values. The image is convoluted with a 9x9 boxcar kernal to produce a smoothed image. The convoluted image is subtracted from the original signal image to produce a noise image. The standard deviation is taken in each region of interest in the noise image. This allows a signal to noise ratio be computed for each region of interest. Finally the mean over all region of interests is computed giving the final result.
The horizontal and vertical size of the phantom is measured on slice 1. The diagonal, horizontal and vertical size of the phantom is measured on slice 5. These values are then compared with the expected size of the phantom,
On slice 5, 9 pegs are used to determine geometric accuracy. The distances between each peg is measured and compared against the expected distance between the pegs.
A region of interest is placed within the phantom and 4 further are placed above, below, left and right of the phantom. By considering the fraction between the signal in the peripheral regions with that of the centre, the percentage value of ghosting can be deteremined.
The tolerance table is used to quickly identify if a test is within tolerance. The tolerance table is in the ToleranceTable/ToleranceTable.xml file. In order to add a test to the tolerance table, you must add an XML element called module with the name field set to be the same as the module in question. For each module you can then add test tolerances, a child element is then added named Test. In each element the name field must be set to be equal to the specific test result (for example "1.1mm holes Horizontal"). You can then set a Min, Max or Equals value in this element. If the value is greater than min, lower than max or equal to the tolerance then it is considered within tolerance. If a module or test is not found in the tolerance table, then the script returns "No Tolerance Set". If no name is set on the test element, then the same tolerance is used for every test in that module.
To confirm the scripts, match expected results a testing protocol was developed. The goal of this was test each module and confirm it meets manual measurements is within a given tolerance. This testing protocol can be found here and the results found here. An NHS Scotland account is required to access these documents.
Please make any bug reports or feature requests by logging an issue here or send an email to the developers below.
John Tracey NHS Highland ([email protected]) Hamish Richardson NHS Lothian ([email protected])