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
@@ -1,272 +0,0 @@
1
- import nibabel
2
- import torch
3
- from torch import nn
4
- import torch.nn.functional as F
5
- from pytorch_lightning import LightningModule, Trainer
6
- from melage.widgets.DeepLModels.NPP.models.losses import SSIM3D
7
- from einops import rearrange
8
- import numpy as np
9
-
10
-
11
- class FeedForward(nn.Module):
12
- def __init__(self, dim, hidden_dim, dropout = 0.):
13
- super().__init__()
14
- self.net = nn.Sequential(
15
- nn.Linear(dim, hidden_dim),
16
- nn.GELU(),
17
- nn.Dropout(dropout),
18
- nn.Linear(hidden_dim, dim),
19
- nn.Dropout(dropout)
20
- )
21
- def forward(self, x):
22
- return self.net(x)
23
-
24
-
25
- class Attention(nn.Module):
26
- def __init__(self, dim, heads = 8, dim_head = 64, dropout = 0.):
27
- super().__init__()
28
- inner_dim = dim_head * heads
29
- project_out = not (heads == 1 and dim_head == dim)
30
-
31
- self.heads = heads
32
- self.scale = dim_head ** -0.5
33
-
34
- self.attend = nn.Softmax(dim = -1)
35
- self.dropout = nn.Dropout(dropout)
36
-
37
- self.to_qkv = nn.Linear(dim, inner_dim * 3, bias = False)
38
-
39
- self.to_out = nn.Sequential(
40
- nn.Linear(inner_dim, dim),
41
- nn.Dropout(dropout)
42
- ) if project_out else nn.Identity()
43
-
44
- def forward(self, x):
45
- qkv = self.to_qkv(x).chunk(3, dim = -1)
46
- q, k, v = map(lambda t: rearrange(t, 'b n (h d) -> b h n d', h = self.heads), qkv)
47
-
48
- dots = torch.matmul(q, k.transpose(-1, -2)) * self.scale
49
-
50
- attn = self.attend(dots)
51
- attn = self.dropout(attn)
52
-
53
- out = torch.matmul(attn, v)
54
- out = rearrange(out, 'b h n d -> b n (h d)')
55
- return self.to_out(out)
56
-
57
- class Grad:
58
- """
59
- N-D gradient loss.
60
- """
61
-
62
- def __init__(self, penalty='l1', loss_mult=None):
63
- self.penalty = penalty
64
- self.loss_mult = loss_mult
65
-
66
- def __call__(self, y_pred):
67
- dy = torch.abs(y_pred[:, :, 1:, :, :] - y_pred[:, :, :-1, :, :])
68
- dx = torch.abs(y_pred[:, :, :, 1:, :] - y_pred[:, :, :, :-1, :])
69
- dz = torch.abs(y_pred[:, :, :, :, 1:] - y_pred[:, :, :, :, :-1])
70
-
71
- if self.penalty == 'l2':
72
- dy = dy * dy
73
- dx = dx * dx
74
- dz = dz * dz
75
-
76
- grad = torch.mean(dx) + torch.mean(dy) + torch.mean(dz)
77
-
78
- return grad
79
-
80
-
81
- class VGGBlock(nn.Module):
82
- def __init__(self, in_channels, middle_channels, out_channels,stride = 1,relu='lrelu'):
83
- super().__init__()
84
- if relu=='lrelu':
85
- self.relu = nn.LeakyReLU(inplace=True,negative_slope=0.01)
86
- else:
87
- self.relu = nn.ReLU(inplace=True)
88
-
89
- self.conv1 = nn.Conv3d(in_channels, middle_channels, 3, padding=1,stride=stride)
90
- self.bn1 = nn.InstanceNorm3d(middle_channels,affine=True)
91
- self.conv2 = nn.Conv3d(middle_channels, out_channels, 3, padding=1)
92
- self.bn2 = nn.InstanceNorm3d(out_channels,affine=True)
93
-
94
- def forward(self, x):
95
- out = self.conv1(x)
96
- out = self.bn1(out)
97
- out = self.relu(out)
98
-
99
- out = self.conv2(out)
100
- out = self.bn2(out)
101
- out = self.relu(out)
102
-
103
- return out
104
-
105
-
106
- class UNet(nn.Module):
107
- def __init__(self, input_channels=1, output_channels=1,):
108
- super().__init__()
109
- self._leaky_relu_alpha = 0.01
110
- nb_filter = [16, 32, 64, 128, 256,512]
111
- self.nb_filter = nb_filter
112
- self.pool = nn.MaxPool3d(2)
113
- self.up = nn.Upsample(scale_factor=(2,2,2), mode='trilinear', align_corners=True)
114
-
115
- self.conv0_0 = VGGBlock(input_channels, nb_filter[0], nb_filter[0])
116
- self.conv1_0 = VGGBlock(nb_filter[0], nb_filter[1], nb_filter[1],stride=2)
117
- self.conv2_0 = VGGBlock(nb_filter[1], nb_filter[2], nb_filter[2],stride=2)
118
- self.conv3_0 = VGGBlock(nb_filter[2], nb_filter[3], nb_filter[3],stride=2)
119
- self.conv4_0 = VGGBlock(nb_filter[3], nb_filter[4], nb_filter[4],stride=2)
120
- self.conv5_0 = VGGBlock(nb_filter[4], nb_filter[5], nb_filter[5],stride=2)
121
-
122
- self.conv4_1 = VGGBlock(nb_filter[4]+nb_filter[5], nb_filter[4], nb_filter[4])
123
- self.conv3_1 = VGGBlock(nb_filter[3]+nb_filter[4], nb_filter[3], nb_filter[3])
124
- self.conv2_1 = VGGBlock(nb_filter[2]+nb_filter[3], nb_filter[2], nb_filter[2])
125
- self.conv1_1 = VGGBlock(nb_filter[1]+nb_filter[2], nb_filter[1], nb_filter[1])
126
- self.conv0_1 = VGGBlock(nb_filter[0]+nb_filter[1], nb_filter[0], nb_filter[0])
127
-
128
- self.final = nn.Conv3d(nb_filter[0], output_channels, kernel_size=1)
129
- self.LN1 = nn.LayerNorm(nb_filter[5])
130
- self.LN2 = nn.LayerNorm(nb_filter[5])
131
- self.attention1 = Attention(nb_filter[5],heads = 8,dim_head=64)
132
- self.mlp1 = FeedForward(nb_filter[5],nb_filter[5])
133
- self.LN3 = nn.LayerNorm(nb_filter[5])
134
- self.LN4 = nn.LayerNorm(nb_filter[5])
135
- self.attention2 = Attention(nb_filter[5],heads = 8,dim_head=64)
136
- self.mlp2 = FeedForward(nb_filter[5],nb_filter[5])
137
-
138
- self.head = nn.Sequential(
139
- nn.Linear(nb_filter[5], nb_filter[5] // 2, bias=False),
140
- nn.ReLU(inplace=True),
141
- nn.Linear(nb_filter[5] // 2, 12, bias=False),
142
- nn.Tanh()
143
- )
144
- self.head2 = nn.Sequential(
145
- nn.Linear(1, nb_filter[5]),
146
- nn.ReLU(inplace=True),
147
- nn.Linear(nb_filter[5], nb_filter[5]*4),
148
- nn.ReLU(inplace=True),
149
- nn.Linear(nb_filter[5]*4, sum(np.array(nb_filter[:-1]))*2),
150
- )
151
- def forward(self, input,weight=None):
152
-
153
- input_downsampled = torch.nn.functional.interpolate(input, size=[128, 128, 128],
154
- mode='trilinear', align_corners=False)
155
-
156
- x0_0 = self.conv0_0(input_downsampled)
157
- x1_0 = self.conv1_0(x0_0)
158
- x2_0 = self.conv2_0(x1_0)
159
- x3_0 = self.conv3_0(x2_0)
160
- x4_0 = self.conv4_0(x3_0)
161
- x5_0 = self.conv5_0(x4_0)
162
-
163
- identity = torch.eye(3,4).repeat(x5_0.shape[0],1,1).type_as(x5_0)
164
- b,c,h,w,d = x5_0.shape
165
- x5_0_faltten = rearrange(x5_0,'b c h w d-> b (h w d) c')
166
- x5_0_faltten = self.attention1(self.LN1(x5_0_faltten)) + x5_0_faltten
167
- x5_0_faltten = self.mlp1(self.LN2(x5_0_faltten)) + x5_0_faltten
168
- x5_0_faltten = self.attention2(self.LN3(x5_0_faltten)) + x5_0_faltten
169
- x5_0_faltten = self.mlp2(self.LN4(x5_0_faltten)) + x5_0_faltten
170
-
171
- affine = self.head(x5_0_faltten.mean(dim=1)).reshape(-1, 3, 4) + identity
172
- x5_0 = rearrange(x5_0_faltten,'b (h w d) c -> b c h w d',h=h,w=w,d=d)
173
-
174
- x0_0_warp = torch.nn.functional.affine_grid(affine, input.size(), align_corners=False)
175
- mod = self.head2(torch.Tensor([weight]).type_as(x0_0_warp))
176
- mod = torch.split(mod,np.repeat(self.nb_filter[:-1],2).tolist(),0)
177
-
178
- x4_1 = self.conv4_1(torch.cat([x4_0, self.up(x5_0)], 1))*mod[-1].reshape(1,-1,1,1,1)+ mod[-2].reshape(1,-1,1,1,1)
179
- x3_1 = self.conv3_1(torch.cat([x3_0, self.up(x4_1)], 1))*mod[-3].reshape(1,-1,1,1,1) + mod[-4].reshape(1,-1,1,1,1)
180
- x2_1 = self.conv2_1(torch.cat([x2_0, self.up(x3_1)], 1))*mod[-5].reshape(1,-1,1,1,1)+ mod[-6].reshape(1,-1,1,1,1)
181
- x1_1 = self.conv1_1(torch.cat([x1_0, self.up(x2_1)], 1))*mod[-7].reshape(1,-1,1,1,1)+ mod[-8].reshape(1,-1,1,1,1)
182
- x0_1 = self.conv0_1(torch.cat([x0_0, self.up(x1_1)], 1))*mod[-9].reshape(1,-1,1,1,1)+ mod[-10].reshape(1,-1,1,1,1)
183
-
184
- output = self.final(x0_1)
185
- output_upsampled = torch.nn.functional.interpolate(output, size=[256, 256, 256],mode='trilinear', align_corners=False)
186
- norm = input*255 * output_upsampled
187
- mni_norm = torch.nn.functional.grid_sample(norm, x0_0_warp, align_corners=False)
188
-
189
- return mni_norm,norm,output_upsampled
190
- class NPP(LightningModule):
191
- def __init__(
192
- self,
193
- lr,
194
- ):
195
- super().__init__()
196
- self.save_hyperparameters()
197
-
198
- # networks
199
- self.generator = UNet()
200
-
201
- self.ssim7 = SSIM3D(window_size=5)
202
- self.mse = nn.L1Loss()
203
- self.grad = Grad('l1')
204
- self.automatic_optimization = False
205
-
206
-
207
- def forward(self, x,ind = None):
208
- return self.generator(x,ind)
209
-
210
- def training_step(self, batch, batch_idx):
211
- imgs, gts,brain_mask, ind = batch
212
- opt = self.optimizers()
213
- sch = self.lr_schedulers()
214
- # train generator
215
- # generate images
216
- weight = np.random.uniform(2,-4)
217
- self.generated_imgs = self(imgs,weight)
218
-
219
- # log sampled images
220
- loss_ssim_7 = -self.ssim7(self.generated_imgs[1], gts)
221
-
222
- grad_loss = self.grad(self.generated_imgs[0])
223
-
224
- loss = loss_ssim_7 + grad_loss*10**weight
225
- opt.zero_grad()
226
-
227
- self.manual_backward(loss)
228
- opt.step()
229
-
230
- if self.trainer.is_last_batch:
231
- sch.step()
232
-
233
- self.log("tv_train" , grad_loss,prog_bar=True, sync_dist=True)
234
- self.log("ssim_7_train" , loss_ssim_7,prog_bar=True, sync_dist=True)
235
- return loss
236
-
237
- def configure_optimizers(self):
238
- lr = self.hparams.lr
239
- my_list = []
240
- sparse_params = list(filter(lambda kv: kv[0] in my_list, self.generator.named_parameters()))
241
- sparse_params = [i[1] for i in sparse_params]
242
- base_params = list(filter(lambda kv: kv[0] not in my_list, self.generator.named_parameters()))
243
- base_params = [i[1] for i in base_params]
244
-
245
- base_params = [{"params": base_params},]
246
- sparse_params = [{"params": sparse_params},]
247
-
248
- optimizer = torch.optim.Adam(base_params, lr=lr)
249
-
250
- lr_scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=[30], gamma=0.5)
251
- return [optimizer], [lr_scheduler,]
252
-
253
- def validation_step(self, batch, batch_idx):
254
- imgs, gts,brain_mask,ind = batch
255
-
256
- # train generator
257
- self.generated_imgs = self(imgs,0.1)
258
-
259
- grad_loss = self.grad(self.generated_imgs[0])
260
- loss_ssim_7 = -self.ssim7(self.generated_imgs[1],gts)
261
- loss = grad_loss + loss_ssim_7
262
- self.log("tv_val", grad_loss,prog_bar=True, sync_dist=True )
263
- self.log("ssim_7_val", loss_ssim_7,prog_bar=True, sync_dist=True )
264
-
265
- return loss
266
-
267
-
268
-
269
-
270
-
271
-
272
-
@@ -1,303 +0,0 @@
1
- # Copyright (c) 2021-2022, InterDigital Communications, Inc
2
- # All rights reserved.
3
-
4
- # Redistribution and use in source and binary forms, with or without
5
- # modification, are permitted (subject to the limitations in the disclaimer
6
- # below) provided that the following conditions are met:
7
-
8
- # * Redistributions of source code must retain the above copyright notice,
9
- # this list of conditions and the following disclaimer.
10
- # * Redistributions in binary form must reproduce the above copyright notice,
11
- # this list of conditions and the following disclaimer in the documentation
12
- # and/or other materials provided with the distribution.
13
- # * Neither the name of InterDigital Communications, Inc nor the names of its
14
- # contributors may be used to endorse or promote products derived from this
15
- # software without specific prior written permission.
16
-
17
- # NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY
18
- # THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19
- # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
20
- # NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
21
- # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
22
- # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
- # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25
- # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26
- # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27
- # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28
- # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
-
30
- import torch
31
- import torch.nn as nn
32
- import torch.nn.functional as F
33
- import numpy as np
34
-
35
- def find_named_module(module, query):
36
- """Helper function to find a named module. Returns a `nn.Module` or `None`
37
-
38
- Args:
39
- module (nn.Module): the root module
40
- query (str): the module name to find
41
-
42
- Returns:
43
- nn.Module or None
44
- """
45
-
46
- return next((m for n, m in module.named_modules() if n == query), None)
47
-
48
-
49
- def find_named_buffer(module, query):
50
- """Helper function to find a named buffer. Returns a `torch.Tensor` or `None`
51
-
52
- Args:
53
- module (nn.Module): the root module
54
- query (str): the buffer name to find
55
-
56
- Returns:
57
- torch.Tensor or None
58
- """
59
- return next((b for n, b in module.named_buffers() if n == query), None)
60
-
61
-
62
- def _update_registered_buffer(
63
- module,
64
- buffer_name,
65
- state_dict_key,
66
- state_dict,
67
- policy="resize_if_empty",
68
- dtype=torch.int,
69
- ):
70
- new_size = state_dict[state_dict_key].size()
71
- registered_buf = find_named_buffer(module, buffer_name)
72
-
73
- if policy in ("resize_if_empty", "resize"):
74
- if registered_buf is None:
75
- raise RuntimeError(f'buffer "{buffer_name}" was not registered')
76
-
77
- if policy == "resize" or registered_buf.numel() == 0:
78
- registered_buf.resize_(new_size)
79
-
80
- elif policy == "register":
81
- if registered_buf is not None:
82
- raise RuntimeError(f'buffer "{buffer_name}" was already registered')
83
-
84
- module.register_buffer(buffer_name, torch.empty(new_size, dtype=dtype).fill_(0))
85
-
86
- else:
87
- raise ValueError(f'Invalid policy "{policy}"')
88
-
89
-
90
- def update_registered_buffers(
91
- module,
92
- module_name,
93
- buffer_names,
94
- state_dict,
95
- policy="resize_if_empty",
96
- dtype=torch.int,
97
- ):
98
- """Update the registered buffers in a module according to the tensors sized
99
- in a state_dict.
100
-
101
- (There's no way in torch to directly load a buffer with a dynamic size)
102
-
103
- Args:
104
- module (nn.Module): the module
105
- module_name (str): module name in the state dict
106
- buffer_names (list(str)): list of the buffer names to resize in the module
107
- state_dict (dict): the state dict
108
- policy (str): Update policy, choose from
109
- ('resize_if_empty', 'resize', 'register')
110
- dtype (dtype): Type of buffer to be registered (when policy is 'register')
111
- """
112
- valid_buffer_names = [n for n, _ in module.named_buffers()]
113
- for buffer_name in buffer_names:
114
- if buffer_name not in valid_buffer_names:
115
- raise ValueError(f'Invalid buffer name "{buffer_name}"')
116
-
117
- for buffer_name in buffer_names:
118
- _update_registered_buffer(
119
- module,
120
- buffer_name,
121
- f"{module_name}.{buffer_name}",
122
- state_dict,
123
- policy,
124
- dtype,
125
- )
126
-
127
-
128
- def conv(in_channels, out_channels, kernel_size=5, stride=2):
129
- return nn.Conv2d(
130
- in_channels,
131
- out_channels,
132
- kernel_size=kernel_size,
133
- stride=stride,
134
- padding=kernel_size // 2,
135
- )
136
-
137
-
138
- def deconv(in_channels, out_channels, kernel_size=5, stride=2):
139
- return nn.ConvTranspose2d(
140
- in_channels,
141
- out_channels,
142
- kernel_size=kernel_size,
143
- stride=stride,
144
- output_padding=stride - 1,
145
- padding=kernel_size // 2,
146
- )
147
-
148
-
149
- def quantize_ste(x):
150
- """Differentiable quantization via the Straight-Through-Estimator."""
151
- # STE (straight-through estimator) trick: x_hard - x_soft.detach() + x_soft
152
- return (torch.round(x) - x).detach() + x
153
-
154
-
155
- def gaussian_kernel1d(
156
- kernel_size: int, sigma: float, device: torch.device, dtype: torch.dtype
157
- ):
158
- """1D Gaussian kernel."""
159
- khalf = (kernel_size - 1) / 2.0
160
- x = torch.linspace(-khalf, khalf, steps=kernel_size, dtype=dtype, device=device)
161
- pdf = torch.exp(-0.5 * (x / sigma).pow(2))
162
- return pdf / pdf.sum()
163
-
164
-
165
- def gaussian_kernel2d(
166
- kernel_size: int, sigma: float, device: torch.device, dtype: torch.dtype
167
- ):
168
- """2D Gaussian kernel."""
169
- kernel = gaussian_kernel1d(kernel_size, sigma, device, dtype)
170
- return torch.mm(kernel[:, None], kernel[None, :])
171
-
172
-
173
- def gaussian_blur(x, kernel=None, kernel_size=None, sigma=None):
174
- """Apply a 2D gaussian blur on a given image tensor."""
175
- if kernel is None:
176
- if kernel_size is None or sigma is None:
177
- raise RuntimeError("Missing kernel_size or sigma parameters")
178
- dtype = x.dtype if torch.is_floating_point(x) else torch.float32
179
- device = x.device
180
- kernel = gaussian_kernel2d(kernel_size, sigma, device, dtype)
181
-
182
- padding = kernel.size(0) // 2
183
- x = F.pad(x, (padding, padding, padding, padding), mode="replicate")
184
- x = torch.nn.functional.conv2d(
185
- x,
186
- kernel.expand(x.size(1), 1, kernel.size(0), kernel.size(1)),
187
- groups=x.size(1),
188
- )
189
- return x
190
-
191
-
192
- def meshgrid2d(N: int, C: int, H: int, W: int, device: torch.device):
193
- """Create a 2D meshgrid for interpolation."""
194
- theta = torch.eye(2, 3, device=device).unsqueeze(0).expand(N, 2, 3)
195
- return F.affine_grid(theta, (N, C, H, W), align_corners=False)
196
-
197
-
198
-
199
-
200
- def getscale(data, dst_min, dst_max, f_low=0.0, f_high=0.999):
201
- """
202
- Function to get offset and scale of image intensities to robustly rescale to range dst_min..dst_max.
203
- Equivalent to how mri_convert conforms images.
204
- :param np.ndarray data: image data (intensity values)
205
- :param float dst_min: future minimal intensity value
206
- :param float dst_max: future maximal intensity value
207
- :param f_low: robust cropping at low end (0.0 no cropping)
208
- :param f_high: robust cropping at higher end (0.999 crop one thousandths of high intensity voxels)
209
- :return: float src_min: (adjusted) offset
210
- :return: float scale: scale factor
211
- """
212
- # get min and max from source
213
- src_min = np.min(data)
214
- src_max = np.max(data)
215
-
216
- print("Input: min: " + format(src_min) + " max: " + format(src_max))
217
-
218
- if f_low == 0.0 and f_high == 1.0:
219
- return src_min, 1.0
220
-
221
- # compute non-zeros and total vox num
222
- nz = (np.abs(data) >= 1e-15).sum()
223
- voxnum = data.shape[0] * data.shape[1] * data.shape[2]
224
-
225
- # compute histogram
226
- histosize = 1000
227
- bin_size = (src_max - src_min) / histosize
228
- hist, bin_edges = np.histogram(data, histosize)
229
-
230
- # compute cummulative sum
231
- cs = np.concatenate(([0], np.cumsum(hist)))
232
-
233
- # get lower limit
234
- nth = int(f_low * voxnum)
235
- idx = np.where(cs < nth)
236
-
237
- if len(idx[0]) > 0:
238
- idx = idx[0][-1] + 1
239
-
240
- else:
241
- idx = 0
242
-
243
- src_min = idx * bin_size + src_min
244
-
245
- # print("bin min: "+format(idx)+" nth: "+format(nth)+" passed: "+format(cs[idx])+"\n")
246
- # get upper limit
247
- nth = voxnum - int((1.0 - f_high) * nz)
248
- idx = np.where(cs >= nth)
249
-
250
- if len(idx[0]) > 0:
251
- idx = idx[0][0] - 2
252
-
253
- else:
254
- print('ERROR: rescale upper bound not found')
255
-
256
- src_max = idx * bin_size + src_min
257
- # print("bin max: "+format(idx)+" nth: "+format(nth)+" passed: "+format(voxnum-cs[idx])+"\n")
258
-
259
- # scale
260
- if src_min == src_max:
261
- scale = 1.0
262
-
263
- else:
264
- scale = (dst_max - dst_min) / (src_max - src_min)
265
-
266
- print("rescale: min: " + format(src_min) + " max: " + format(src_max) + " scale: " + format(scale))
267
-
268
- return src_min, scale
269
-
270
-
271
-
272
- def scalecrop(data, dst_min, dst_max, src_min, scale):
273
- """
274
- Function to crop the intensity ranges to specific min and max values
275
- :param np.ndarray data: Image data (intensity values)
276
- :param float dst_min: future minimal intensity value
277
- :param float dst_max: future maximal intensity value
278
- :param float src_min: minimal value to consider from source (crops below)
279
- :param float scale: scale value by which source will be shifted
280
- :return: np.ndarray data_new: scaled image data
281
- """
282
- data_new = dst_min + scale * (data - src_min)
283
-
284
- # clip
285
- data_new = np.clip(data_new, dst_min, dst_max)
286
- print("Output: min: " + format(data_new.min()) + " max: " + format(data_new.max()))
287
-
288
- return data_new
289
-
290
-
291
- def normalize(img):
292
- src_min, scale = getscale(img.data, 0, 255)
293
-
294
- if not img.data.dtype == np.dtype(np.uint8):
295
- new_data = scalecrop(img.data, 0, 255, src_min, scale)
296
- else:
297
- new_data = img.data
298
-
299
- new_img = img
300
- new_img.data = new_data/255
301
-
302
- return new_img
303
-
@@ -1,116 +0,0 @@
1
- import os
2
- import sys
3
- import torch
4
- import torch
5
- import torch.nn as nn
6
- import numpy as np
7
- import argparse
8
- import surfa as sf
9
- import scipy.ndimage
10
- from models.model import UNet
11
- from models.utils import normalize
12
-
13
- description = '''
14
- Neural Pre-processing (NPP) converts Head MRI images
15
- to an intensity-normalized, skull-stripped brain in a standard coordi-
16
- nate space. If you use NPP in your analysis, please cite:
17
- '''
18
-
19
- # os.system(f'python npp.py -i {inputfname} -o {outputdir}')
20
-
21
- # parse command line
22
- parser = argparse.ArgumentParser(description=description)
23
- parser.add_argument('-i', '--image', metavar='file', required=True, help='Input image to pre-processing.')
24
- parser.add_argument('-o', '--out', metavar='file', help='Save stripped image to path.')
25
- parser.add_argument('-w', '--weight', metavar='float', help='Smoothness of intensity normalization mapping. The range of smoothness is [-3,2],'
26
- ' where a larger value implies a higher degree of smoothing',default =-1)
27
- parser.add_argument('-g', '--gpu', action='store_true', help='Use the GPU.')
28
-
29
- if len(sys.argv) == 1:
30
- parser.print_help()
31
- exit(1)
32
-
33
- args = parser.parse_args()
34
-
35
- # sanity check on the inputs
36
- if not args.out:
37
- sf.system.fatal('Must provide at least --out output flags.')
38
- elif not os.path.exists(os.path.dirname(args.out)):
39
- sf.system.fatal('Output directory does not exist.')
40
-
41
- # check args.weight is in the range and float
42
- if args.weight:
43
- args.weight = float(args.weight)
44
- if args.weight < -3 or args.weight > 2:
45
- sf.system.fatal('The range of smoothness should within [-3,2], where a larger value implies a higher degree of smoothing')
46
-
47
- # necessary for speed gains (I think)
48
- torch.backends.cudnn.benchmark = True
49
- torch.backends.cudnn.deterministic = True
50
-
51
- # configure GPU device
52
- if args.gpu:
53
- os.environ['CUDA_VISIBLE_DEVICES'] = '0'
54
- device = torch.device('cuda')
55
- device_name = 'GPU'
56
- else:
57
- os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
58
- device = torch.device('cpu')
59
- device_name = 'CPU'
60
-
61
- # configure model
62
- print(f'Configuring model on the {device_name}')
63
-
64
-
65
- with torch.no_grad():
66
- model = UNet()
67
- model.to(device)
68
- model.eval()
69
-
70
-
71
- version = '1'
72
- print(f'Running Neural Pre-processing model version {version}')
73
- cwd = os.getcwd()
74
- modelfile = os.path.join(cwd,'models/checkpoints', f'npp_v{version}.pth')
75
- checkpoint = torch.load(modelfile, map_location=device)
76
-
77
- model.load_state_dict(checkpoint)
78
-
79
- # load input volume
80
- image = sf.load_volume(args.image)
81
- print(f'Input image read from: {args.image}')
82
-
83
- # frame check
84
- if image.nframes > 1:
85
- sf.system.fatal('Input image cannot have more than 1 frame')
86
-
87
- #i normalize image to [0, 255] and to [0, 1]
88
- image = normalize(image)
89
-
90
- # conform image and fit to shape with factors of 64
91
- conformed = image.conform(voxsize=1.0, dtype='float32',shape=(256,256,256), method='nearest', orientation='LIA')
92
-
93
- # predict the surface distance transform
94
- with torch.no_grad():
95
- input_tensor = torch.from_numpy(conformed.data[np.newaxis, np.newaxis]).to(device)
96
- output = model(input_tensor,args.weight)
97
- mni_norm = output[0].cpu().numpy().squeeze().astype(np.int16)
98
- norm = output[1].cpu().numpy().squeeze().astype(np.int16)
99
- scalar_field = output[2].cpu().numpy().squeeze().astype(np.int16)
100
-
101
- # unconform the sdt and extract mask
102
- mni_norm = conformed.new(mni_norm)#.resample_like(image,method='nearest', fill=0)
103
- norm = conformed.new(norm)#.resample_like(image, method='nearest',fill=0)
104
- scalar_field = conformed.new(scalar_field)#.resample_like(image, method='nearest',fill=0)
105
-
106
- # write the masked output
107
- if args.out:
108
- filename = os.path.basename(args.image)
109
- filename = filename.split('.')[0]
110
- mni_norm.save(os.path.join(args.out,filename+'_mni_norm.nii.gz'))
111
- norm.save(os.path.join(args.out,filename+'_norm.nii.gz'))
112
- scalar_field.save(os.path.join(args.out,filename+'_scalar_field.nii.gz'))
113
-
114
- print(f'Results saved to: {args.out}')
115
-
116
- print('If you use Neural Pre-processing in your analysis, please cite:')
@@ -1,8 +0,0 @@
1
- torchio==0.18.63
2
- einops==0.4.0
3
- nibabel==3.2.1
4
- numpy==1.24.2
5
- pytorch_lightning==1.5.10
6
- torch==1.10.2
7
- SimpleITK==2.2.1
8
- surfa==0.4.2