melage 0.0.65__py3-none-any.whl → 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. assets/copyright.png +0 -0
  2. assets/resource/color/FreeSurferColorLUT.txt +2006 -0
  3. assets/resource/color/LUT_30.txt +31 -0
  4. assets/resource/color/SynthSeg.txt +34 -0
  5. assets/resource/color/lut_prostate.txt +20 -0
  6. assets/resource/horizontalview.png +0 -0
  7. assets/resource/main.ico +0 -0
  8. assets/resource/theme/create_ticks.py +85 -0
  9. assets/resource/theme/rc/checkbox_checked.png +0 -0
  10. assets/resource/theme/rc/checkbox_checked@2x.png +0 -0
  11. assets/resource/theme/rc/checkbox_checked_disabled.png +0 -0
  12. assets/resource/theme/rc/checkbox_checked_disabled@2x.png +0 -0
  13. assets/resource/theme/rc/checkbox_checked_focus.png +0 -0
  14. assets/resource/theme/rc/checkbox_checked_focus@2x.png +0 -0
  15. assets/resource/theme/rc/checkbox_checked_pressed.png +0 -0
  16. assets/resource/theme/rc/checkbox_checked_pressed@2x.png +0 -0
  17. assets/resource/theme/rc/checkbox_indeterminate.png +0 -0
  18. assets/resource/theme/rc/checkbox_indeterminate@2x.png +0 -0
  19. assets/resource/theme/rc/checkbox_indeterminate_disabled.png +0 -0
  20. assets/resource/theme/rc/checkbox_indeterminate_disabled@2x.png +0 -0
  21. assets/resource/theme/rc/checkbox_indeterminate_focus.png +0 -0
  22. assets/resource/theme/rc/checkbox_indeterminate_focus@2x.png +0 -0
  23. assets/resource/theme/rc/checkbox_indeterminate_pressed.png +0 -0
  24. assets/resource/theme/rc/checkbox_indeterminate_pressed@2x.png +0 -0
  25. assets/resource/theme/rc/checkbox_unchecked.png +0 -0
  26. assets/resource/theme/rc/checkbox_unchecked@2x.png +0 -0
  27. assets/resource/theme/rc/checkbox_unchecked_disabled.png +0 -0
  28. assets/resource/theme/rc/checkbox_unchecked_disabled@2x.png +0 -0
  29. assets/resource/theme/rc/checkbox_unchecked_focus.png +0 -0
  30. assets/resource/theme/rc/checkbox_unchecked_focus@2x.png +0 -0
  31. assets/resource/theme/rc/checkbox_unchecked_pressed.png +0 -0
  32. assets/resource/theme/rc/checkbox_unchecked_pressed@2x.png +0 -0
  33. assets/resource/verticalview.png +0 -0
  34. assets/resource/zoom_in.png +0 -0
  35. assets/resource/zoom_neutral (copy).png +0 -0
  36. assets/resource/zoom_neutral.png +0 -0
  37. assets/resource/zoom_out.png +0 -0
  38. data/MNI/mni_icbm152_t1_tal_nlin_sym_09a.nii +0 -0
  39. data/MNI/mni_icbm152_t1_tal_nlin_sym_09a_masked.nii.gz +0 -0
  40. data/MNI/mni_icbm152_t1_tal_nlin_sym_09a_seg.nii.gz +0 -0
  41. docs/manual_images/3D_rightc.png +0 -0
  42. docs/manual_images/3D_rightc_goto.png +0 -0
  43. docs/manual_images/3D_rightc_paint.png +0 -0
  44. docs/manual_images/3D_rightc_paint_draw1.png +0 -0
  45. docs/manual_images/3D_rightc_paint_draw2.png +0 -0
  46. docs/manual_images/3D_rightc_paint_render.png +0 -0
  47. docs/manual_images/3D_rightc_paint_render2.png +0 -0
  48. docs/manual_images/3D_rightc_paint_render3.png +0 -0
  49. docs/manual_images/3D_rightc_paint_render4.png +0 -0
  50. docs/manual_images/3D_rightc_paint_render5.png +0 -0
  51. docs/manual_images/3D_rightc_paint_render6.png +0 -0
  52. docs/manual_images/3D_rightc_seg.png +0 -0
  53. docs/manual_images/exit_toolbar.png +0 -0
  54. docs/manual_images/load_image_file.png +0 -0
  55. docs/manual_images/load_image_file_openp.png +0 -0
  56. docs/manual_images/main_page.png +0 -0
  57. docs/manual_images/menu_file.png +0 -0
  58. docs/manual_images/menu_file_export.png +0 -0
  59. docs/manual_images/menu_file_import.png +0 -0
  60. docs/manual_images/menu_file_settings.png +0 -0
  61. docs/manual_images/menu_file_ss.png +0 -0
  62. docs/manual_images/open_save_load.png +0 -0
  63. docs/manual_images/panning_toolbar.png +0 -0
  64. docs/manual_images/segmentation_toolbar.png +0 -0
  65. docs/manual_images/tab_mri.png +0 -0
  66. docs/manual_images/tab_us.png +0 -0
  67. docs/manual_images/tabs.png +0 -0
  68. docs/manual_images/toolbar_tools.png +0 -0
  69. docs/manual_images/tools_basic.png +0 -0
  70. docs/manual_images/tools_bet.png +0 -0
  71. docs/manual_images/tools_cs.png +0 -0
  72. docs/manual_images/tools_deepbet.png +0 -0
  73. docs/manual_images/tools_imageinfo.png +0 -0
  74. docs/manual_images/tools_maskO.png +0 -0
  75. docs/manual_images/tools_masking.png +0 -0
  76. docs/manual_images/tools_n4b.png +0 -0
  77. docs/manual_images/tools_resize.png +0 -0
  78. docs/manual_images/tools_ruler.png +0 -0
  79. docs/manual_images/tools_seg.png +0 -0
  80. docs/manual_images/tools_threshold.png +0 -0
  81. docs/manual_images/tools_tools.png +0 -0
  82. docs/manual_images/widget_color.png +0 -0
  83. docs/manual_images/widget_color_add.png +0 -0
  84. docs/manual_images/widget_color_add2.png +0 -0
  85. docs/manual_images/widget_color_additional.png +0 -0
  86. docs/manual_images/widget_images.png +0 -0
  87. docs/manual_images/widget_images2.png +0 -0
  88. docs/manual_images/widget_images3.png +0 -0
  89. docs/manual_images/widget_marker.png +0 -0
  90. docs/manual_images/widget_mri.png +0 -0
  91. docs/manual_images/widget_mri2.png +0 -0
  92. docs/manual_images/widget_segintensity.png +0 -0
  93. docs/manual_images/widget_tab_mutualview.png +0 -0
  94. docs/manual_images/widget_tab_mutualview2.png +0 -0
  95. docs/manual_images/widget_table.png +0 -0
  96. docs/manual_images/widget_table2.png +0 -0
  97. docs/manual_images/widget_us.png +0 -0
  98. melage/__init__.py +1 -1
  99. melage/config/__init__.py +100 -0
  100. melage/core/Registration/registration.py +54 -0
  101. melage/{utils/readData.py → core/io.py} +12 -4
  102. melage/{widgets/melageAbout.py → dialogs/AboutDialog.py} +1 -1
  103. melage/dialogs/MaskOperationsDialog.py +146 -0
  104. melage/dialogs/MaskingDialog.py +139 -0
  105. melage/dialogs/RegistrationDialog.py +311 -0
  106. melage/{widgets/ImageThresholding.py → dialogs/ThresholdingDialog.py} +2 -2
  107. melage/dialogs/TransformationDialog.py +275 -0
  108. melage/dialogs/__init__.py +9 -0
  109. melage/dialogs/dynamic_gui.py +327 -0
  110. melage/{widgets/fileDialog_widget.py → dialogs/helpers/FileDialog.py} +226 -1
  111. melage/dialogs/helpers/__init__.py +5 -0
  112. melage/main.py +13 -13
  113. melage/{widgets/mainwindow_widget.py → mainwindow_widget.py} +1434 -1408
  114. melage/plugins/N4_bias/N4.py +115 -0
  115. melage/plugins/N4_bias/N4_schema.py +40 -0
  116. melage/plugins/N4_bias/main/utils.py +46 -0
  117. melage/plugins/__init__.py +2 -0
  118. melage/plugins/bet/bet.py +176 -0
  119. melage/plugins/bet/bet_schema.py +73 -0
  120. melage/{widgets/brain_extraction.py → plugins/bet/main/BET.py} +51 -316
  121. melage/plugins/change_coord/change_coord.py +197 -0
  122. melage/plugins/change_coord/change_coord_schema.py +31 -0
  123. melage/plugins/change_coord/main/utils.py +15 -0
  124. melage/{widgets/Segmentation → plugins/esfcm/main}/FCM.py +3 -5
  125. melage/plugins/esfcm/main/test.py +57 -0
  126. melage/{widgets/Segmentation → plugins/esfcm/main}/utils.py +20 -0
  127. melage/plugins/esfcm/tissue_segmentation.py +124 -0
  128. melage/plugins/esfcm/tissue_segmentation_schema.py +33 -0
  129. melage/plugins/masking_operation/mo.py +115 -0
  130. melage/plugins/masking_operation/mo_schema.py +33 -0
  131. melage/plugins/mga_net/MGA_Net.py +145 -0
  132. melage/plugins/mga_net/MGA_Net_schema.py +29 -0
  133. melage/plugins/mga_net/main/figures/Network.txt +1 -0
  134. melage/{widgets/DeepLModels/new_unet.py → plugins/mga_net/main/model/mga_net.py} +3 -3
  135. melage/plugins/mga_net/main/model/utils.py +258 -0
  136. melage/plugins/mga_net/main/test_mgaNet.py +134 -0
  137. melage/plugins/resize/resize.py +136 -0
  138. melage/plugins/resize/resize_schema.py +41 -0
  139. melage/plugins/ui_helpers.py +144 -0
  140. melage/plugins/warpseg/WarpSeg.py +195 -0
  141. melage/plugins/warpseg/WarpSeg_schema.py +41 -0
  142. melage/plugins/warpseg/__init__.py +2 -0
  143. melage/plugins/warpseg/warpseg_main/data_reader/DDSet.py +303 -0
  144. melage/plugins/warpseg/warpseg_main/data_reader/DDSetSeg.py +279 -0
  145. melage/plugins/warpseg/warpseg_main/data_reader/__init__.py +60 -0
  146. melage/plugins/warpseg/warpseg_main/data_reader/baseData.py +18 -0
  147. melage/plugins/warpseg/warpseg_main/data_reader/utils.py +267 -0
  148. melage/plugins/warpseg/warpseg_main/dist_utils.py +18 -0
  149. melage/plugins/warpseg/warpseg_main/requirements.txt +10 -0
  150. melage/plugins/warpseg/warpseg_main/test.py +272 -0
  151. melage/plugins/warpseg/warpseg_main/train.py +432 -0
  152. melage/plugins/warpseg/warpseg_main/train_reg.py +373 -0
  153. melage/plugins/warpseg/warpseg_main/verify_post_process.py +73 -0
  154. melage/plugins/warpseg/warpseg_main/voxelmorph/__init__.py +45 -0
  155. melage/plugins/warpseg/warpseg_main/voxelmorph/py/__init__.py +1 -0
  156. melage/plugins/warpseg/warpseg_main/voxelmorph/py/utils.py +99 -0
  157. melage/{widgets/Synthstrip.py → plugins/warpseg/warpseg_main/voxelmorph/torch/Unet.py} +71 -51
  158. melage/plugins/warpseg/warpseg_main/voxelmorph/torch/__init__.py +4 -0
  159. melage/plugins/warpseg/warpseg_main/voxelmorph/torch/layers.py +97 -0
  160. melage/plugins/warpseg/warpseg_main/voxelmorph/torch/losses.py +462 -0
  161. melage/plugins/warpseg/warpseg_main/voxelmorph/torch/modelio.py +77 -0
  162. melage/{widgets/DeepLModels/InfantSegment/Unet.py → plugins/warpseg/warpseg_main/voxelmorph/torch/multi_stage_net.py} +76 -52
  163. melage/plugins/warpseg/warpseg_main/voxelmorph/torch/networks.py +308 -0
  164. melage/plugins/warpseg/warpseg_main/voxelmorph/torch/utils.py +470 -0
  165. melage/{utils/DispalyIm.py → rendering/DisplayIm.py} +67 -79
  166. melage/{utils → rendering}/glScientific.py +1 -1
  167. melage/utils/__init__.py +1 -0
  168. melage/utils/utils.py +343 -196
  169. melage/widgets/{dockWidgets.py → DockWidgets.py} +123 -55
  170. melage/widgets/SettingsWidget.py +98 -0
  171. melage/widgets/__init__.py +49 -0
  172. melage/widgets/openglWidgets.py +344 -156
  173. melage/widgets/openglWidgets_bu.py +645 -0
  174. melage/widgets/plugin_manager.py +62 -0
  175. melage-1.0.0.dist-info/METADATA +953 -0
  176. melage-1.0.0.dist-info/RECORD +571 -0
  177. melage-1.0.0.dist-info/entry_points.txt +2 -0
  178. melage-1.0.0.dist-info/top_level.txt +4 -0
  179. melage/requirements22.txt +0 -25
  180. melage/requirements_old.txt +0 -28
  181. melage/resource/theme/rc/checkbox_checked.png +0 -0
  182. melage/resource/theme/rc/checkbox_checked@2x.png +0 -0
  183. melage/resource/theme/rc/checkbox_checked@2x0.png +0 -0
  184. melage/resource/theme/rc/checkbox_checked@2x000.png.png +0 -0
  185. melage/resource/theme/rc/checkbox_checked_disabled.png +0 -0
  186. melage/resource/theme/rc/checkbox_checked_disabled0.png +0 -0
  187. melage/resource/theme/rc/checkbox_checked_disabled@2x.png +0 -0
  188. melage/resource/theme/rc/checkbox_checked_disabled@2x0.png +0 -0
  189. melage/resource/theme/rc/checkbox_checked_focus.png +0 -0
  190. melage/resource/theme/rc/checkbox_checked_focus0.png +0 -0
  191. melage/resource/theme/rc/checkbox_checked_focus@2x.png +0 -0
  192. melage/resource/theme/rc/checkbox_checked_focus@2x0.png +0 -0
  193. melage/resource/theme/rc/checkbox_checked_pressed.png +0 -0
  194. melage/resource/theme/rc/checkbox_checked_pressed0.png +0 -0
  195. melage/resource/theme/rc/checkbox_checked_pressed@2x.png +0 -0
  196. melage/resource/theme/rc/checkbox_checked_pressed@2x0.png +0 -0
  197. melage/resource/theme/rc/checkbox_indeterminate.png +0 -0
  198. melage/resource/theme/rc/checkbox_indeterminate@2x.png +0 -0
  199. melage/resource/theme/rc/checkbox_indeterminate_disabled.png +0 -0
  200. melage/resource/theme/rc/checkbox_indeterminate_disabled@2x.png +0 -0
  201. melage/resource/theme/rc/checkbox_indeterminate_focus.png +0 -0
  202. melage/resource/theme/rc/checkbox_indeterminate_focus@2x.png +0 -0
  203. melage/resource/theme/rc/checkbox_indeterminate_pressed.png +0 -0
  204. melage/resource/theme/rc/checkbox_indeterminate_pressed@2x.png +0 -0
  205. melage/resource/theme/rc/checkbox_unchecked.png +0 -0
  206. melage/resource/theme/rc/checkbox_unchecked0.png +0 -0
  207. melage/resource/theme/rc/checkbox_unchecked00.png +0 -0
  208. melage/resource/theme/rc/checkbox_unchecked@2x.png +0 -0
  209. melage/resource/theme/rc/checkbox_unchecked@2x0.png +0 -0
  210. melage/resource/theme/rc/checkbox_unchecked@2x00.png +0 -0
  211. melage/resource/theme/rc/checkbox_unchecked_disabled.png +0 -0
  212. melage/resource/theme/rc/checkbox_unchecked_disabled0.png +0 -0
  213. melage/resource/theme/rc/checkbox_unchecked_disabled00.png +0 -0
  214. melage/resource/theme/rc/checkbox_unchecked_disabled@2x.png +0 -0
  215. melage/resource/theme/rc/checkbox_unchecked_disabled@2x0.png +0 -0
  216. melage/resource/theme/rc/checkbox_unchecked_disabled@2x00.png +0 -0
  217. melage/resource/theme/rc/checkbox_unchecked_focus.png +0 -0
  218. melage/resource/theme/rc/checkbox_unchecked_focus0.png +0 -0
  219. melage/resource/theme/rc/checkbox_unchecked_focus00.png +0 -0
  220. melage/resource/theme/rc/checkbox_unchecked_focus@2x.png +0 -0
  221. melage/resource/theme/rc/checkbox_unchecked_focus@2x0.png +0 -0
  222. melage/resource/theme/rc/checkbox_unchecked_focus@2x00.png +0 -0
  223. melage/resource/theme/rc/checkbox_unchecked_pressed.png +0 -0
  224. melage/resource/theme/rc/checkbox_unchecked_pressed0.png +0 -0
  225. melage/resource/theme/rc/checkbox_unchecked_pressed00.png +0 -0
  226. melage/resource/theme/rc/checkbox_unchecked_pressed@2x.png +0 -0
  227. melage/resource/theme/rc/checkbox_unchecked_pressed@2x0.png +0 -0
  228. melage/resource/theme/rc/checkbox_unchecked_pressed@2x00.png +0 -0
  229. melage/some_notes.txt +0 -3
  230. melage/utils/GMM.py +0 -720
  231. melage/utils/Shaders_bu.py +0 -314
  232. melage/utils/__init__0.py +0 -7
  233. melage/utils/glScientific_bc.py +0 -1585
  234. melage/utils/registration.py +0 -512
  235. melage/utils/source_folder.py +0 -18
  236. melage/version.txt +0 -1
  237. melage/widgets/ApplyMask.py +0 -212
  238. melage/widgets/ChangeSystem.py +0 -152
  239. melage/widgets/DeepLModels/NPP/dataset/mri_dataset_affine.py +0 -149
  240. melage/widgets/DeepLModels/NPP/models/checkpoints/npp_v1.pth.py +0 -0
  241. melage/widgets/DeepLModels/NPP/models/losses.py +0 -146
  242. melage/widgets/DeepLModels/NPP/models/model.py +0 -272
  243. melage/widgets/DeepLModels/NPP/models/utils.py +0 -303
  244. melage/widgets/DeepLModels/NPP/npp.py +0 -116
  245. melage/widgets/DeepLModels/NPP/requirements.txt +0 -8
  246. melage/widgets/DeepLModels/NPP/train/train.py +0 -116
  247. melage/widgets/DeepLModels/Unet3DAtt.py +0 -657
  248. melage/widgets/DeepLModels/Unet3D_basic.py +0 -648
  249. melage/widgets/DeepLModels/new_unet_old.py +0 -639
  250. melage/widgets/DeepLModels/new_unet_old2.py +0 -658
  251. melage/widgets/MaskOperations.py +0 -147
  252. melage/widgets/N4Dialog.py +0 -241
  253. melage/widgets/Segmentation/__init__.py +0 -588
  254. melage/widgets/SemiAutoSeg.py +0 -666
  255. melage/widgets/__init__0.py +0 -5
  256. melage/widgets/about.py +0 -246
  257. melage/widgets/activator.py +0 -147
  258. melage/widgets/be_dl.py +0 -409
  259. melage/widgets/be_dl_unet3d.py +0 -441
  260. melage/widgets/brain_extraction_dl.py +0 -887
  261. melage/widgets/brain_extraction_dl_bu.py +0 -869
  262. melage/widgets/registrationWidget.py +0 -342
  263. melage/widgets/settings_widget.py +0 -77
  264. melage/widgets/tranformationWidget.py +0 -275
  265. melage-0.0.65.dist-info/METADATA +0 -742
  266. melage-0.0.65.dist-info/RECORD +0 -501
  267. melage-0.0.65.dist-info/entry_points.txt +0 -2
  268. melage-0.0.65.dist-info/top_level.txt +0 -1
  269. {melage/resource → assets}/main.ico +0 -0
  270. {melage → assets}/resource/0circle.png +0 -0
  271. {melage → assets}/resource/0circle_faded.png +0 -0
  272. {melage → assets}/resource/3d.png +0 -0
  273. {melage → assets}/resource/3d.psd +0 -0
  274. {melage → assets}/resource/3dFaded.png +0 -0
  275. {melage → assets}/resource/Eraser.png +0 -0
  276. {melage → assets}/resource/EraserFaded.png +0 -0
  277. {melage → assets}/resource/EraserX.png +0 -0
  278. {melage → assets}/resource/EraserXFaded.png +0 -0
  279. {melage → assets}/resource/Eraser_icon.svg +0 -0
  280. {melage → assets}/resource/Hand.png +0 -0
  281. {melage → assets}/resource/HandIcons_0.png +0 -0
  282. {melage → assets}/resource/Hand_IX.png +0 -0
  283. {melage → assets}/resource/Hand_IXFaded.png +0 -0
  284. {melage → assets}/resource/Handsqueezed.png +0 -0
  285. {melage → assets}/resource/Handwriting (copy).png +0 -0
  286. {melage → assets}/resource/Handwriting.png +0 -0
  287. {melage → assets}/resource/HandwritingMinus.png +0 -0
  288. {melage → assets}/resource/HandwritingMinusX.png +0 -0
  289. {melage → assets}/resource/HandwritingPlus.png +0 -0
  290. {melage → assets}/resource/HandwritingPlusX.png +0 -0
  291. {melage → assets}/resource/Move_icon.svg +0 -0
  292. {melage → assets}/resource/PngItem_2422924.png +0 -0
  293. {melage → assets}/resource/about.png +0 -0
  294. {melage → assets}/resource/about_logo.png +0 -0
  295. {melage → assets}/resource/about_logo0.png +0 -0
  296. {melage → assets}/resource/action_check.png +0 -0
  297. {melage → assets}/resource/action_check_OFF.png +0 -0
  298. {melage → assets}/resource/arrow).png +0 -0
  299. {melage → assets}/resource/arrow.png +0 -0
  300. {melage → assets}/resource/arrowFaded.png +0 -0
  301. {melage → assets}/resource/arrow_org.png +0 -0
  302. {melage → assets}/resource/arrow_org.png.png +0 -0
  303. {melage → assets}/resource/arrows.png +0 -0
  304. {melage → assets}/resource/authors.mp4 +0 -0
  305. {melage → assets}/resource/box.png +0 -0
  306. {melage → assets}/resource/check-image-icon-0.jpg +0 -0
  307. {melage → assets}/resource/circle.png +0 -0
  308. {melage → assets}/resource/circle_faded.png +0 -0
  309. {melage → assets}/resource/circle_or.png +0 -0
  310. {melage → assets}/resource/close.png +0 -0
  311. {melage → assets}/resource/close_bg.png +0 -0
  312. {melage → assets}/resource/color/Simple.txt +0 -0
  313. {melage → assets}/resource/color/Tissue.txt +0 -0
  314. {melage → assets}/resource/color/Tissue12.txt +0 -0
  315. {melage → assets}/resource/color/albert_LUT.txt +0 -0
  316. {melage → assets}/resource/color/mcrib_LUT.txt +0 -0
  317. {melage → assets}/resource/color/pediatric1.txt +0 -0
  318. {melage → assets}/resource/color/pediatric1_old.txt +0 -0
  319. {melage → assets}/resource/color/pediatric2.txt +0 -0
  320. {melage → assets}/resource/color/pediatric3.txt +0 -0
  321. {melage → assets}/resource/color/pediatrics (copy).csv +0 -0
  322. {melage → assets}/resource/color/tissue_seg.txt +0 -0
  323. {melage → assets}/resource/contour.png +0 -0
  324. {melage → assets}/resource/contour.svg +0 -0
  325. {melage → assets}/resource/contourFaded.png +0 -0
  326. {melage → assets}/resource/contourX.png +0 -0
  327. {melage → assets}/resource/contourXFaded.png +0 -0
  328. {melage → assets}/resource/dti.png +0 -0
  329. {melage → assets}/resource/dti0.png +0 -0
  330. {melage → assets}/resource/dti222.png +0 -0
  331. {melage → assets}/resource/dti_or.png +0 -0
  332. {melage → assets}/resource/eco.png +0 -0
  333. {melage → assets}/resource/eco22.png +0 -0
  334. {melage → assets}/resource/eco_old.png +0 -0
  335. {melage → assets}/resource/eco_or.png +0 -0
  336. {melage → assets}/resource/eco_or2.png +0 -0
  337. {melage → assets}/resource/eco_seg.png +0 -0
  338. {melage → assets}/resource/eco_seg_old.png +0 -0
  339. {melage → assets}/resource/export.png +0 -0
  340. {melage → assets}/resource/hand-grab-icon-10.jpg +0 -0
  341. {melage → assets}/resource/hand-grab-icon-25.jpg +0 -0
  342. {melage → assets}/resource/info.png +0 -0
  343. {melage → assets}/resource/line.png +0 -0
  344. {melage → assets}/resource/linefaded.png +0 -0
  345. {melage → assets}/resource/load.png +0 -0
  346. {melage → assets}/resource/manual_images/3D_rightc.png +0 -0
  347. {melage → assets}/resource/manual_images/3D_rightc_goto.png +0 -0
  348. {melage → assets}/resource/manual_images/3D_rightc_paint.png +0 -0
  349. {melage → assets}/resource/manual_images/3D_rightc_paint_draw1.png +0 -0
  350. {melage → assets}/resource/manual_images/3D_rightc_paint_draw2.png +0 -0
  351. {melage → assets}/resource/manual_images/3D_rightc_paint_render.png +0 -0
  352. {melage → assets}/resource/manual_images/3D_rightc_paint_render2.png +0 -0
  353. {melage → assets}/resource/manual_images/3D_rightc_paint_render3.png +0 -0
  354. {melage → assets}/resource/manual_images/3D_rightc_paint_render4.png +0 -0
  355. {melage → assets}/resource/manual_images/3D_rightc_paint_render5.png +0 -0
  356. {melage → assets}/resource/manual_images/3D_rightc_paint_render6.png +0 -0
  357. {melage → assets}/resource/manual_images/3D_rightc_seg.png +0 -0
  358. {melage → assets}/resource/manual_images/exit_toolbar.png +0 -0
  359. {melage → assets}/resource/manual_images/load_image_file.png +0 -0
  360. {melage → assets}/resource/manual_images/load_image_file_openp.png +0 -0
  361. {melage → assets}/resource/manual_images/main_page.png +0 -0
  362. {melage → assets}/resource/manual_images/menu_file.png +0 -0
  363. {melage → assets}/resource/manual_images/menu_file_export.png +0 -0
  364. {melage → assets}/resource/manual_images/menu_file_import.png +0 -0
  365. {melage → assets}/resource/manual_images/menu_file_settings.png +0 -0
  366. {melage → assets}/resource/manual_images/menu_file_ss.png +0 -0
  367. {melage → assets}/resource/manual_images/open_save_load.png +0 -0
  368. {melage → assets}/resource/manual_images/panning_toolbar.png +0 -0
  369. {melage → assets}/resource/manual_images/segmentation_toolbar.png +0 -0
  370. {melage → assets}/resource/manual_images/tab_mri.png +0 -0
  371. {melage → assets}/resource/manual_images/tab_us.png +0 -0
  372. {melage → assets}/resource/manual_images/tabs.png +0 -0
  373. {melage → assets}/resource/manual_images/toolbar_tools.png +0 -0
  374. {melage → assets}/resource/manual_images/tools_basic.png +0 -0
  375. {melage → assets}/resource/manual_images/tools_bet.png +0 -0
  376. {melage → assets}/resource/manual_images/tools_cs.png +0 -0
  377. {melage → assets}/resource/manual_images/tools_deepbet.png +0 -0
  378. {melage → assets}/resource/manual_images/tools_imageinfo.png +0 -0
  379. {melage → assets}/resource/manual_images/tools_maskO.png +0 -0
  380. {melage → assets}/resource/manual_images/tools_masking.png +0 -0
  381. {melage → assets}/resource/manual_images/tools_n4b.png +0 -0
  382. {melage → assets}/resource/manual_images/tools_resize.png +0 -0
  383. {melage → assets}/resource/manual_images/tools_ruler.png +0 -0
  384. {melage → assets}/resource/manual_images/tools_seg.png +0 -0
  385. {melage → assets}/resource/manual_images/tools_threshold.png +0 -0
  386. {melage → assets}/resource/manual_images/tools_tools.png +0 -0
  387. {melage → assets}/resource/manual_images/widget_color.png +0 -0
  388. {melage → assets}/resource/manual_images/widget_color_add.png +0 -0
  389. {melage → assets}/resource/manual_images/widget_color_add2.png +0 -0
  390. {melage → assets}/resource/manual_images/widget_color_additional.png +0 -0
  391. {melage → assets}/resource/manual_images/widget_images.png +0 -0
  392. {melage → assets}/resource/manual_images/widget_images2.png +0 -0
  393. {melage → assets}/resource/manual_images/widget_images3.png +0 -0
  394. {melage → assets}/resource/manual_images/widget_marker.png +0 -0
  395. {melage → assets}/resource/manual_images/widget_mri.png +0 -0
  396. {melage → assets}/resource/manual_images/widget_mri2.png +0 -0
  397. {melage → assets}/resource/manual_images/widget_segintensity.png +0 -0
  398. {melage → assets}/resource/manual_images/widget_tab_mutualview.png +0 -0
  399. {melage → assets}/resource/manual_images/widget_tab_mutualview2.png +0 -0
  400. {melage → assets}/resource/manual_images/widget_table.png +0 -0
  401. {melage → assets}/resource/manual_images/widget_table2.png +0 -0
  402. {melage → assets}/resource/manual_images/widget_us.png +0 -0
  403. {melage → assets}/resource/melage_top.ico +0 -0
  404. {melage → assets}/resource/melage_top.png +0 -0
  405. {melage → assets}/resource/melage_top0.png +0 -0
  406. {melage → assets}/resource/melage_top1.png +0 -0
  407. {melage → assets}/resource/melage_top4.png +0 -0
  408. {melage → assets}/resource/mri (copy).png +0 -0
  409. {melage → assets}/resource/mri.png +0 -0
  410. {melage → assets}/resource/mri0.png +0 -0
  411. {melage → assets}/resource/mri000.png +0 -0
  412. {melage → assets}/resource/mri22.png +0 -0
  413. {melage → assets}/resource/mri_big.png +0 -0
  414. {melage → assets}/resource/mri_old.png +0 -0
  415. {melage → assets}/resource/mri_seg.png +0 -0
  416. {melage → assets}/resource/mri_seg_old.png +0 -0
  417. {melage → assets}/resource/new.png +0 -0
  418. {melage → assets}/resource/open.png +0 -0
  419. {melage → assets}/resource/open2.png +0 -0
  420. {melage → assets}/resource/pan.png +0 -0
  421. {melage → assets}/resource/pencil.png +0 -0
  422. {melage → assets}/resource/pencilFaded.png +0 -0
  423. {melage → assets}/resource/points.png +0 -0
  424. {melage → assets}/resource/pointsFaded.png +0 -0
  425. {melage → assets}/resource/rotate.png +0 -0
  426. {melage → assets}/resource/ruler.png +0 -0
  427. {melage → assets}/resource/rulerFaded.png +0 -0
  428. {melage → assets}/resource/s.png +0 -0
  429. {melage → assets}/resource/s.psd +0 -0
  430. {melage → assets}/resource/save.png +0 -0
  431. {melage → assets}/resource/saveas.png +0 -0
  432. {melage → assets}/resource/seg_mri.png +0 -0
  433. {melage → assets}/resource/seg_mri2.png +0 -0
  434. {melage → assets}/resource/settings.png +0 -0
  435. {melage → assets}/resource/synch.png +0 -0
  436. {melage → assets}/resource/synchFaded.png +0 -0
  437. {melage → assets}/resource/theme/rc/.keep +0 -0
  438. {melage → assets}/resource/theme/rc/arrow_down.png +0 -0
  439. {melage → assets}/resource/theme/rc/arrow_down@2x.png +0 -0
  440. {melage → assets}/resource/theme/rc/arrow_down_disabled.png +0 -0
  441. {melage → assets}/resource/theme/rc/arrow_down_disabled@2x.png +0 -0
  442. {melage → assets}/resource/theme/rc/arrow_down_focus.png +0 -0
  443. {melage → assets}/resource/theme/rc/arrow_down_focus@2x.png +0 -0
  444. {melage → assets}/resource/theme/rc/arrow_down_pressed.png +0 -0
  445. {melage → assets}/resource/theme/rc/arrow_down_pressed@2x.png +0 -0
  446. {melage → assets}/resource/theme/rc/arrow_left.png +0 -0
  447. {melage → assets}/resource/theme/rc/arrow_left@2x.png +0 -0
  448. {melage → assets}/resource/theme/rc/arrow_left_disabled.png +0 -0
  449. {melage → assets}/resource/theme/rc/arrow_left_disabled@2x.png +0 -0
  450. {melage → assets}/resource/theme/rc/arrow_left_focus.png +0 -0
  451. {melage → assets}/resource/theme/rc/arrow_left_focus@2x.png +0 -0
  452. {melage → assets}/resource/theme/rc/arrow_left_pressed.png +0 -0
  453. {melage → assets}/resource/theme/rc/arrow_left_pressed@2x.png +0 -0
  454. {melage → assets}/resource/theme/rc/arrow_right.png +0 -0
  455. {melage → assets}/resource/theme/rc/arrow_right@2x.png +0 -0
  456. {melage → assets}/resource/theme/rc/arrow_right_disabled.png +0 -0
  457. {melage → assets}/resource/theme/rc/arrow_right_disabled@2x.png +0 -0
  458. {melage → assets}/resource/theme/rc/arrow_right_focus.png +0 -0
  459. {melage → assets}/resource/theme/rc/arrow_right_focus@2x.png +0 -0
  460. {melage → assets}/resource/theme/rc/arrow_right_pressed.png +0 -0
  461. {melage → assets}/resource/theme/rc/arrow_right_pressed@2x.png +0 -0
  462. {melage → assets}/resource/theme/rc/arrow_up.png +0 -0
  463. {melage → assets}/resource/theme/rc/arrow_up@2x.png +0 -0
  464. {melage → assets}/resource/theme/rc/arrow_up_disabled.png +0 -0
  465. {melage → assets}/resource/theme/rc/arrow_up_disabled@2x.png +0 -0
  466. {melage → assets}/resource/theme/rc/arrow_up_focus.png +0 -0
  467. {melage → assets}/resource/theme/rc/arrow_up_focus@2x.png +0 -0
  468. {melage → assets}/resource/theme/rc/arrow_up_pressed.png +0 -0
  469. {melage → assets}/resource/theme/rc/arrow_up_pressed@2x.png +0 -0
  470. {melage → assets}/resource/theme/rc/base_icon.png +0 -0
  471. {melage → assets}/resource/theme/rc/base_icon@2x.png +0 -0
  472. {melage → assets}/resource/theme/rc/base_icon_disabled.png +0 -0
  473. {melage → assets}/resource/theme/rc/base_icon_disabled@2x.png +0 -0
  474. {melage → assets}/resource/theme/rc/base_icon_focus.png +0 -0
  475. {melage → assets}/resource/theme/rc/base_icon_focus@2x.png +0 -0
  476. {melage → assets}/resource/theme/rc/base_icon_pressed.png +0 -0
  477. {melage → assets}/resource/theme/rc/base_icon_pressed@2x.png +0 -0
  478. {melage → assets}/resource/theme/rc/branch_closed.png +0 -0
  479. {melage → assets}/resource/theme/rc/branch_closed@2x.png +0 -0
  480. {melage → assets}/resource/theme/rc/branch_closed_disabled.png +0 -0
  481. {melage → assets}/resource/theme/rc/branch_closed_disabled@2x.png +0 -0
  482. {melage → assets}/resource/theme/rc/branch_closed_focus.png +0 -0
  483. {melage → assets}/resource/theme/rc/branch_closed_focus@2x.png +0 -0
  484. {melage → assets}/resource/theme/rc/branch_closed_pressed.png +0 -0
  485. {melage → assets}/resource/theme/rc/branch_closed_pressed@2x.png +0 -0
  486. {melage → assets}/resource/theme/rc/branch_end.png +0 -0
  487. {melage → assets}/resource/theme/rc/branch_end@2x.png +0 -0
  488. {melage → assets}/resource/theme/rc/branch_end_disabled.png +0 -0
  489. {melage → assets}/resource/theme/rc/branch_end_disabled@2x.png +0 -0
  490. {melage → assets}/resource/theme/rc/branch_end_focus.png +0 -0
  491. {melage → assets}/resource/theme/rc/branch_end_focus@2x.png +0 -0
  492. {melage → assets}/resource/theme/rc/branch_end_pressed.png +0 -0
  493. {melage → assets}/resource/theme/rc/branch_end_pressed@2x.png +0 -0
  494. {melage → assets}/resource/theme/rc/branch_line.png +0 -0
  495. {melage → assets}/resource/theme/rc/branch_line@2x.png +0 -0
  496. {melage → assets}/resource/theme/rc/branch_line_disabled.png +0 -0
  497. {melage → assets}/resource/theme/rc/branch_line_disabled@2x.png +0 -0
  498. {melage → assets}/resource/theme/rc/branch_line_focus.png +0 -0
  499. {melage → assets}/resource/theme/rc/branch_line_focus@2x.png +0 -0
  500. {melage → assets}/resource/theme/rc/branch_line_pressed.png +0 -0
  501. {melage → assets}/resource/theme/rc/branch_line_pressed@2x.png +0 -0
  502. {melage → assets}/resource/theme/rc/branch_more.png +0 -0
  503. {melage → assets}/resource/theme/rc/branch_more@2x.png +0 -0
  504. {melage → assets}/resource/theme/rc/branch_more_disabled.png +0 -0
  505. {melage → assets}/resource/theme/rc/branch_more_disabled@2x.png +0 -0
  506. {melage → assets}/resource/theme/rc/branch_more_focus.png +0 -0
  507. {melage → assets}/resource/theme/rc/branch_more_focus@2x.png +0 -0
  508. {melage → assets}/resource/theme/rc/branch_more_pressed.png +0 -0
  509. {melage → assets}/resource/theme/rc/branch_more_pressed@2x.png +0 -0
  510. {melage → assets}/resource/theme/rc/branch_open.png +0 -0
  511. {melage → assets}/resource/theme/rc/branch_open@2x.png +0 -0
  512. {melage → assets}/resource/theme/rc/branch_open_disabled.png +0 -0
  513. {melage → assets}/resource/theme/rc/branch_open_disabled@2x.png +0 -0
  514. {melage → assets}/resource/theme/rc/branch_open_focus.png +0 -0
  515. {melage → assets}/resource/theme/rc/branch_open_focus@2x.png +0 -0
  516. {melage → assets}/resource/theme/rc/branch_open_pressed.png +0 -0
  517. {melage → assets}/resource/theme/rc/branch_open_pressed@2x.png +0 -0
  518. {melage → assets}/resource/theme/rc/checkbox_checked0.png +0 -0
  519. {melage → assets}/resource/theme/rc/line_horizontal.png +0 -0
  520. {melage → assets}/resource/theme/rc/line_horizontal@2x.png +0 -0
  521. {melage → assets}/resource/theme/rc/line_horizontal_disabled.png +0 -0
  522. {melage → assets}/resource/theme/rc/line_horizontal_disabled@2x.png +0 -0
  523. {melage → assets}/resource/theme/rc/line_horizontal_focus.png +0 -0
  524. {melage → assets}/resource/theme/rc/line_horizontal_focus@2x.png +0 -0
  525. {melage → assets}/resource/theme/rc/line_horizontal_pressed.png +0 -0
  526. {melage → assets}/resource/theme/rc/line_horizontal_pressed@2x.png +0 -0
  527. {melage → assets}/resource/theme/rc/line_vertical.png +0 -0
  528. {melage → assets}/resource/theme/rc/line_vertical@2x.png +0 -0
  529. {melage → assets}/resource/theme/rc/line_vertical_disabled.png +0 -0
  530. {melage → assets}/resource/theme/rc/line_vertical_disabled@2x.png +0 -0
  531. {melage → assets}/resource/theme/rc/line_vertical_focus.png +0 -0
  532. {melage → assets}/resource/theme/rc/line_vertical_focus@2x.png +0 -0
  533. {melage → assets}/resource/theme/rc/line_vertical_pressed.png +0 -0
  534. {melage → assets}/resource/theme/rc/line_vertical_pressed@2x.png +0 -0
  535. {melage → assets}/resource/theme/rc/radio_checked.png +0 -0
  536. {melage → assets}/resource/theme/rc/radio_checked@2x.png +0 -0
  537. {melage → assets}/resource/theme/rc/radio_checked_disabled.png +0 -0
  538. {melage → assets}/resource/theme/rc/radio_checked_disabled@2x.png +0 -0
  539. {melage → assets}/resource/theme/rc/radio_checked_focus.png +0 -0
  540. {melage → assets}/resource/theme/rc/radio_checked_focus@2x.png +0 -0
  541. {melage → assets}/resource/theme/rc/radio_checked_pressed.png +0 -0
  542. {melage → assets}/resource/theme/rc/radio_checked_pressed@2x.png +0 -0
  543. {melage → assets}/resource/theme/rc/radio_unchecked.png +0 -0
  544. {melage → assets}/resource/theme/rc/radio_unchecked@2x.png +0 -0
  545. {melage → assets}/resource/theme/rc/radio_unchecked_disabled.png +0 -0
  546. {melage → assets}/resource/theme/rc/radio_unchecked_disabled@2x.png +0 -0
  547. {melage → assets}/resource/theme/rc/radio_unchecked_focus.png +0 -0
  548. {melage → assets}/resource/theme/rc/radio_unchecked_focus@2x.png +0 -0
  549. {melage → assets}/resource/theme/rc/radio_unchecked_pressed.png +0 -0
  550. {melage → assets}/resource/theme/rc/radio_unchecked_pressed@2x.png +0 -0
  551. {melage → assets}/resource/theme/rc/toolbar_move_horizontal.png +0 -0
  552. {melage → assets}/resource/theme/rc/toolbar_move_horizontal@2x.png +0 -0
  553. {melage → assets}/resource/theme/rc/toolbar_move_horizontal_disabled.png +0 -0
  554. {melage → assets}/resource/theme/rc/toolbar_move_horizontal_disabled@2x.png +0 -0
  555. {melage → assets}/resource/theme/rc/toolbar_move_horizontal_focus.png +0 -0
  556. {melage → assets}/resource/theme/rc/toolbar_move_horizontal_focus@2x.png +0 -0
  557. {melage → assets}/resource/theme/rc/toolbar_move_horizontal_pressed.png +0 -0
  558. {melage → assets}/resource/theme/rc/toolbar_move_horizontal_pressed@2x.png +0 -0
  559. {melage → assets}/resource/theme/rc/toolbar_move_vertical.png +0 -0
  560. {melage → assets}/resource/theme/rc/toolbar_move_vertical@2x.png +0 -0
  561. {melage → assets}/resource/theme/rc/toolbar_move_vertical_disabled.png +0 -0
  562. {melage → assets}/resource/theme/rc/toolbar_move_vertical_disabled@2x.png +0 -0
  563. {melage → assets}/resource/theme/rc/toolbar_move_vertical_focus.png +0 -0
  564. {melage → assets}/resource/theme/rc/toolbar_move_vertical_focus@2x.png +0 -0
  565. {melage → assets}/resource/theme/rc/toolbar_move_vertical_pressed.png +0 -0
  566. {melage → assets}/resource/theme/rc/toolbar_move_vertical_pressed@2x.png +0 -0
  567. {melage → assets}/resource/theme/rc/toolbar_separator_horizontal.png +0 -0
  568. {melage → assets}/resource/theme/rc/toolbar_separator_horizontal@2x.png +0 -0
  569. {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_disabled.png +0 -0
  570. {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_disabled@2x.png +0 -0
  571. {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_focus.png +0 -0
  572. {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_focus@2x.png +0 -0
  573. {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_pressed.png +0 -0
  574. {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_pressed@2x.png +0 -0
  575. {melage → assets}/resource/theme/rc/toolbar_separator_vertical.png +0 -0
  576. {melage → assets}/resource/theme/rc/toolbar_separator_vertical@2x.png +0 -0
  577. {melage → assets}/resource/theme/rc/toolbar_separator_vertical_disabled.png +0 -0
  578. {melage → assets}/resource/theme/rc/toolbar_separator_vertical_disabled@2x.png +0 -0
  579. {melage → assets}/resource/theme/rc/toolbar_separator_vertical_focus.png +0 -0
  580. {melage → assets}/resource/theme/rc/toolbar_separator_vertical_focus@2x.png +0 -0
  581. {melage → assets}/resource/theme/rc/toolbar_separator_vertical_pressed.png +0 -0
  582. {melage → assets}/resource/theme/rc/toolbar_separator_vertical_pressed@2x.png +0 -0
  583. {melage → assets}/resource/theme/rc/transparent.png +0 -0
  584. {melage → assets}/resource/theme/rc/transparent@2x.png +0 -0
  585. {melage → assets}/resource/theme/rc/transparent_disabled.png +0 -0
  586. {melage → assets}/resource/theme/rc/transparent_disabled@2x.png +0 -0
  587. {melage → assets}/resource/theme/rc/transparent_focus.png +0 -0
  588. {melage → assets}/resource/theme/rc/transparent_focus@2x.png +0 -0
  589. {melage → assets}/resource/theme/rc/transparent_pressed.png +0 -0
  590. {melage → assets}/resource/theme/rc/transparent_pressed@2x.png +0 -0
  591. {melage → assets}/resource/theme/rc/window_close.png +0 -0
  592. {melage → assets}/resource/theme/rc/window_close@2x.png +0 -0
  593. {melage → assets}/resource/theme/rc/window_close_disabled.png +0 -0
  594. {melage → assets}/resource/theme/rc/window_close_disabled@2x.png +0 -0
  595. {melage → assets}/resource/theme/rc/window_close_focus.png +0 -0
  596. {melage → assets}/resource/theme/rc/window_close_focus@2x.png +0 -0
  597. {melage → assets}/resource/theme/rc/window_close_pressed.png +0 -0
  598. {melage → assets}/resource/theme/rc/window_close_pressed@2x.png +0 -0
  599. {melage → assets}/resource/theme/rc/window_grip.png +0 -0
  600. {melage → assets}/resource/theme/rc/window_grip@2x.png +0 -0
  601. {melage → assets}/resource/theme/rc/window_grip_disabled.png +0 -0
  602. {melage → assets}/resource/theme/rc/window_grip_disabled@2x.png +0 -0
  603. {melage → assets}/resource/theme/rc/window_grip_focus.png +0 -0
  604. {melage → assets}/resource/theme/rc/window_grip_focus@2x.png +0 -0
  605. {melage → assets}/resource/theme/rc/window_grip_pressed.png +0 -0
  606. {melage → assets}/resource/theme/rc/window_grip_pressed@2x.png +0 -0
  607. {melage → assets}/resource/theme/rc/window_minimize.png +0 -0
  608. {melage → assets}/resource/theme/rc/window_minimize@2x.png +0 -0
  609. {melage → assets}/resource/theme/rc/window_minimize_disabled.png +0 -0
  610. {melage → assets}/resource/theme/rc/window_minimize_disabled@2x.png +0 -0
  611. {melage → assets}/resource/theme/rc/window_minimize_focus.png +0 -0
  612. {melage → assets}/resource/theme/rc/window_minimize_focus@2x.png +0 -0
  613. {melage → assets}/resource/theme/rc/window_minimize_pressed.png +0 -0
  614. {melage → assets}/resource/theme/rc/window_minimize_pressed@2x.png +0 -0
  615. {melage → assets}/resource/theme/rc/window_undock.png +0 -0
  616. {melage → assets}/resource/theme/rc/window_undock@2x.png +0 -0
  617. {melage → assets}/resource/theme/rc/window_undock_disabled.png +0 -0
  618. {melage → assets}/resource/theme/rc/window_undock_disabled@2x.png +0 -0
  619. {melage → assets}/resource/theme/rc/window_undock_focus.png +0 -0
  620. {melage → assets}/resource/theme/rc/window_undock_focus@2x.png +0 -0
  621. {melage → assets}/resource/theme/rc/window_undock_pressed.png +0 -0
  622. {melage → assets}/resource/theme/rc/window_undock_pressed@2x.png +0 -0
  623. {melage → assets}/resource/theme/style.qss +0 -0
  624. {melage → assets}/resource/tract.png +0 -0
  625. {melage → assets}/resource/view1.png +0 -0
  626. {melage → assets}/resource/view1_eco.png +0 -0
  627. {melage → assets}/resource/view1_mri.png +0 -0
  628. {melage → assets}/resource/view1_seg.png +0 -0
  629. {melage → assets}/resource/view2.png +0 -0
  630. {melage → assets}/resource/view2_seg.png +0 -0
  631. {melage → assets}/resource/w.png +0 -0
  632. {melage → assets}/resource/zoom_inFaded.png +0 -0
  633. /melage/resource/zoom_in.png → /assets/resource/zoom_in_old.png +0 -0
  634. {melage → assets}/resource/zoom_outFaded.png +0 -0
  635. /melage/resource/zoom_out.png → /assets/resource/zoom_out_old.png +0 -0
  636. /melage/{widgets/activation.py → dialogs/ActivationDialog.py} +0 -0
  637. /melage/{widgets/HistImage.py → dialogs/HistogramDialog.py} +0 -0
  638. /melage/{widgets/iminfo.py → dialogs/ImInfoDialog.py} +0 -0
  639. /melage/{widgets/colorwidget.py → dialogs/helpers/ColorDialog.py} +0 -0
  640. /melage/{utils/custom_QScrollBar.py → dialogs/helpers/CustomScrollbar.py} +0 -0
  641. /melage/{widgets/repeat_widget.py → dialogs/helpers/RepeatDialog.py} +0 -0
  642. /melage/{widgets/screenshot_widget.py → dialogs/helpers/ScreenshotDialog.py} +0 -0
  643. /melage/{cli.py → melage.py} +0 -0
  644. /melage/{utils/brain_extraction_helper.py → plugins/bet/main/utils.py} +0 -0
  645. /melage/{graphics → rendering}/GLGraphicsItem.py +0 -0
  646. /melage/{graphics → rendering}/GLViewWidget.py +0 -0
  647. /melage/{graphics → rendering}/Transform3D.py +0 -0
  648. /melage/{graphics → rendering}/__init__.py +0 -0
  649. /melage/{graphics → rendering}/functions.py +0 -0
  650. /melage/{utils → rendering/helpers}/Shaders_120.py +0 -0
  651. /melage/{utils → rendering/helpers}/Shaders_330.py +0 -0
  652. /melage/{graphics → rendering}/items/GLAxisItem.py +0 -0
  653. /melage/{graphics → rendering}/items/GLGridItem.py +0 -0
  654. /melage/{graphics → rendering}/items/GLPolygonItem.py +0 -0
  655. /melage/{graphics → rendering}/items/GLScatterPlotItem.py +0 -0
  656. /melage/{graphics → rendering}/items/GLVolumeItem.py +0 -0
  657. /melage/{graphics → rendering}/items/GLVolumeItem_b.py +0 -0
  658. /melage/{graphics → rendering}/items/__init__.py +0 -0
  659. /melage/{graphics → rendering}/shaders.py +0 -0
  660. /melage/widgets/{enhanceImWidget.py → EnhanceImageWidget.py} +0 -0
  661. {melage-0.0.65.dist-info → melage-1.0.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,145 @@
1
+ from PyQt5.QtWidgets import QMessageBox
2
+ from melage.widgets import MelagePlugin
3
+ from melage.dialogs.dynamic_gui import DynamicDialog
4
+ from .MGA_Net_schema import get_schema
5
+ from PyQt5 import QtWidgets
6
+ from .main.test_mgaNet import build_model, get_inference
7
+ import torch
8
+ from PyQt5.QtCore import Qt
9
+ from melage.config import settings
10
+ import os
11
+ from PyQt5.QtCore import pyqtSignal
12
+ # --- THE LOGIC CLASS ---
13
+ class MGA_NetLogic(DynamicDialog):
14
+ """
15
+ This class handles the BRAIN of the WarpSeg tool.
16
+ The LOOKS are handled automatically by DynamicDialog + Schema.
17
+ """
18
+ completed = pyqtSignal(object)
19
+ def __init__(self, data_context,parent=None):
20
+ # 1. Initialize DynamicDialog with the Schema
21
+ # This single line builds the entire window!
22
+
23
+ super().__init__(parent)
24
+ self.create_main_ui(schema=get_schema())
25
+ self.setAttribute(Qt.WA_DeleteOnClose)
26
+ self.data_context = data_context
27
+
28
+ # 2. AUTOMATICALLY WIDGET BINDING
29
+ # Iterate over all widgets created by the schema and bind them to 'self'.
30
+ for widget_id, widget_obj in self.widgets.items():
31
+ setattr(self, widget_id, widget_obj)
32
+
33
+ # 3. GENERAL PURPOSE SIGNAL CONNECTION (Auto-Connect)
34
+ # Instead of a hardcoded dictionary, we iterate through every widget from the schema
35
+ # and look for a matching method in this class named: on_<ID>_<Signal>
36
+ # This works for ANY schema changes automatically.
37
+ supported_signals = [
38
+ "clicked", "toggled", "currentIndexChanged",
39
+ "textChanged", "valueChanged"
40
+ ]
41
+
42
+ for widget_id, widget_obj in self.widgets.items():
43
+ for signal_name in supported_signals:
44
+ # 1. Check if the widget has this signal (e.g., Button has 'clicked')
45
+ if hasattr(widget_obj, signal_name):
46
+ # 2. Check if WE have a handler method (e.g., 'on_btn_apply_clicked')
47
+ handler_name = f"on_{widget_id}_{signal_name}"
48
+ if hasattr(self, handler_name):
49
+ # 3. Connect them!
50
+ signal = getattr(widget_obj, signal_name)
51
+ handler = getattr(self, handler_name)
52
+ # Disconnect first to be safe (idempotent), then connect
53
+ try:
54
+ signal.disconnect(handler)
55
+ except TypeError:
56
+ pass
57
+ signal.connect(handler)
58
+ # print(f"Auto-connected: {widget_id}.{signal_name} -> {handler_name}")
59
+
60
+
61
+ @property
62
+ def ui_schema(self):
63
+ # We call the function to get the dictionary
64
+ return get_schema()
65
+
66
+
67
+
68
+
69
+ # Renamed from 'run_process' to match the schema ID 'btn_apply'
70
+ def on_btn_apply_clicked(self):
71
+ view = self.combo_view.currentText()
72
+ data_view = self.data_context[view]
73
+ if data_view is None:
74
+ QMessageBox.information(self, "Error", "No image data available for the selected view.")
75
+ return
76
+
77
+ try:
78
+ """The main execution function."""
79
+ # Get values using auto-bound attributes
80
+ use_cuda = self.check_cuda.isChecked()
81
+
82
+
83
+ self.progress_bar.setValue(10)
84
+ print(f"Running WarpSeg: View={view}, CUDA={use_cuda}")
85
+
86
+ if use_cuda and torch.cuda.is_available():
87
+ device = torch.device("cuda")
88
+ print("Using CUDA for computation.")
89
+ else:
90
+ device = torch.device("cpu")
91
+ print("Using CPU for computation.")
92
+ #if self.check_adult.isChecked():
93
+ model_path = getattr(self, 'weights_path_custom', None)
94
+ #else:
95
+ # model_path = getattr(self, 'weights_path_custom', None) or os.path.join(settings.DEFAULT_MODELS_DIR, "WarpSeg_Infant.pth")
96
+ self.progress_bar.setValue(30)
97
+ # Build model
98
+ model = build_model(model_path=model_path, device=device)
99
+ self.progress_bar.setValue(50)
100
+ # Here you would load pre-trained weights if available
101
+ # For simplicity, we skip that step
102
+ # Run inference
103
+
104
+ data = data_view.get_fdata().copy()
105
+ if len(data.shape)<=1:
106
+ raise ValueError("Input image must be at least 2D NIfTI.")
107
+ threshold = self.spin_threshold.value()
108
+ eco_mri = -1
109
+ if self.radio_mri.isChecked():
110
+ eco_mri = 1
111
+ image, seg = get_inference(model, data, device, eco_mri=eco_mri, threshold=threshold, high_quality_rec=True)
112
+ result_package = {
113
+ "image": image,
114
+ "label": seg,
115
+ "view": view
116
+ }
117
+ self.completed.emit(result_package)
118
+ self.progress_bar.setValue(100)
119
+ #QMessageBox.information(self, "Done", "Segmentation Complete")
120
+
121
+ except Exception as e:
122
+ QMessageBox.information(self, "Error", f"{e}")
123
+ self.progress_bar.setValue(0)
124
+
125
+ def on_context_action(self, text, widget):
126
+ """Handle the Right-Click Context Menu defined in schema"""
127
+ if text == "Reset Adult Options":
128
+ # Access radio button directly by ID
129
+ self.radio_adult_whole.setChecked(True)
130
+ print("Options reset.")
131
+
132
+
133
+ # --- THE PLUGIN WRAPPER ---
134
+ class WarpSegPlugin(MelagePlugin):
135
+ @property
136
+ def name(self) -> str: return "MGA-Net"
137
+
138
+ @property
139
+ def category(self) -> str: return "Segmentation"
140
+
141
+
142
+ def get_widget(self, data_context =None,parent=None):
143
+ logic = MGA_NetLogic(data_context, parent)
144
+
145
+ return logic
@@ -0,0 +1,29 @@
1
+
2
+ from ..ui_helpers import Label, Combo, Check, Radio, Group, Button, Progress, HBox, FilePicker, SpinBox, Reference
3
+
4
+ # The simplified schema using helper functions.
5
+ # The main layout defaults to 'vbox', so items stack automatically.
6
+ def get_schema():
7
+ UI_SCHEMA = {
8
+ "title": "MGA-Net Infant Deep Learning Segmentation",
9
+ "min_width": 500,
10
+ "layout": "vbox",
11
+ "items": [
12
+ #Label(id="lbl_model_info", text="Model Info: Ready for Ifant brain segmentation"),
13
+ Reference(
14
+ "<b>Jafrasteh et al. (2024)</b>. <i>'A novel mask-guided attention...'</i>. "
15
+ '<a href="https://www.sciencedirect.com/science/article/pii/S1053811924003690">(paper)</a>'
16
+
17
+ ),
18
+ SpinBox(id="spin_threshold", label="Segmentation Threshold:", value=0.5, min_val=-4.0, max_val=4.0, step=0.1, decimals=1),
19
+ # Context menu allows for extra actions like resetting options
20
+
21
+ Group(id="group_mode", layout="hbox", children=[
22
+ Radio(id="radio_mri", text="MRI Segmentation", checked=True),
23
+ Radio(id="radio_us", text="US Segmentation")
24
+ ]),
25
+
26
+
27
+ ]
28
+ }
29
+ return UI_SCHEMA
@@ -637,7 +637,7 @@ class UnetGen(nn.Module):
637
637
 
638
638
  return [mask,z]
639
639
 
640
- class Unet3D(UnetGen):
640
+ class MGA_NET(UnetGen):
641
641
  def __init__(self,time_embed=False, channels=1, *args, encoder_class=UnetEncoder, **kwargs):
642
642
  self.time_embed = time_embed
643
643
  self.use_tr_conv = False
@@ -647,6 +647,6 @@ class Unet3D(UnetGen):
647
647
  block=ResidualBlock, norm_type=norm_type, **kwargs)
648
648
 
649
649
  self.channels = channels
650
- self.netName = 'Unet3D'
650
+ self.netName = 'MGA_NET'
651
651
  def name(self):
652
- return 'unet3d'
652
+ return 'MGA_NET'
@@ -0,0 +1,258 @@
1
+ import numpy as np
2
+ import nibabel as nib
3
+ import SimpleITK as sitk
4
+ from skimage.measure import label as label_connector
5
+ __AUTHOR__ = 'Bahram Jafrasteh'
6
+ code_direction = (('L', 'R'), ('P', 'A'), ('I', 'S'))
7
+ def convert_to_ras(affine, target = "RAS"):
8
+ """
9
+ Args:
10
+ affine: affine matrix
11
+ target: target system
12
+
13
+ Returns:
14
+
15
+ """
16
+ from nibabel.orientations import aff2axcodes, axcodes2ornt, ornt_transform
17
+ orig_orient = nib.io_orientation(affine)
18
+ source_system = ''.join(list(aff2axcodes(affine, code_direction)))# get direction
19
+ target_orient = axcodes2ornt(target, code_direction)
20
+ transform = ornt_transform(orig_orient, target_orient)
21
+
22
+ return transform, source_system
23
+ def LargestCC(segmentation, connectivity=3):
24
+ """
25
+ Get largets connected components
26
+ """
27
+ if segmentation.ndim == 4:
28
+ segmentation = segmentation.squeeze(-1)
29
+ labels = label_connector(segmentation, connectivity=connectivity)
30
+ frequency = np.bincount(labels.flat)
31
+ return labels, frequency
32
+
33
+
34
+ def make_affine(simpleITKImage):
35
+ # https://niftynet.readthedocs.io/en/v0.2.1/_modules/niftynet/io/simple_itk_as_nibabel.html
36
+ # get affine transform in LPS
37
+ if simpleITKImage.GetDimension() == 4:
38
+ c = [simpleITKImage.TransformContinuousIndexToPhysicalPoint(p)
39
+ for p in ((1, 0, 0, 0),
40
+ (0, 1, 0, 0),
41
+ (0, 0, 1, 0),
42
+ (0, 0, 0, 0))]
43
+ c = np.array(c)
44
+ c = c[:, :-1]
45
+ elif simpleITKImage.GetDimension() == 3:
46
+ c = [simpleITKImage.TransformContinuousIndexToPhysicalPoint(p)
47
+ for p in ((1, 0, 0),
48
+ (0, 1, 0),
49
+ (0, 0, 1),
50
+ (0, 0, 0))]
51
+ c = np.array(c)
52
+ affine = np.concatenate([
53
+ np.concatenate([c[0:3] - c[3:], c[3:]], axis=0),
54
+ [[0.], [0.], [0.], [1.]]
55
+ ], axis=1)
56
+ affine = np.transpose(affine)
57
+ # convert to RAS to match nibabel
58
+ affine = np.matmul(np.diag([-1., -1., 1., 1.]), affine)
59
+ return affine
60
+
61
+ def read_sitk_as_nib(sitk_im):
62
+ return nib.Nifti1Image(sitk.GetArrayFromImage(sitk_im).transpose(),
63
+ make_affine(sitk_im), None)
64
+ def read_nib_as_sitk(image_nib, dtype=None):
65
+ # From https://github.com/gift-surg/PySiTK/blob/master/pysitk/simple_itk_helper.py
66
+ if dtype is None:
67
+ dtype = np.float32#image_nib.header["bitpix"].dtype
68
+ nda_nib = image_nib.get_fdata().astype(dtype)
69
+ nda_nib_shape = nda_nib.shape
70
+ nda = np.zeros((nda_nib_shape[2],
71
+ nda_nib_shape[1],
72
+ nda_nib_shape[0]),
73
+ dtype=dtype)
74
+
75
+ # Convert to (Simple)ITK data array format, i.e. reorder to
76
+ # z-y-x-components shape
77
+ for i in range(0, nda_nib_shape[2]):
78
+ for k in range(0, nda_nib_shape[0]):
79
+ nda[i, :, k] = nda_nib[k, :, i]
80
+ # Get SimpleITK image
81
+ vector_image_sitk = sitk.GetImageFromArray(nda)
82
+ # Update header from nibabel information
83
+ # (may introduce some header inaccuracies?)
84
+ R = np.array([
85
+ [-1, 0, 0],
86
+ [0, -1, 0],
87
+ [0, 0, 1]])
88
+ affine_nib = image_nib.affine.astype(np.float64)
89
+ R_nib = affine_nib[0:-1, 0:-1]
90
+
91
+ spacing_sitk = np.array(image_nib.header.get_zooms(), dtype=np.float64)
92
+ spacing_sitk = spacing_sitk[0:R_nib.shape[0]]
93
+ S_nib_inv = np.diag(1. / spacing_sitk)
94
+
95
+ direction_sitk = R.dot(R_nib).dot(S_nib_inv).flatten()
96
+
97
+ t_nib = affine_nib[0:-1, 3]
98
+ origin_sitk = R.dot(t_nib)
99
+
100
+ vector_image_sitk.SetSpacing(np.array(spacing_sitk).astype('double'))
101
+ vector_image_sitk.SetDirection(direction_sitk)
102
+ vector_image_sitk.SetOrigin(origin_sitk)
103
+ return vector_image_sitk
104
+ def resample_to_size(im, new_size, scale_factor=None,method='linear'):
105
+ """
106
+ Resample image to new size
107
+ """
108
+ original_image = read_nib_as_sitk(im)
109
+ # Get the current size of the image
110
+ size = original_image.GetSize()
111
+
112
+ # Calculate the scale factor for resizing
113
+ if scale_factor is None:
114
+ scale_factor = [(float(sz)/new_sz)*spc for sz, new_sz, spc in zip(size, new_size, original_image.GetSpacing())]
115
+
116
+ # Resample the image using the scale factor
117
+ resampler = sitk.ResampleImageFilter()
118
+ resampler.SetReferenceImage(original_image)
119
+ resampler.SetOutputSpacing(scale_factor)
120
+ resampler.SetSize([int(el) for el in new_size])
121
+
122
+ resampler.SetOutputOrigin(original_image.GetOrigin())
123
+ resampler.SetOutputDirection(original_image.GetDirection())
124
+
125
+ if method.lower() == 'linear':
126
+ resampler.SetInterpolator(sitk.sitkLinear) # You can choose different interpolators
127
+ else:
128
+ resampler.SetInterpolator(sitk.sitkBSpline) # You can choose different interpolators
129
+ # Perform resampling
130
+ resized_image = resampler.Execute(original_image)
131
+ #inverse_scale_factor = [s1/float(sz) for sz, s1 in zip(*[resized_image.GetSize(), size])]
132
+ return read_sitk_as_nib(resized_image)#, inverse_scale_factor, list(size)
133
+
134
+
135
+ def scalecrop(data, dst_min, dst_max, src_min, scale):
136
+ """
137
+ Function to crop the intensity ranges to specific min and max values
138
+ :param np.ndarray data: Image data (intensity values)
139
+ :param float dst_min: future minimal intensity value
140
+ :param float dst_max: future maximal intensity value
141
+ :param float src_min: minimal value to consider from source (crops below)
142
+ :param float scale: scale value by which source will be shifted
143
+ :return: np.ndarray data_new: scaled image data
144
+ """
145
+ data_new = dst_min + scale * (data - src_min)
146
+
147
+ # clip
148
+ data_new = np.clip(data_new, dst_min, dst_max)
149
+ #print("Output: min: " + format(data_new.min()) + " max: " + format(data_new.max()))
150
+
151
+ return data_new
152
+
153
+ def getscale(data, dst_min, dst_max, f_low=0.0, f_high=0.999):
154
+ """
155
+ Function to get offset and scale of image intensities to robustly rescale to range dst_min..dst_max.
156
+ Equivalent to how mri_convert conforms images.
157
+ :param np.ndarray data: image data (intensity values)
158
+ :param float dst_min: future minimal intensity value
159
+ :param float dst_max: future maximal intensity value
160
+ :param f_low: robust cropping at low end (0.0 no cropping)
161
+ :param f_high: robust cropping at higher end (0.999 crop one thousandths of high intensity voxels)
162
+ :return: float src_min: (adjusted) offset
163
+ :return: float scale: scale factor
164
+ """
165
+ # get min and max from source
166
+ src_min = np.min(data)
167
+ src_max = np.max(data)
168
+
169
+ #print("Input: min: " + format(src_min) + " max: " + format(src_max))
170
+
171
+ if f_low == 0.0 and f_high == 1.0:
172
+ return src_min, 1.0
173
+
174
+ # compute non-zeros and total vox num
175
+ nz = (np.abs(data) >= 1e-15).sum()
176
+ voxnum = data.shape[0] * data.shape[1] * data.shape[2]
177
+
178
+ # compute histogram
179
+ histosize = 1000
180
+ bin_size = (src_max - src_min) / histosize
181
+ hist, bin_edges = np.histogram(data, histosize)
182
+
183
+ # compute cummulative sum
184
+ cs = np.concatenate(([0], np.cumsum(hist)))
185
+
186
+ # get lower limit
187
+ nth = int(f_low * voxnum)
188
+ idx = np.where(cs < nth)
189
+
190
+ if len(idx[0]) > 0:
191
+ idx = idx[0][-1] + 1
192
+
193
+ else:
194
+ idx = 0
195
+
196
+ src_min = idx * bin_size + src_min
197
+
198
+ # print("bin min: "+format(idx)+" nth: "+format(nth)+" passed: "+format(cs[idx])+"\n")
199
+ # get upper limit
200
+ nth = voxnum - int((1.0 - f_high) * nz)
201
+ idx = np.where(cs >= nth)
202
+
203
+ if len(idx[0]) > 0:
204
+ idx = idx[0][0] - 2
205
+
206
+ else:
207
+ idx = 0
208
+ print('ERROR: rescale upper bound not found')
209
+
210
+ src_max = idx * bin_size + src_min
211
+ # print("bin max: "+format(idx)+" nth: "+format(nth)+" passed: "+format(voxnum-cs[idx])+"\n")
212
+
213
+ # scale
214
+ if src_min == src_max:
215
+ scale = 1.0
216
+
217
+ else:
218
+ scale = (dst_max - dst_min) / (src_max - src_min)
219
+
220
+ #print("rescale: min: " + format(src_min) + " max: " + format(src_max) + " scale: " + format(scale))
221
+
222
+ return src_min, scale
223
+
224
+ def normalize_mri(img):
225
+ # taken from npp
226
+ #https://github.com/Novestars/Neural_Pre_Processing/blob/master/nppy/models/utils.py
227
+ src_min, scale = getscale(img, 0, 255)
228
+ new_data = scalecrop(img, 0, 255, src_min, scale)
229
+ return new_data
230
+
231
+ def remove_zero(f_data, value=0):
232
+ """
233
+ Remove non segmented areas from image
234
+ :param f_data:
235
+ :param value:
236
+ :return:
237
+ """
238
+
239
+ xs, ys, zs = np.where(f_data > value) #find zero values
240
+ tol = 4
241
+
242
+ min_max = []
243
+ for x in [xs, ys, zs]:
244
+ minx = min(x)-tol if min(x)-tol>1 else min(x)
245
+ maxx = max(x) + tol if max(x) + tol < f_data.shape[0]-1 else max(x)
246
+ min_max.append([minx, maxx])
247
+ f_data = f_data[min_max[0][0]:min_max[0][1] + 1, min_max[1][0]:min_max[1][1] + 1, min_max[2][0]:min_max[2][1] + 1]
248
+
249
+ return f_data, min_max
250
+
251
+ def get_back_data(im, shape_initial, pad_zero, border_value):
252
+ """
253
+ Get data back to its original shape
254
+ """
255
+ im_fill = np.ones(shape_initial) * border_value
256
+ im_fill[pad_zero[0][0]:pad_zero[0][1] + 1, pad_zero[1][0]:pad_zero[1][1] + 1,
257
+ pad_zero[2][0]:pad_zero[2][1] + 1] = im
258
+ return im_fill
@@ -0,0 +1,134 @@
1
+ __AUTHOR__ = 'Bahram Jafrasteh'
2
+ from .model.mga_net import MGA_NET
3
+
4
+ import torch
5
+ import sys
6
+ import os
7
+ from model.utils import *
8
+ from scipy.ndimage import binary_fill_holes
9
+ import torch.nn.functional as F
10
+
11
+
12
+
13
+
14
+
15
+ ################## Loading model ################################
16
+ def build_model(model_path="MGA_NET.pth", device="cpu"):
17
+ model = MGA_NET(time_embed=True)
18
+ model.to(device)
19
+ if model_path is None:
20
+ model_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "MGA_NET.pth")
21
+ state_dict = torch.load(model_path, map_location=device)
22
+ model.load_state_dict(state_dict['model'], strict=True)
23
+ return model.eval()
24
+
25
+
26
+
27
+ ################## Loading data and data standardization ################################
28
+ def get_inference(model, imA, device, eco_mri=1, threshold=0.0, high_quality_rec=True):
29
+ time = torch.from_numpy(np.array(eco_mri)).unsqueeze(0).to(torch.float).to(device)
30
+
31
+ border_value = imA[0, 0, 0]
32
+ shape_initial = imA.shape
33
+ image_used, pad_zero = remove_zero(imA, border_value)
34
+
35
+ image_used = normalize_mri(image_used)/255.0
36
+ shape_zero = image_used.shape
37
+
38
+ target_shape = [128, 128, 128]
39
+ #image_used_1 = resample_to_size(nib.Nifti1Image(image_used, affine, header), new_size=target_shape,
40
+ # method='spline').get_fdata()
41
+ image_used_torch = torch.from_numpy(image_used)[None, None, ...].to(torch.float).to(device)
42
+ imB = F.interpolate(image_used_torch, size=target_shape, mode='trilinear', align_corners=False)
43
+
44
+
45
+ ################## Brain extraction and image reconstruction ################################
46
+ im_low = model.forward(imB, time)
47
+ im_mask_low, im_rec_low = im_low
48
+
49
+ if high_quality_rec:
50
+
51
+ target_shape = [192, 192, 192] # to create higher quality images
52
+ #image_used_2 = resample_to_size(nib.Nifti1Image(image_used, affine, header), new_size=target_shape,
53
+ # method='spline').get_fdata()
54
+ image_used_torch = torch.from_numpy(image_used)[None, None, ...].to(torch.float).to(device)
55
+ im_high_input = F.interpolate(image_used_torch, size=target_shape, mode='trilinear', align_corners=False)
56
+
57
+ #imA = torch.from_numpy(image_used_2).to(torch.float).unsqueeze(0).unsqueeze(0)
58
+ #imA = imA.to(device)
59
+ im_high = model.forward(im_high_input, time)
60
+
61
+ im_mask_high, im_rec_high = im_high
62
+
63
+
64
+ im_mask = im_mask_low.detach().cpu()
65
+ im_rec = im_rec_high.detach().cpu()
66
+ else:
67
+ im_mask = im_mask_low.detach().cpu()
68
+ im_rec = im_rec_low.detach().cpu()
69
+
70
+ ################## resmaple to the original size ################################
71
+ #im_mask = resample_to_size(nib.Nifti1Image(im_mask, affine, header), new_size=shape_zero,
72
+ # method='spline').get_fdata()
73
+ im_mask = F.interpolate(im_mask, size=shape_zero, mode='nearest')
74
+ im_rec = F.interpolate(im_rec, size=shape_zero, mode='trilinear', align_corners=False)
75
+ #im_rec = resample_to_size(nib.Nifti1Image(im_rec, affine, header), new_size=shape_zero,
76
+ # method='spline').get_fdata()
77
+ im_mask = im_mask.detach().squeeze().cpu().numpy()
78
+ im_rec = im_rec.detach().squeeze().cpu().numpy()
79
+
80
+ im_mask = get_back_data(im_mask, shape_initial, pad_zero, im_mask[0, 0, 0])
81
+ im_rec = get_back_data(im_rec, shape_initial, pad_zero, im_rec[0, 0, 0])
82
+
83
+
84
+ ind = im_mask >= threshold
85
+ im_mask[ind] = 0
86
+ im_mask[~ind] = 1
87
+
88
+ im_mask = binary_fill_holes(im_mask)
89
+ im_mask, labels_freq = LargestCC(im_mask, connectivity=1)
90
+ if len(labels_freq)>2:
91
+ ind_argmax = np.argmax(
92
+ [imA[im_mask == el].sum() for el in range(len(labels_freq)) if el != 0]) + 1
93
+ ind = im_mask != ind_argmax
94
+ im_mask[ind] = 0
95
+ im_mask[~ind] = 1
96
+ im_rec = normalize_mri(im_rec)
97
+
98
+ return im_rec, im_mask
99
+
100
+ def make_ras_image(imA):
101
+ transform, source = convert_to_ras(imA.affine, target='RAS')
102
+ if source != 'RAS':
103
+ imA = imA.as_reoriented(transform)
104
+ return imA
105
+ def main():
106
+ file_inp = sys.argv[1]
107
+ eco_mri = int(sys.argv[2]) # -1 for US and 1 for MRI
108
+ threshold = 0.0
109
+ if len(sys.argv) > 3:
110
+ threshold = float(sys.argv[3])
111
+ high_quality_rec = True # Network has been trained on 128x128x128 size image. However, it is possible to sample 192x192x192 images to get higher quality images
112
+ basen = os.path.basename(file_inp)
113
+ basen = basen[:basen.find('.nii')]
114
+
115
+ file_inp_mask = os.path.join(os.path.dirname(file_inp), basen + '_mask.nii.gz')
116
+ file_inp_rec = os.path.join(os.path.dirname(file_inp), basen + '_rec.nii.gz')
117
+ if torch.cuda.is_available():
118
+ # device = torch.device("cuda")
119
+ device = torch.device("cuda:0")
120
+ torch.cuda.set_device(0)
121
+ torch.backends.cudnn.benchmark = True
122
+ # else:
123
+ device = torch.device("cpu")
124
+ model = build_model("MGA_NET.pth", device)
125
+ imA = nib.load(file_inp)
126
+
127
+ imA = make_ras_image(imA)
128
+
129
+ affine = imA.affine
130
+ header = imA.header
131
+ imB, im_mask = get_inference(model, imA, device)
132
+
133
+ imB = nib.Nifti1Image(imB, affine, header).to_filename(file_inp_rec)
134
+ im_mask = nib.Nifti1Image(im_mask, affine, header).to_filename(file_inp_mask)