|
a |
|
b/AutoSegmentationGUI.py |
|
|
1 |
import tkinter as tk |
|
|
2 |
from tkinter import messagebox |
|
|
3 |
from tkinter import ttk |
|
|
4 |
import os |
|
|
5 |
import sys |
|
|
6 |
|
|
|
7 |
sys.path.append(os.path.join(os.getcwd(), 'Preprocessing Medical Data Pipeline')) |
|
|
8 |
import main |
|
|
9 |
|
|
|
10 |
def create_subtitle(text): |
|
|
11 |
subtitle_label = tk.Label(root, text=text, font=("Helvetica", 12, "bold"), pady=5) |
|
|
12 |
subtitle_label.pack() |
|
|
13 |
|
|
|
14 |
|
|
|
15 |
def run_script_preprocessing(): |
|
|
16 |
ScanDirectory = entry_scan_directory.get("1.0", "end-1c") |
|
|
17 |
# runTask = parameter0_combobox.get() |
|
|
18 |
scan_folder_name = entry_parameter5.get("1.0", "end-1c") |
|
|
19 |
# mask_file_name = entry_parameter6.get("1.0", "end-1c") |
|
|
20 |
resizing = parameter2_combobox.get() |
|
|
21 |
|
|
|
22 |
main.Preprocessing(ScanDirectory, scan_folder_name, resizing) |
|
|
23 |
|
|
|
24 |
# def run_script_data_aug(): |
|
|
25 |
# aug_fname = entry_parameter14.get("1.0", "end-1c") |
|
|
26 |
# num_augs = entry_parameter4.get() |
|
|
27 |
# ScanDirectory = entry_scan_directory.get("1.0", "end-1c") |
|
|
28 |
|
|
|
29 |
# main.DataAug(ScanDirectory, aug_fname, num_augs) |
|
|
30 |
|
|
|
31 |
def run_script_prep_test_scan(): |
|
|
32 |
# runTask = parameter9_combobox.get() |
|
|
33 |
cutoffSlice = entry_parameter8.get() |
|
|
34 |
ScanDirectory = entry_scan_directory.get("1.0", "end-1c") |
|
|
35 |
folders = entry_parameter7.get("1.0", "end-1c") |
|
|
36 |
|
|
|
37 |
main.preprocessTestScansMain(cutoffSlice, ScanDirectory, folders) |
|
|
38 |
|
|
|
39 |
def run_script_visualise(): |
|
|
40 |
# runTask = parameter9_combobox.get() |
|
|
41 |
cutoffSlice = entry_parameter12.get() |
|
|
42 |
mask_file_name = entry_parameter13.get("1.0", "end-1c") |
|
|
43 |
ScanDirectory = entry_scan_directory.get("1.0", "end-1c") |
|
|
44 |
main.VisualiseSlice(ScanDirectory, mask_file_name, cutoffSlice) |
|
|
45 |
|
|
|
46 |
def run_script_model(): |
|
|
47 |
# runTask = parameter9_combobox.get() |
|
|
48 |
subjectfname = entry_parameter21.get("1.0", "end-1c") |
|
|
49 |
ScanDirectory = entry_scan_directory.get("1.0", "end-1c") |
|
|
50 |
main.AutoSegModel(ScanDirectory, subjectfname) |
|
|
51 |
|
|
|
52 |
|
|
|
53 |
# Create the main window |
|
|
54 |
root = tk.Tk() |
|
|
55 |
root.title("Lower Limb Musculoskeletal Automatic Segmentation Tool") |
|
|
56 |
|
|
|
57 |
|
|
|
58 |
label_scan_directory = tk.Label(root, text="Base Directory (Example: D:/MRI - Tairawhiti):", font=("Helvetica", 12, "bold")) # Changed label text |
|
|
59 |
label_scan_directory.pack() |
|
|
60 |
entry_scan_directory = tk.Text(root, height=1, width=100) |
|
|
61 |
entry_scan_directory.pack() |
|
|
62 |
# entry_scan_directory = tk.Entry(root) # Changed variable name |
|
|
63 |
# entry_scan_directory.pack() |
|
|
64 |
|
|
|
65 |
create_subtitle('-'*160) |
|
|
66 |
create_subtitle("Preprocessing Training Data (DICOM MRI Scans + NIFITI Binary Segmentation Masks)") |
|
|
67 |
create_subtitle('-'*160) |
|
|
68 |
|
|
|
69 |
# Create input fields |
|
|
70 |
# label_parameter0 = tk.Label(root, text="Run Preprocessing Raw DICOM MRI Scans & Raw NIFITI Segmentation Masks Task:") |
|
|
71 |
# label_parameter0.pack() |
|
|
72 |
# parameter0_values = ["True", "False"] |
|
|
73 |
# parameter0_combobox = ttk.Combobox(root, values=parameter0_values) |
|
|
74 |
# parameter0_combobox.pack() |
|
|
75 |
|
|
|
76 |
|
|
|
77 |
label_parameter5 = tk.Label(root, text="Scan Folder Name (Example: 6_AutoBindWATER_650_9B):") |
|
|
78 |
label_parameter5.pack() |
|
|
79 |
entry_parameter5 = tk.Text(root, height=1, width=40) |
|
|
80 |
entry_parameter5.pack() |
|
|
81 |
|
|
|
82 |
# label_parameter6 = tk.Label(root, text="Mask File Name (File Type: _.nii) (Example: 6_RR_fibula_9B) (Note: if Multi-Class, set to 'multi'!):") |
|
|
83 |
# label_parameter6.pack() |
|
|
84 |
# entry_parameter6 = tk.Text(root, height=1, width=40) |
|
|
85 |
# entry_parameter6.pack() |
|
|
86 |
|
|
|
87 |
label_parameter2 = tk.Label(root, text="Select Image Data Size: ") |
|
|
88 |
label_parameter2.pack() |
|
|
89 |
parameter2_values = ["512x512", "256x256"] |
|
|
90 |
parameter2_combobox = ttk.Combobox(root, values=parameter2_values) |
|
|
91 |
parameter2_combobox.pack() |
|
|
92 |
|
|
|
93 |
# label_parameter3 = tk.Label(root, text="Apply Image Preprocessing Techniques:") |
|
|
94 |
# label_parameter3.pack() |
|
|
95 |
# parameter3_values = ["True", "False"] |
|
|
96 |
# parameter3_combobox = ttk.Combobox(root, values=parameter3_values) |
|
|
97 |
# parameter3_combobox.pack() |
|
|
98 |
|
|
|
99 |
# label_parameter4 = tk.Label(root, text="Cropping Dimensions (If Apply_Image_Preprocessing_Techniques = True) (Format: [top,bottom,left,right]):") |
|
|
100 |
# label_parameter4.pack() |
|
|
101 |
# entry_parameter4 = tk.Entry(root) |
|
|
102 |
# entry_parameter4.pack() |
|
|
103 |
|
|
|
104 |
# Create run button |
|
|
105 |
create_subtitle('-'*80) |
|
|
106 |
run_button = tk.Button(root, text="Run Preprocessing Layer (Scan Stack & Segmentation Masks)", command=run_script_preprocessing) |
|
|
107 |
run_button.pack() |
|
|
108 |
|
|
|
109 |
create_subtitle('-'*160) |
|
|
110 |
create_subtitle("Preprocessing Inference/Test Data (Raw DICOM MRI Scans)") |
|
|
111 |
create_subtitle('-'*160) |
|
|
112 |
|
|
|
113 |
# label_parameter9 = tk.Label(root, text="Run Preprocessing Patient Scans For Automatic Segmentation Task:") |
|
|
114 |
# label_parameter9.pack() |
|
|
115 |
# parameter9_values = ["True", "False"] |
|
|
116 |
# parameter9_combobox = ttk.Combobox(root, values=parameter3_values) |
|
|
117 |
# parameter9_combobox.pack() |
|
|
118 |
|
|
|
119 |
|
|
|
120 |
label_parameter7 = tk.Label(root, text="Scan Folder Name (Example: 6_AutoBindWATER_650_9B):") |
|
|
121 |
label_parameter7.pack() |
|
|
122 |
entry_parameter7 = tk.Text(root, height=1, width=40) |
|
|
123 |
entry_parameter7.pack() |
|
|
124 |
|
|
|
125 |
|
|
|
126 |
label_parameter8 = tk.Label(root, text="Approximate Slice Index of Pelvis (Lowest Slice Index of Any Region of Interest Being Segmented):") |
|
|
127 |
label_parameter8.pack() |
|
|
128 |
entry_parameter8 = tk.Entry(root) |
|
|
129 |
entry_parameter8.pack() |
|
|
130 |
|
|
|
131 |
create_subtitle('-'*80) |
|
|
132 |
run_button = tk.Button(root, text="Generate Preprocessed Inference/Prediction (Scan Stack)", command=run_script_prep_test_scan) |
|
|
133 |
run_button.pack() |
|
|
134 |
|
|
|
135 |
|
|
|
136 |
create_subtitle('-'*160) |
|
|
137 |
create_subtitle("Run Automatic Segmentation Model (Pre-trained resnet34 U-Net)") |
|
|
138 |
create_subtitle('-'*160) |
|
|
139 |
|
|
|
140 |
# label_parameter9 = tk.Label(root, text="Run Preprocessing Patient Scans For Automatic Segmentation Task:") |
|
|
141 |
# label_parameter9.pack() |
|
|
142 |
# parameter9_values = ["True", "False"] |
|
|
143 |
# parameter9_combobox = ttk.Combobox(root, values=parameter3_values) |
|
|
144 |
# parameter9_combobox.pack() |
|
|
145 |
|
|
|
146 |
|
|
|
147 |
label_parameter21 = tk.Label(root, text="Subject Scan File Name (Example: msk_006):") |
|
|
148 |
label_parameter21.pack() |
|
|
149 |
entry_parameter21 = tk.Text(root, height=1, width=40) |
|
|
150 |
entry_parameter21.pack() |
|
|
151 |
|
|
|
152 |
create_subtitle('-'*80) |
|
|
153 |
run_button = tk.Button(root, text="Generate Segmentation Output", command=run_script_model) |
|
|
154 |
run_button.pack() |
|
|
155 |
|
|
|
156 |
# create_subtitle('-'*160) |
|
|
157 |
# create_subtitle("Data Augmentation") |
|
|
158 |
# create_subtitle('-'*160) |
|
|
159 |
|
|
|
160 |
|
|
|
161 |
# label_parameter14 = tk.Label(root, text="Preprocessed Data File Name (Example: msk_006):") |
|
|
162 |
# label_parameter14.pack() |
|
|
163 |
# entry_parameter14 = tk.Text(root, height=1, width=40) |
|
|
164 |
# entry_parameter14.pack() |
|
|
165 |
|
|
|
166 |
# label_parameter4 = tk.Label(root, text="Number of Augmentations Per Image:") |
|
|
167 |
# label_parameter4.pack() |
|
|
168 |
# entry_parameter4 = tk.Entry(root) |
|
|
169 |
# entry_parameter4.pack() |
|
|
170 |
|
|
|
171 |
|
|
|
172 |
# create_subtitle('-'*80) |
|
|
173 |
# run_button = tk.Button(root, text="Augment Training Data", command=run_script_data_aug) |
|
|
174 |
# run_button.pack() |
|
|
175 |
|
|
|
176 |
|
|
|
177 |
|
|
|
178 |
create_subtitle('-'*160) |
|
|
179 |
create_subtitle("Visualisations of 2D Scans & Masks") |
|
|
180 |
create_subtitle('-'*160) |
|
|
181 |
|
|
|
182 |
label_parameter12 = tk.Label(root, text="Slice Number:") |
|
|
183 |
label_parameter12.pack() |
|
|
184 |
entry_parameter12 = tk.Entry(root) |
|
|
185 |
entry_parameter12.pack() |
|
|
186 |
|
|
|
187 |
label_parameter13 = tk.Label(root, text="Mask File Name (Example: 4_R_tibia_5A, Example(Multi): msk_006) (Requires the preprocessed data!):") |
|
|
188 |
label_parameter13.pack() |
|
|
189 |
entry_parameter13 = tk.Text(root, height=1, width=40) |
|
|
190 |
entry_parameter13.pack() |
|
|
191 |
|
|
|
192 |
create_subtitle('-'*80) |
|
|
193 |
run_button = tk.Button(root, text="Generate Data Visualisations", command=run_script_visualise) |
|
|
194 |
run_button.pack() |
|
|
195 |
create_subtitle('-'*160) |
|
|
196 |
|
|
|
197 |
# Start the main loop |
|
|
198 |
root.mainloop() |