|
145 | 145 | registrar.set_use_pca_registration( |
146 | 146 | True, pca_model=pca_model, pca_number_of_modes=pca_n_modes |
147 | 147 | ) |
148 | | - registrar.set_use_mask_to_image_registration( |
| 148 | + registrar.set_use_labelmap_to_image_registration( |
149 | 149 | True, |
150 | 150 | template_labelmap=template_labelmap, |
151 | 151 | template_labelmap_organ_mesh_ids=[1], |
152 | 152 | template_labelmap_organ_extra_ids=[2, 3, 4, 5], |
153 | 153 | template_labelmap_background_ids=[6], |
154 | 154 | ) |
155 | 155 |
|
156 | | - registrar.set_mask_dilation_mm(0) |
157 | | - registrar.set_roi_dilation_mm(25) |
| 156 | + registrar.set_labelmap_dilation_mm(0) |
| 157 | + registrar.set_mask_dilation_mm(25) |
158 | 158 |
|
159 | 159 | patient_image = registrar.patient_image |
160 | 160 | itk.imwrite( |
|
184 | 184 | itk.imwrite(pca_labelmap, str(output_dir / "pca_labelmap.mha"), compression=True) |
185 | 185 |
|
186 | 186 | # %% [markdown] |
187 | | - # ## Mask Alignment |
| 187 | + # ## Labelmap Alignment |
188 | 188 |
|
189 | 189 | # %% |
190 | 190 | # Perform deformable registration |
191 | | - print("Starting deformable mask-to-mask registration...") |
| 191 | + print("Starting deformable labelmap-to-labelmap registration...") |
192 | 192 |
|
193 | | - m2m_results = registrar.register_mask_to_mask() |
194 | | - m2m_inverse_transform = m2m_results["inverse_transform"] |
195 | | - m2m_forward_transform = m2m_results["forward_transform"] |
196 | | - m2m_model_surface = m2m_results["registered_template_model_surface"] |
197 | | - m2m_labelmap = m2m_results["registered_template_labelmap"] |
| 193 | + l2l_results = registrar.register_labelmap_to_labelmap() |
| 194 | + l2l_inverse_transform = l2l_results["inverse_transform"] |
| 195 | + l2l_forward_transform = l2l_results["forward_transform"] |
| 196 | + l2l_model_surface = l2l_results["registered_template_model_surface"] |
| 197 | + l2l_labelmap = l2l_results["registered_template_labelmap"] |
198 | 198 |
|
199 | 199 | print("Registration complete!") |
200 | 200 |
|
201 | | - m2m_model_surface.save(str(output_dir / "m2m_model_surface.vtp")) |
202 | | - itk.imwrite(m2m_labelmap, str(output_dir / "m2m_labelmap.mha"), compression=True) |
| 201 | + l2l_model_surface.save(str(output_dir / "l2l_model_surface.vtp")) |
| 202 | + itk.imwrite(l2l_labelmap, str(output_dir / "l2l_labelmap.mha"), compression=True) |
203 | 203 |
|
204 | 204 | # %% |
205 | 205 | print("Starting deformable registration...") |
206 | 206 | print("This may take several minutes depending on GPU availability.") |
207 | 207 |
|
208 | | - m2i_results = registrar.register_labelmap_to_image() |
209 | | - m2i_inverse_transform = m2i_results["inverse_transform"] |
210 | | - m2i_forward_transform = m2i_results["forward_transform"] |
211 | | - m2i_surface = m2i_results["registered_template_model_surface"] |
212 | | - m2i_labelmap = m2i_results["registered_template_labelmap"] |
| 208 | + l2i_results = registrar.register_labelmap_to_image() |
| 209 | + l2i_inverse_transform = l2i_results["inverse_transform"] |
| 210 | + l2i_forward_transform = l2i_results["forward_transform"] |
| 211 | + l2i_surface = l2i_results["registered_template_model_surface"] |
| 212 | + l2i_labelmap = l2i_results["registered_template_labelmap"] |
213 | 213 | print("\nRegistration complete!") |
214 | 214 |
|
215 | 215 | # Save registration results to output folder |
216 | | - m2i_surface.save(str(output_dir / "m2i_model_surface.vtp")) |
217 | | - itk.imwrite(m2i_labelmap, str(output_dir / "m2i_labelmap.mha"), compression=True) |
| 216 | + l2i_surface.save(str(output_dir / "l2i_model_surface.vtp")) |
| 217 | + itk.imwrite(l2i_labelmap, str(output_dir / "l2i_labelmap.mha"), compression=True) |
218 | 218 |
|
219 | 219 | # %% |
220 | 220 | tmp_p = itk.Point[itk.D, 3]() |
|
241 | 241 | print(f"PCA transform time: {time.time() - start_time} seconds", flush=True) |
242 | 242 |
|
243 | 243 | start_time = time.time() |
244 | | - tmp_p = registrar.m2m_inverse_transform.TransformPoint(tmp_p) |
245 | | - print(f"M2M inverse transform time: {time.time() - start_time} seconds", flush=True) |
| 244 | + tmp_p = registrar.l2l_inverse_transform.TransformPoint(tmp_p) |
| 245 | + print(f"L2L inverse transform time: {time.time() - start_time} seconds", flush=True) |
246 | 246 |
|
247 | 247 | start_time = time.time() |
248 | | - tmp_p = registrar.m2i_inverse_transform.TransformPoint(tmp_p) |
249 | | - print(f"M2I inverse transform time: {time.time() - start_time} seconds", flush=True) |
| 248 | + tmp_p = registrar.l2i_inverse_transform.TransformPoint(tmp_p) |
| 249 | + print(f"L2I inverse transform time: {time.time() - start_time} seconds", flush=True) |
250 | 250 |
|
251 | 251 | # %% |
252 | 252 | # Verify registration using the transform member function |
253 | | - surface_transformed = registrar.m2i_template_model_surface |
| 253 | + surface_transformed = registrar.l2i_template_model_surface |
254 | 254 | surface_transformed.save(str(output_dir / "registered_template_surface.vtp")) |
255 | 255 |
|
256 | 256 | model_transformed = registrar.transform_model() |
|
265 | 265 | registered_surface = registrar.registered_template_model_surface |
266 | 266 | icp_surface = registrar.icp_template_model_surface |
267 | 267 | pca_surface = registrar.pca_template_model_surface |
268 | | - m2m_surface = registrar.m2m_template_model_surface |
269 | | - m2i_surface = registrar.m2i_template_model_surface |
| 268 | + l2l_surface = registrar.l2l_template_model_surface |
| 269 | + l2i_surface = registrar.l2i_template_model_surface |
270 | 270 |
|
271 | 271 | # Create side-by-side comparison |
272 | 272 | plotter = pv.Plotter(shape=(1, 2)) |
|
280 | 280 | # After deformable registration |
281 | 281 | plotter.subplot(0, 1) |
282 | 282 | plotter.add_mesh(patient_surface, color="red", opacity=0.5, label="Patient") |
283 | | - plotter.add_mesh(m2i_surface, color="blue", opacity=1.0, label="Registered") |
| 283 | + plotter.add_mesh(l2i_surface, color="blue", opacity=1.0, label="Registered") |
284 | 284 | plotter.add_title("Final Registration") |
285 | 285 |
|
286 | 286 | plotter.link_views() |
|
0 commit comments