CT_Segmentation / labels.py
TDHarshithReddy's picture
Initial commit: MONAI WholeBody CT Segmentation Space
3e09c97
# 104 Anatomical Structure Labels for TotalSegmentator / MONAI wholeBody_ct_segmentation
# Based on TotalSegmentator v1 class definitions
LABEL_NAMES = {
0: "background",
1: "spleen",
2: "kidney_right",
3: "kidney_left",
4: "gallbladder",
5: "liver",
6: "stomach",
7: "aorta",
8: "inferior_vena_cava",
9: "portal_vein_and_splenic_vein",
10: "pancreas",
11: "adrenal_gland_right",
12: "adrenal_gland_left",
13: "lung_upper_lobe_left",
14: "lung_lower_lobe_left",
15: "lung_upper_lobe_right",
16: "lung_middle_lobe_right",
17: "lung_lower_lobe_right",
18: "vertebrae_L5",
19: "vertebrae_L4",
20: "vertebrae_L3",
21: "vertebrae_L2",
22: "vertebrae_L1",
23: "vertebrae_T12",
24: "vertebrae_T11",
25: "vertebrae_T10",
26: "vertebrae_T9",
27: "vertebrae_T8",
28: "vertebrae_T7",
29: "vertebrae_T6",
30: "vertebrae_T5",
31: "vertebrae_T4",
32: "vertebrae_T3",
33: "vertebrae_T2",
34: "vertebrae_T1",
35: "vertebrae_C7",
36: "vertebrae_C6",
37: "vertebrae_C5",
38: "vertebrae_C4",
39: "vertebrae_C3",
40: "vertebrae_C2",
41: "vertebrae_C1",
42: "esophagus",
43: "trachea",
44: "heart_myocardium",
45: "heart_atrium_left",
46: "heart_ventricle_left",
47: "heart_atrium_right",
48: "heart_ventricle_right",
49: "pulmonary_artery",
50: "brain",
51: "iliac_artery_left",
52: "iliac_artery_right",
53: "iliac_vena_left",
54: "iliac_vena_right",
55: "small_bowel",
56: "duodenum",
57: "colon",
58: "rib_left_1",
59: "rib_left_2",
60: "rib_left_3",
61: "rib_left_4",
62: "rib_left_5",
63: "rib_left_6",
64: "rib_left_7",
65: "rib_left_8",
66: "rib_left_9",
67: "rib_left_10",
68: "rib_left_11",
69: "rib_left_12",
70: "rib_right_1",
71: "rib_right_2",
72: "rib_right_3",
73: "rib_right_4",
74: "rib_right_5",
75: "rib_right_6",
76: "rib_right_7",
77: "rib_right_8",
78: "rib_right_9",
79: "rib_right_10",
80: "rib_right_11",
81: "rib_right_12",
82: "humerus_left",
83: "humerus_right",
84: "scapula_left",
85: "scapula_right",
86: "clavicula_left",
87: "clavicula_right",
88: "femur_left",
89: "femur_right",
90: "hip_left",
91: "hip_right",
92: "sacrum",
93: "face",
94: "gluteus_maximus_left",
95: "gluteus_maximus_right",
96: "gluteus_medius_left",
97: "gluteus_medius_right",
98: "gluteus_minimus_left",
99: "gluteus_minimus_right",
100: "autochthon_left",
101: "autochthon_right",
102: "iliopsoas_left",
103: "iliopsoas_right",
104: "urinary_bladder",
}
# Color map for visualization (RGB values)
# Using a custom colormap for better visualization
import numpy as np
def get_color_map():
"""Generate a color map for 105 classes (background + 104 structures)"""
np.random.seed(42) # For reproducibility
colors = np.zeros((105, 3), dtype=np.uint8)
# Background is black
colors[0] = [0, 0, 0]
# Assign distinct colors to different organ categories
# Organs (1-12): Warm colors
organ_colors = [
[255, 99, 71], # spleen - tomato
[255, 165, 0], # kidney_right - orange
[255, 140, 0], # kidney_left - dark orange
[50, 205, 50], # gallbladder - lime green
[139, 69, 19], # liver - saddle brown
[255, 192, 203], # stomach - pink
[220, 20, 60], # aorta - crimson
[0, 0, 139], # inferior_vena_cava - dark blue
[138, 43, 226], # portal_vein_and_splenic_vein - blue violet
[255, 215, 0], # pancreas - gold
[255, 255, 0], # adrenal_gland_right - yellow
[255, 255, 0], # adrenal_gland_left - yellow
]
colors[1:13] = organ_colors
# Lungs (13-17): Light blue shades
colors[13:18] = [[135, 206, 235], [100, 149, 237], [30, 144, 255], [0, 191, 255], [70, 130, 180]]
# Vertebrae (18-41): Gradient from red to purple
for i in range(18, 42):
colors[i] = [200 - (i-18)*5, 100, 150 + (i-18)*3]
# Other structures (42-57): Various colors
colors[42] = [255, 182, 193] # esophagus
colors[43] = [176, 224, 230] # trachea
colors[44:49] = [[220, 20, 60], [255, 105, 180], [255, 20, 147], [255, 182, 193], [199, 21, 133]] # heart
colors[49] = [148, 0, 211] # pulmonary_artery
colors[50] = [255, 218, 185] # brain
colors[51:55] = [[178, 34, 34], [178, 34, 34], [70, 130, 180], [70, 130, 180]] # iliac vessels
colors[55:58] = [[222, 184, 135], [210, 180, 140], [188, 143, 143]] # bowels
# Ribs (58-81): Bone color variations
for i in range(58, 82):
colors[i] = [255, 250, 205 + (i-58) % 50]
# Bones (82-92): Gray/white shades
for i in range(82, 93):
colors[i] = [220 + (i-82)*2, 220 + (i-82)*2, 220]
# Face and muscles (93-103): Skin and muscle tones
colors[93] = [255, 228, 196] # face
for i in range(94, 104):
colors[i] = [205, 92, 92 + (i-94)*5] # muscles - indian red variations
# Bladder
colors[104] = [255, 255, 0] # urinary_bladder - yellow
return colors
def get_label_name(label_id: int) -> str:
"""Get human-readable name for a label ID"""
return LABEL_NAMES.get(label_id, f"unknown_{label_id}").replace("_", " ").title()
def get_organ_categories():
"""Group organs by category for UI display"""
return {
"Major Organs": [1, 2, 3, 4, 5, 6, 10, 104],
"Cardiovascular": [7, 8, 9, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54],
"Respiratory": [13, 14, 15, 16, 17, 43],
"Digestive": [42, 55, 56, 57],
"Vertebrae": list(range(18, 42)),
"Ribs": list(range(58, 82)),
"Upper Body Bones": [82, 83, 84, 85, 86, 87],
"Lower Body Bones": [88, 89, 90, 91, 92],
"Muscles": list(range(94, 104)),
"Other": [11, 12, 50, 93],
}