This implementation is based on Shimizu, A., Ohno, R., Ikegami, T. et al. (2007) Segmentation of multiple organs in non-contrast 3D abdominal CT images, Int J CARS 2: 135. https://doi.org/10.1007/s11548-007-0135-z.
Note this is not official implementation.
Please use at your own responsibility.
Nuget package
-
Eigen
-
Boost
-
ITK
Another library (already contained)
-
Windows 10 pro
-
Visual Studio 2015
-
Release x64
Data I used is as follow:
Label correspondense
Organs | Label number |
---|---|
others | 0 |
liver | 1 |
spleen | 2 |
kidneyL | 3 |
kidneyR | 4 |
heart | 5 |
gallbladder | 6 |
pancreas | 7 |
aorta | 8 |
IVC | 9 |
portal | 10 |
stomachWall | 11 |
oesophagus | 12 |
Note: In this case, i didnt use heart label since it is not included in mask image region.
Example:
Original | Label | Mask |
---|---|---|
First of all, please build all project.
And then, please put your data into data/preprocessed
folder.
data
└─preprocessed
├─abdominal_cavity_mask <--- mask image e.g. region of interest image
├─label <--- label image
└─org <--- original image
I show flow chart as bellow:
Generate atlas.
This program outputs into results/generate_atlas
.
bat\generate_atlas.bat
Compute features each original image.
In this case, we calculate median image.
bat\compute_features.bat
Compute initial value for em algorithm using training data.
bat\calc_init_val.bat
Apply em algorithm to test data
bat\apply_em_algorithm_using_atlas.bat
Apply maximum a posteriori to test data
bat\apply_maximum_a_posteriori.bat
I show example of result.
Predict | Ground truth | Original |
---|---|---|
I evaluate my result in terms of Jaccard Index.
organs | JI |
---|---|
liver | 0.862857 |
spleen | 0.616608 |
kidneyL | 0.666968 |
kidneyR | 0.548733 |
gallbladder | 0.187473 |
pancreas | 0.35192 |
aorta | 0.606638 |
IVC | 0.566764 |
portal | 0.0789795 |
stomachWall | 0.13219 |
oesophagus | 0.0801887 |
other | 0.728133 |