Welcome to AortaGeomRecon’s design document!¶
This is the design document for the AortaGeomRecon module, a 3D Slicer extension to perform Aorta segmentation and Aorta geometry reconstruction.
You can find the source code, the installation guide, and the user manual in the project’s repository.
Overview¶
Automatic aorta segmentation in thoracic computed tomography (CT) scans is important for aortic calcification quantification and to guide the segmentation of other central vessels. The work to manually segment regions of interest can be time-consuming and repetitive, and there are some automatic aorta segmentation algorithms posted. This project implemented a semi-automatic algorithm that can extract the 3-dimensional segmentation of the aorta.
The steps before applying the main algorithm¶
The algorithm works best with the chest volume cropped to a rectangular prism that contains the aorta and parts of the other organs such as the backbone, blood vessels, and the heart. This can be done with 3D Slicer and its submodule Volume rendering. A detailed guide can be found on the volume rendering and cropping section of the user instructions.
After cropping the volume, which only contains the region of interest, the algorithm needs a set of variables inputs from the user. These variables are:
The centre coordinates of Descending Aorta and Ascending Aorta located on the same slice (a voxel).
The Stop limit.
An integer for kernel size.
- The ThresholdSegmentationLevelSetsImageFilter parameters, including:
The rms_error (float)
The Maximum iteration (int)
The Curvature scaling (float)
The Propagation scaling (float)
The main ideas of the algorithm¶
At the beginning of the algorithm, the user inputs two integer coordinates indicating the position of the descending aorta and ascending aorta centre on a single slice. This algorithm segments each slice with SITK::ThresholdSegmentationLevelSetImageFilter. The principles of this image filter can be explained with two terms: Level sets segmentation method, and a threshold range that defines the intensity of the acceptable pixel. The following steps elaborate on how the algorithm calculated the necessary values to perform segmentation.
For each slice starting from the user’s selected slice, going in the inferior first, then superior direction:
1. [Create a label map] The algorithm uses SITK::BinaryDilateImageFilter to perform binary dilation to generate a circle-like shape around the centre coordinates (user input’s or calculated by the algorithm). Each pixel within this shape will be labeled as a white pixel (value of 1), and the rest of the pixels are labeled as black pixels (value of 0). The generated result is the label map image, and we will use it in the next few steps. The size of the circle-like shape is determined by the kernel size.
The green circles shows the binary dilation of the two centroids.
2. [Create a distance map] With SITK::SignedMaurerDistanceMapImageFilter, the algorithm creates another image, the Euclidean distance transform of the label image. This is used as a contour line that helps build the gradient mentioned in Level sets.
3. [Calculate a threshold range] By using SITK::LabelStatisticsImageFilter, the algorithm gets the mean and the standard deviation of the intensity values of the pixels that were labeled as the white pixel in the previous step. The algorithm uses threshold coefficient to calculate the lower and upper threshold to be used in the next step.
4. [Segment a single slice] With SITK::ThresholdSegmentationLevelSetImageFilter, the seed image calculated in step 2, and the lower and upper threshold value calculated in step 3, the algorithm performs segmentation and generated a segmented slice.
The green pixels are labeled as part of the aorta.
5. [Calculate new centroids] By comparing each pixel segmented as aorta to the previous descending centroid and the previous ascending centroid, the algorithm use the positions of the points closer to the previous descending centroid to calculate new descending aorta centroid, and vice-versa for the ascending aorta centroid. However, at certain point during the segmentation in inferior direciton, the slice might reaches the end of the ascending aorta, where the voxels belong to the part of the heart. The algorithm will stop using ascending aorta centroid and only computes descending aorta centroid for the slices afterward.
6. [Verify segmentation result] There are two main stop conditions for verifying segmentation result, one condition for the segmentation in inferior direction and the other one for the segmentation in superior direction. Stop limit is an user defined parameter to control the algorithm.
Note
For the segmentaion in inferior direction, the segmented slice is determined as not acceptable if part of the heart is segmented as the ascending aorta. Thus, the stop condition for the segmentation in inferior direction is to verify if the new ascending aorta centroid position is located far from the previous ascending aorta centroid. Stop limit is used to define the distance limit.
For the segmentation in superior direction, the algorithm mainly works on the aortic curvature, where the area of the aorta becomes smaller as the algorithm executes on further slices. The standard deviation of the label image and of the segmented slice will be used to compare. The algorithm stop processing next slice if the difference between these two standard deviation reaches the Stop limit.
The simplified version of the algorithm¶
Note
You can find the definitions of each function within the module below