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.
- assets/copyright.png +0 -0
- assets/resource/color/FreeSurferColorLUT.txt +2006 -0
- assets/resource/color/LUT_30.txt +31 -0
- assets/resource/color/SynthSeg.txt +34 -0
- assets/resource/color/lut_prostate.txt +20 -0
- assets/resource/horizontalview.png +0 -0
- assets/resource/main.ico +0 -0
- assets/resource/theme/create_ticks.py +85 -0
- assets/resource/theme/rc/checkbox_checked.png +0 -0
- assets/resource/theme/rc/checkbox_checked@2x.png +0 -0
- assets/resource/theme/rc/checkbox_checked_disabled.png +0 -0
- assets/resource/theme/rc/checkbox_checked_disabled@2x.png +0 -0
- assets/resource/theme/rc/checkbox_checked_focus.png +0 -0
- assets/resource/theme/rc/checkbox_checked_focus@2x.png +0 -0
- assets/resource/theme/rc/checkbox_checked_pressed.png +0 -0
- assets/resource/theme/rc/checkbox_checked_pressed@2x.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate@2x.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_disabled.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_disabled@2x.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_focus.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_focus@2x.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_pressed.png +0 -0
- assets/resource/theme/rc/checkbox_indeterminate_pressed@2x.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked@2x.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_disabled.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_disabled@2x.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_focus.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_focus@2x.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_pressed.png +0 -0
- assets/resource/theme/rc/checkbox_unchecked_pressed@2x.png +0 -0
- assets/resource/verticalview.png +0 -0
- assets/resource/zoom_in.png +0 -0
- assets/resource/zoom_neutral (copy).png +0 -0
- assets/resource/zoom_neutral.png +0 -0
- assets/resource/zoom_out.png +0 -0
- data/MNI/mni_icbm152_t1_tal_nlin_sym_09a.nii +0 -0
- data/MNI/mni_icbm152_t1_tal_nlin_sym_09a_masked.nii.gz +0 -0
- data/MNI/mni_icbm152_t1_tal_nlin_sym_09a_seg.nii.gz +0 -0
- docs/manual_images/3D_rightc.png +0 -0
- docs/manual_images/3D_rightc_goto.png +0 -0
- docs/manual_images/3D_rightc_paint.png +0 -0
- docs/manual_images/3D_rightc_paint_draw1.png +0 -0
- docs/manual_images/3D_rightc_paint_draw2.png +0 -0
- docs/manual_images/3D_rightc_paint_render.png +0 -0
- docs/manual_images/3D_rightc_paint_render2.png +0 -0
- docs/manual_images/3D_rightc_paint_render3.png +0 -0
- docs/manual_images/3D_rightc_paint_render4.png +0 -0
- docs/manual_images/3D_rightc_paint_render5.png +0 -0
- docs/manual_images/3D_rightc_paint_render6.png +0 -0
- docs/manual_images/3D_rightc_seg.png +0 -0
- docs/manual_images/exit_toolbar.png +0 -0
- docs/manual_images/load_image_file.png +0 -0
- docs/manual_images/load_image_file_openp.png +0 -0
- docs/manual_images/main_page.png +0 -0
- docs/manual_images/menu_file.png +0 -0
- docs/manual_images/menu_file_export.png +0 -0
- docs/manual_images/menu_file_import.png +0 -0
- docs/manual_images/menu_file_settings.png +0 -0
- docs/manual_images/menu_file_ss.png +0 -0
- docs/manual_images/open_save_load.png +0 -0
- docs/manual_images/panning_toolbar.png +0 -0
- docs/manual_images/segmentation_toolbar.png +0 -0
- docs/manual_images/tab_mri.png +0 -0
- docs/manual_images/tab_us.png +0 -0
- docs/manual_images/tabs.png +0 -0
- docs/manual_images/toolbar_tools.png +0 -0
- docs/manual_images/tools_basic.png +0 -0
- docs/manual_images/tools_bet.png +0 -0
- docs/manual_images/tools_cs.png +0 -0
- docs/manual_images/tools_deepbet.png +0 -0
- docs/manual_images/tools_imageinfo.png +0 -0
- docs/manual_images/tools_maskO.png +0 -0
- docs/manual_images/tools_masking.png +0 -0
- docs/manual_images/tools_n4b.png +0 -0
- docs/manual_images/tools_resize.png +0 -0
- docs/manual_images/tools_ruler.png +0 -0
- docs/manual_images/tools_seg.png +0 -0
- docs/manual_images/tools_threshold.png +0 -0
- docs/manual_images/tools_tools.png +0 -0
- docs/manual_images/widget_color.png +0 -0
- docs/manual_images/widget_color_add.png +0 -0
- docs/manual_images/widget_color_add2.png +0 -0
- docs/manual_images/widget_color_additional.png +0 -0
- docs/manual_images/widget_images.png +0 -0
- docs/manual_images/widget_images2.png +0 -0
- docs/manual_images/widget_images3.png +0 -0
- docs/manual_images/widget_marker.png +0 -0
- docs/manual_images/widget_mri.png +0 -0
- docs/manual_images/widget_mri2.png +0 -0
- docs/manual_images/widget_segintensity.png +0 -0
- docs/manual_images/widget_tab_mutualview.png +0 -0
- docs/manual_images/widget_tab_mutualview2.png +0 -0
- docs/manual_images/widget_table.png +0 -0
- docs/manual_images/widget_table2.png +0 -0
- docs/manual_images/widget_us.png +0 -0
- melage/__init__.py +1 -1
- melage/config/__init__.py +100 -0
- melage/core/Registration/registration.py +54 -0
- melage/{utils/readData.py → core/io.py} +12 -4
- melage/{widgets/melageAbout.py → dialogs/AboutDialog.py} +1 -1
- melage/dialogs/MaskOperationsDialog.py +146 -0
- melage/dialogs/MaskingDialog.py +139 -0
- melage/dialogs/RegistrationDialog.py +311 -0
- melage/{widgets/ImageThresholding.py → dialogs/ThresholdingDialog.py} +2 -2
- melage/dialogs/TransformationDialog.py +275 -0
- melage/dialogs/__init__.py +9 -0
- melage/dialogs/dynamic_gui.py +327 -0
- melage/{widgets/fileDialog_widget.py → dialogs/helpers/FileDialog.py} +226 -1
- melage/dialogs/helpers/__init__.py +5 -0
- melage/main.py +13 -13
- melage/{widgets/mainwindow_widget.py → mainwindow_widget.py} +1434 -1408
- melage/plugins/N4_bias/N4.py +115 -0
- melage/plugins/N4_bias/N4_schema.py +40 -0
- melage/plugins/N4_bias/main/utils.py +46 -0
- melage/plugins/__init__.py +2 -0
- melage/plugins/bet/bet.py +176 -0
- melage/plugins/bet/bet_schema.py +73 -0
- melage/{widgets/brain_extraction.py → plugins/bet/main/BET.py} +51 -316
- melage/plugins/change_coord/change_coord.py +197 -0
- melage/plugins/change_coord/change_coord_schema.py +31 -0
- melage/plugins/change_coord/main/utils.py +15 -0
- melage/{widgets/Segmentation → plugins/esfcm/main}/FCM.py +3 -5
- melage/plugins/esfcm/main/test.py +57 -0
- melage/{widgets/Segmentation → plugins/esfcm/main}/utils.py +20 -0
- melage/plugins/esfcm/tissue_segmentation.py +124 -0
- melage/plugins/esfcm/tissue_segmentation_schema.py +33 -0
- melage/plugins/masking_operation/mo.py +115 -0
- melage/plugins/masking_operation/mo_schema.py +33 -0
- melage/plugins/mga_net/MGA_Net.py +145 -0
- melage/plugins/mga_net/MGA_Net_schema.py +29 -0
- melage/plugins/mga_net/main/figures/Network.txt +1 -0
- melage/{widgets/DeepLModels/new_unet.py → plugins/mga_net/main/model/mga_net.py} +3 -3
- melage/plugins/mga_net/main/model/utils.py +258 -0
- melage/plugins/mga_net/main/test_mgaNet.py +134 -0
- melage/plugins/resize/resize.py +136 -0
- melage/plugins/resize/resize_schema.py +41 -0
- melage/plugins/ui_helpers.py +144 -0
- melage/plugins/warpseg/WarpSeg.py +195 -0
- melage/plugins/warpseg/WarpSeg_schema.py +41 -0
- melage/plugins/warpseg/__init__.py +2 -0
- melage/plugins/warpseg/warpseg_main/data_reader/DDSet.py +303 -0
- melage/plugins/warpseg/warpseg_main/data_reader/DDSetSeg.py +279 -0
- melage/plugins/warpseg/warpseg_main/data_reader/__init__.py +60 -0
- melage/plugins/warpseg/warpseg_main/data_reader/baseData.py +18 -0
- melage/plugins/warpseg/warpseg_main/data_reader/utils.py +267 -0
- melage/plugins/warpseg/warpseg_main/dist_utils.py +18 -0
- melage/plugins/warpseg/warpseg_main/requirements.txt +10 -0
- melage/plugins/warpseg/warpseg_main/test.py +272 -0
- melage/plugins/warpseg/warpseg_main/train.py +432 -0
- melage/plugins/warpseg/warpseg_main/train_reg.py +373 -0
- melage/plugins/warpseg/warpseg_main/verify_post_process.py +73 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/__init__.py +45 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/py/__init__.py +1 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/py/utils.py +99 -0
- melage/{widgets/Synthstrip.py → plugins/warpseg/warpseg_main/voxelmorph/torch/Unet.py} +71 -51
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/__init__.py +4 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/layers.py +97 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/losses.py +462 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/modelio.py +77 -0
- melage/{widgets/DeepLModels/InfantSegment/Unet.py → plugins/warpseg/warpseg_main/voxelmorph/torch/multi_stage_net.py} +76 -52
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/networks.py +308 -0
- melage/plugins/warpseg/warpseg_main/voxelmorph/torch/utils.py +470 -0
- melage/{utils/DispalyIm.py → rendering/DisplayIm.py} +67 -79
- melage/{utils → rendering}/glScientific.py +1 -1
- melage/utils/__init__.py +1 -0
- melage/utils/utils.py +343 -196
- melage/widgets/{dockWidgets.py → DockWidgets.py} +123 -55
- melage/widgets/SettingsWidget.py +98 -0
- melage/widgets/__init__.py +49 -0
- melage/widgets/openglWidgets.py +344 -156
- melage/widgets/openglWidgets_bu.py +645 -0
- melage/widgets/plugin_manager.py +62 -0
- melage-1.0.0.dist-info/METADATA +953 -0
- melage-1.0.0.dist-info/RECORD +571 -0
- melage-1.0.0.dist-info/entry_points.txt +2 -0
- melage-1.0.0.dist-info/top_level.txt +4 -0
- melage/requirements22.txt +0 -25
- melage/requirements_old.txt +0 -28
- melage/resource/theme/rc/checkbox_checked.png +0 -0
- melage/resource/theme/rc/checkbox_checked@2x.png +0 -0
- melage/resource/theme/rc/checkbox_checked@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_checked@2x000.png.png +0 -0
- melage/resource/theme/rc/checkbox_checked_disabled.png +0 -0
- melage/resource/theme/rc/checkbox_checked_disabled0.png +0 -0
- melage/resource/theme/rc/checkbox_checked_disabled@2x.png +0 -0
- melage/resource/theme/rc/checkbox_checked_disabled@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_checked_focus.png +0 -0
- melage/resource/theme/rc/checkbox_checked_focus0.png +0 -0
- melage/resource/theme/rc/checkbox_checked_focus@2x.png +0 -0
- melage/resource/theme/rc/checkbox_checked_focus@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_checked_pressed.png +0 -0
- melage/resource/theme/rc/checkbox_checked_pressed0.png +0 -0
- melage/resource/theme/rc/checkbox_checked_pressed@2x.png +0 -0
- melage/resource/theme/rc/checkbox_checked_pressed@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate@2x.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_disabled.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_disabled@2x.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_focus.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_focus@2x.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_pressed.png +0 -0
- melage/resource/theme/rc/checkbox_indeterminate_pressed@2x.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked@2x.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked@2x00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled@2x.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_disabled@2x00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus@2x.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_focus@2x00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed00.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed@2x.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed@2x0.png +0 -0
- melage/resource/theme/rc/checkbox_unchecked_pressed@2x00.png +0 -0
- melage/some_notes.txt +0 -3
- melage/utils/GMM.py +0 -720
- melage/utils/Shaders_bu.py +0 -314
- melage/utils/__init__0.py +0 -7
- melage/utils/glScientific_bc.py +0 -1585
- melage/utils/registration.py +0 -512
- melage/utils/source_folder.py +0 -18
- melage/version.txt +0 -1
- melage/widgets/ApplyMask.py +0 -212
- melage/widgets/ChangeSystem.py +0 -152
- melage/widgets/DeepLModels/NPP/dataset/mri_dataset_affine.py +0 -149
- melage/widgets/DeepLModels/NPP/models/checkpoints/npp_v1.pth.py +0 -0
- melage/widgets/DeepLModels/NPP/models/losses.py +0 -146
- melage/widgets/DeepLModels/NPP/models/model.py +0 -272
- melage/widgets/DeepLModels/NPP/models/utils.py +0 -303
- melage/widgets/DeepLModels/NPP/npp.py +0 -116
- melage/widgets/DeepLModels/NPP/requirements.txt +0 -8
- melage/widgets/DeepLModels/NPP/train/train.py +0 -116
- melage/widgets/DeepLModels/Unet3DAtt.py +0 -657
- melage/widgets/DeepLModels/Unet3D_basic.py +0 -648
- melage/widgets/DeepLModels/new_unet_old.py +0 -639
- melage/widgets/DeepLModels/new_unet_old2.py +0 -658
- melage/widgets/MaskOperations.py +0 -147
- melage/widgets/N4Dialog.py +0 -241
- melage/widgets/Segmentation/__init__.py +0 -588
- melage/widgets/SemiAutoSeg.py +0 -666
- melage/widgets/__init__0.py +0 -5
- melage/widgets/about.py +0 -246
- melage/widgets/activator.py +0 -147
- melage/widgets/be_dl.py +0 -409
- melage/widgets/be_dl_unet3d.py +0 -441
- melage/widgets/brain_extraction_dl.py +0 -887
- melage/widgets/brain_extraction_dl_bu.py +0 -869
- melage/widgets/registrationWidget.py +0 -342
- melage/widgets/settings_widget.py +0 -77
- melage/widgets/tranformationWidget.py +0 -275
- melage-0.0.65.dist-info/METADATA +0 -742
- melage-0.0.65.dist-info/RECORD +0 -501
- melage-0.0.65.dist-info/entry_points.txt +0 -2
- melage-0.0.65.dist-info/top_level.txt +0 -1
- {melage/resource → assets}/main.ico +0 -0
- {melage → assets}/resource/0circle.png +0 -0
- {melage → assets}/resource/0circle_faded.png +0 -0
- {melage → assets}/resource/3d.png +0 -0
- {melage → assets}/resource/3d.psd +0 -0
- {melage → assets}/resource/3dFaded.png +0 -0
- {melage → assets}/resource/Eraser.png +0 -0
- {melage → assets}/resource/EraserFaded.png +0 -0
- {melage → assets}/resource/EraserX.png +0 -0
- {melage → assets}/resource/EraserXFaded.png +0 -0
- {melage → assets}/resource/Eraser_icon.svg +0 -0
- {melage → assets}/resource/Hand.png +0 -0
- {melage → assets}/resource/HandIcons_0.png +0 -0
- {melage → assets}/resource/Hand_IX.png +0 -0
- {melage → assets}/resource/Hand_IXFaded.png +0 -0
- {melage → assets}/resource/Handsqueezed.png +0 -0
- {melage → assets}/resource/Handwriting (copy).png +0 -0
- {melage → assets}/resource/Handwriting.png +0 -0
- {melage → assets}/resource/HandwritingMinus.png +0 -0
- {melage → assets}/resource/HandwritingMinusX.png +0 -0
- {melage → assets}/resource/HandwritingPlus.png +0 -0
- {melage → assets}/resource/HandwritingPlusX.png +0 -0
- {melage → assets}/resource/Move_icon.svg +0 -0
- {melage → assets}/resource/PngItem_2422924.png +0 -0
- {melage → assets}/resource/about.png +0 -0
- {melage → assets}/resource/about_logo.png +0 -0
- {melage → assets}/resource/about_logo0.png +0 -0
- {melage → assets}/resource/action_check.png +0 -0
- {melage → assets}/resource/action_check_OFF.png +0 -0
- {melage → assets}/resource/arrow).png +0 -0
- {melage → assets}/resource/arrow.png +0 -0
- {melage → assets}/resource/arrowFaded.png +0 -0
- {melage → assets}/resource/arrow_org.png +0 -0
- {melage → assets}/resource/arrow_org.png.png +0 -0
- {melage → assets}/resource/arrows.png +0 -0
- {melage → assets}/resource/authors.mp4 +0 -0
- {melage → assets}/resource/box.png +0 -0
- {melage → assets}/resource/check-image-icon-0.jpg +0 -0
- {melage → assets}/resource/circle.png +0 -0
- {melage → assets}/resource/circle_faded.png +0 -0
- {melage → assets}/resource/circle_or.png +0 -0
- {melage → assets}/resource/close.png +0 -0
- {melage → assets}/resource/close_bg.png +0 -0
- {melage → assets}/resource/color/Simple.txt +0 -0
- {melage → assets}/resource/color/Tissue.txt +0 -0
- {melage → assets}/resource/color/Tissue12.txt +0 -0
- {melage → assets}/resource/color/albert_LUT.txt +0 -0
- {melage → assets}/resource/color/mcrib_LUT.txt +0 -0
- {melage → assets}/resource/color/pediatric1.txt +0 -0
- {melage → assets}/resource/color/pediatric1_old.txt +0 -0
- {melage → assets}/resource/color/pediatric2.txt +0 -0
- {melage → assets}/resource/color/pediatric3.txt +0 -0
- {melage → assets}/resource/color/pediatrics (copy).csv +0 -0
- {melage → assets}/resource/color/tissue_seg.txt +0 -0
- {melage → assets}/resource/contour.png +0 -0
- {melage → assets}/resource/contour.svg +0 -0
- {melage → assets}/resource/contourFaded.png +0 -0
- {melage → assets}/resource/contourX.png +0 -0
- {melage → assets}/resource/contourXFaded.png +0 -0
- {melage → assets}/resource/dti.png +0 -0
- {melage → assets}/resource/dti0.png +0 -0
- {melage → assets}/resource/dti222.png +0 -0
- {melage → assets}/resource/dti_or.png +0 -0
- {melage → assets}/resource/eco.png +0 -0
- {melage → assets}/resource/eco22.png +0 -0
- {melage → assets}/resource/eco_old.png +0 -0
- {melage → assets}/resource/eco_or.png +0 -0
- {melage → assets}/resource/eco_or2.png +0 -0
- {melage → assets}/resource/eco_seg.png +0 -0
- {melage → assets}/resource/eco_seg_old.png +0 -0
- {melage → assets}/resource/export.png +0 -0
- {melage → assets}/resource/hand-grab-icon-10.jpg +0 -0
- {melage → assets}/resource/hand-grab-icon-25.jpg +0 -0
- {melage → assets}/resource/info.png +0 -0
- {melage → assets}/resource/line.png +0 -0
- {melage → assets}/resource/linefaded.png +0 -0
- {melage → assets}/resource/load.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_goto.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_draw1.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_draw2.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render2.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render3.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render4.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render5.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_paint_render6.png +0 -0
- {melage → assets}/resource/manual_images/3D_rightc_seg.png +0 -0
- {melage → assets}/resource/manual_images/exit_toolbar.png +0 -0
- {melage → assets}/resource/manual_images/load_image_file.png +0 -0
- {melage → assets}/resource/manual_images/load_image_file_openp.png +0 -0
- {melage → assets}/resource/manual_images/main_page.png +0 -0
- {melage → assets}/resource/manual_images/menu_file.png +0 -0
- {melage → assets}/resource/manual_images/menu_file_export.png +0 -0
- {melage → assets}/resource/manual_images/menu_file_import.png +0 -0
- {melage → assets}/resource/manual_images/menu_file_settings.png +0 -0
- {melage → assets}/resource/manual_images/menu_file_ss.png +0 -0
- {melage → assets}/resource/manual_images/open_save_load.png +0 -0
- {melage → assets}/resource/manual_images/panning_toolbar.png +0 -0
- {melage → assets}/resource/manual_images/segmentation_toolbar.png +0 -0
- {melage → assets}/resource/manual_images/tab_mri.png +0 -0
- {melage → assets}/resource/manual_images/tab_us.png +0 -0
- {melage → assets}/resource/manual_images/tabs.png +0 -0
- {melage → assets}/resource/manual_images/toolbar_tools.png +0 -0
- {melage → assets}/resource/manual_images/tools_basic.png +0 -0
- {melage → assets}/resource/manual_images/tools_bet.png +0 -0
- {melage → assets}/resource/manual_images/tools_cs.png +0 -0
- {melage → assets}/resource/manual_images/tools_deepbet.png +0 -0
- {melage → assets}/resource/manual_images/tools_imageinfo.png +0 -0
- {melage → assets}/resource/manual_images/tools_maskO.png +0 -0
- {melage → assets}/resource/manual_images/tools_masking.png +0 -0
- {melage → assets}/resource/manual_images/tools_n4b.png +0 -0
- {melage → assets}/resource/manual_images/tools_resize.png +0 -0
- {melage → assets}/resource/manual_images/tools_ruler.png +0 -0
- {melage → assets}/resource/manual_images/tools_seg.png +0 -0
- {melage → assets}/resource/manual_images/tools_threshold.png +0 -0
- {melage → assets}/resource/manual_images/tools_tools.png +0 -0
- {melage → assets}/resource/manual_images/widget_color.png +0 -0
- {melage → assets}/resource/manual_images/widget_color_add.png +0 -0
- {melage → assets}/resource/manual_images/widget_color_add2.png +0 -0
- {melage → assets}/resource/manual_images/widget_color_additional.png +0 -0
- {melage → assets}/resource/manual_images/widget_images.png +0 -0
- {melage → assets}/resource/manual_images/widget_images2.png +0 -0
- {melage → assets}/resource/manual_images/widget_images3.png +0 -0
- {melage → assets}/resource/manual_images/widget_marker.png +0 -0
- {melage → assets}/resource/manual_images/widget_mri.png +0 -0
- {melage → assets}/resource/manual_images/widget_mri2.png +0 -0
- {melage → assets}/resource/manual_images/widget_segintensity.png +0 -0
- {melage → assets}/resource/manual_images/widget_tab_mutualview.png +0 -0
- {melage → assets}/resource/manual_images/widget_tab_mutualview2.png +0 -0
- {melage → assets}/resource/manual_images/widget_table.png +0 -0
- {melage → assets}/resource/manual_images/widget_table2.png +0 -0
- {melage → assets}/resource/manual_images/widget_us.png +0 -0
- {melage → assets}/resource/melage_top.ico +0 -0
- {melage → assets}/resource/melage_top.png +0 -0
- {melage → assets}/resource/melage_top0.png +0 -0
- {melage → assets}/resource/melage_top1.png +0 -0
- {melage → assets}/resource/melage_top4.png +0 -0
- {melage → assets}/resource/mri (copy).png +0 -0
- {melage → assets}/resource/mri.png +0 -0
- {melage → assets}/resource/mri0.png +0 -0
- {melage → assets}/resource/mri000.png +0 -0
- {melage → assets}/resource/mri22.png +0 -0
- {melage → assets}/resource/mri_big.png +0 -0
- {melage → assets}/resource/mri_old.png +0 -0
- {melage → assets}/resource/mri_seg.png +0 -0
- {melage → assets}/resource/mri_seg_old.png +0 -0
- {melage → assets}/resource/new.png +0 -0
- {melage → assets}/resource/open.png +0 -0
- {melage → assets}/resource/open2.png +0 -0
- {melage → assets}/resource/pan.png +0 -0
- {melage → assets}/resource/pencil.png +0 -0
- {melage → assets}/resource/pencilFaded.png +0 -0
- {melage → assets}/resource/points.png +0 -0
- {melage → assets}/resource/pointsFaded.png +0 -0
- {melage → assets}/resource/rotate.png +0 -0
- {melage → assets}/resource/ruler.png +0 -0
- {melage → assets}/resource/rulerFaded.png +0 -0
- {melage → assets}/resource/s.png +0 -0
- {melage → assets}/resource/s.psd +0 -0
- {melage → assets}/resource/save.png +0 -0
- {melage → assets}/resource/saveas.png +0 -0
- {melage → assets}/resource/seg_mri.png +0 -0
- {melage → assets}/resource/seg_mri2.png +0 -0
- {melage → assets}/resource/settings.png +0 -0
- {melage → assets}/resource/synch.png +0 -0
- {melage → assets}/resource/synchFaded.png +0 -0
- {melage → assets}/resource/theme/rc/.keep +0 -0
- {melage → assets}/resource/theme/rc/arrow_down.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_focus.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_down_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_focus.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_left_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_focus.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_right_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_focus.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/arrow_up_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon@2x.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_focus.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/base_icon_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_focus.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_closed_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_focus.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_end_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_focus.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_line_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_focus.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_more_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_focus.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/branch_open_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/checkbox_checked0.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_focus.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/line_horizontal_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_focus.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/line_vertical_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_focus.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/radio_checked_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_focus.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/radio_unchecked_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_focus.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_horizontal_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_focus.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_move_vertical_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_focus.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_horizontal_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_focus.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/toolbar_separator_vertical_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/transparent.png +0 -0
- {melage → assets}/resource/theme/rc/transparent@2x.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_focus.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/transparent_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_close.png +0 -0
- {melage → assets}/resource/theme/rc/window_close@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_focus.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/window_close_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_focus.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/window_grip_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_focus.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/window_minimize_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_disabled.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_disabled@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_focus.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_focus@2x.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_pressed.png +0 -0
- {melage → assets}/resource/theme/rc/window_undock_pressed@2x.png +0 -0
- {melage → assets}/resource/theme/style.qss +0 -0
- {melage → assets}/resource/tract.png +0 -0
- {melage → assets}/resource/view1.png +0 -0
- {melage → assets}/resource/view1_eco.png +0 -0
- {melage → assets}/resource/view1_mri.png +0 -0
- {melage → assets}/resource/view1_seg.png +0 -0
- {melage → assets}/resource/view2.png +0 -0
- {melage → assets}/resource/view2_seg.png +0 -0
- {melage → assets}/resource/w.png +0 -0
- {melage → assets}/resource/zoom_inFaded.png +0 -0
- /melage/resource/zoom_in.png → /assets/resource/zoom_in_old.png +0 -0
- {melage → assets}/resource/zoom_outFaded.png +0 -0
- /melage/resource/zoom_out.png → /assets/resource/zoom_out_old.png +0 -0
- /melage/{widgets/activation.py → dialogs/ActivationDialog.py} +0 -0
- /melage/{widgets/HistImage.py → dialogs/HistogramDialog.py} +0 -0
- /melage/{widgets/iminfo.py → dialogs/ImInfoDialog.py} +0 -0
- /melage/{widgets/colorwidget.py → dialogs/helpers/ColorDialog.py} +0 -0
- /melage/{utils/custom_QScrollBar.py → dialogs/helpers/CustomScrollbar.py} +0 -0
- /melage/{widgets/repeat_widget.py → dialogs/helpers/RepeatDialog.py} +0 -0
- /melage/{widgets/screenshot_widget.py → dialogs/helpers/ScreenshotDialog.py} +0 -0
- /melage/{cli.py → melage.py} +0 -0
- /melage/{utils/brain_extraction_helper.py → plugins/bet/main/utils.py} +0 -0
- /melage/{graphics → rendering}/GLGraphicsItem.py +0 -0
- /melage/{graphics → rendering}/GLViewWidget.py +0 -0
- /melage/{graphics → rendering}/Transform3D.py +0 -0
- /melage/{graphics → rendering}/__init__.py +0 -0
- /melage/{graphics → rendering}/functions.py +0 -0
- /melage/{utils → rendering/helpers}/Shaders_120.py +0 -0
- /melage/{utils → rendering/helpers}/Shaders_330.py +0 -0
- /melage/{graphics → rendering}/items/GLAxisItem.py +0 -0
- /melage/{graphics → rendering}/items/GLGridItem.py +0 -0
- /melage/{graphics → rendering}/items/GLPolygonItem.py +0 -0
- /melage/{graphics → rendering}/items/GLScatterPlotItem.py +0 -0
- /melage/{graphics → rendering}/items/GLVolumeItem.py +0 -0
- /melage/{graphics → rendering}/items/GLVolumeItem_b.py +0 -0
- /melage/{graphics → rendering}/items/__init__.py +0 -0
- /melage/{graphics → rendering}/shaders.py +0 -0
- /melage/widgets/{enhanceImWidget.py → EnhanceImageWidget.py} +0 -0
- {melage-0.0.65.dist-info → melage-1.0.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from PyQt5.QtWidgets import QMessageBox
|
|
3
|
+
from melage.widgets import MelagePlugin
|
|
4
|
+
from melage.dialogs.dynamic_gui import DynamicDialog
|
|
5
|
+
from .resize_schema import get_schema
|
|
6
|
+
from PyQt5.QtCore import Qt
|
|
7
|
+
from PyQt5.QtCore import pyqtSignal
|
|
8
|
+
import SimpleITK as sitk
|
|
9
|
+
from melage.utils.utils import resample_to_spacing
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
#from .main.utils import changeCoordSystem
|
|
13
|
+
# --- THE LOGIC CLASS ---
|
|
14
|
+
class MainLogic(DynamicDialog):
|
|
15
|
+
"""
|
|
16
|
+
This class handles the BRAIN of the WarpSeg tool.
|
|
17
|
+
The LOOKS are handled automatically by DynamicDialog + Schema.
|
|
18
|
+
"""
|
|
19
|
+
completed = pyqtSignal(object)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def __init__(self, data_context,parent=None):
|
|
23
|
+
# 1. Initialize DynamicDialog with the Schema
|
|
24
|
+
# This single line builds the entire window!
|
|
25
|
+
|
|
26
|
+
super().__init__(parent)
|
|
27
|
+
self.create_main_ui(schema=get_schema(), default_items=False)
|
|
28
|
+
self.setAttribute(Qt.WA_DeleteOnClose)
|
|
29
|
+
self.data_context = data_context
|
|
30
|
+
|
|
31
|
+
# 2. AUTOMATICALLY WIDGET BINDING
|
|
32
|
+
# Iterate over all widgets created by the schema and bind them to 'self'.
|
|
33
|
+
for widget_id, widget_obj in self.widgets.items():
|
|
34
|
+
setattr(self, widget_id, widget_obj)
|
|
35
|
+
|
|
36
|
+
# 3. GENERAL PURPOSE SIGNAL CONNECTION (Auto-Connect)
|
|
37
|
+
# Instead of a hardcoded dictionary, we iterate through every widget from the schema
|
|
38
|
+
# and look for a matching method in this class named: on_<ID>_<Signal>
|
|
39
|
+
# This works for ANY schema changes automatically.
|
|
40
|
+
supported_signals = [
|
|
41
|
+
"clicked", "toggled", "currentIndexChanged",
|
|
42
|
+
"textChanged", "valueChanged"
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
for widget_id, widget_obj in self.widgets.items():
|
|
46
|
+
for signal_name in supported_signals:
|
|
47
|
+
# 1. Check if the widget has this signal (e.g., Button has 'clicked')
|
|
48
|
+
if hasattr(widget_obj, signal_name):
|
|
49
|
+
# 2. Check if WE have a handler method (e.g., 'on_btn_apply_clicked')
|
|
50
|
+
handler_name = f"on_{widget_id}_{signal_name}"
|
|
51
|
+
if hasattr(self, handler_name):
|
|
52
|
+
# 3. Connect them!
|
|
53
|
+
signal = getattr(widget_obj, signal_name)
|
|
54
|
+
handler = getattr(self, handler_name)
|
|
55
|
+
# Disconnect first to be safe (idempotent), then connect
|
|
56
|
+
try:
|
|
57
|
+
signal.disconnect(handler)
|
|
58
|
+
except TypeError:
|
|
59
|
+
pass
|
|
60
|
+
signal.connect(handler)
|
|
61
|
+
# print(f"Auto-connected: {widget_id}.{signal_name} -> {handler_name}")
|
|
62
|
+
self.spin_x.valueChanged.connect(self.synchronizeSpacings)
|
|
63
|
+
self.spin_y.valueChanged.connect(self.synchronizeSpacings)
|
|
64
|
+
self.spin_z.valueChanged.connect(self.synchronizeSpacings)
|
|
65
|
+
self.combo_view.currentIndexChanged.connect(self.compute_current_spcaing)
|
|
66
|
+
self.compute_current_spcaing()
|
|
67
|
+
|
|
68
|
+
def compute_current_spcaing(self, data_view=None):
|
|
69
|
+
if data_view is None:
|
|
70
|
+
view = self.combo_view.currentText()
|
|
71
|
+
data_view = self.data_context[view]
|
|
72
|
+
try:
|
|
73
|
+
spacing = data_view.header['pixdim'][1:4]
|
|
74
|
+
label_text = f"X {spacing[0]:0.2f}, Y {spacing[1]:0.2f}, Z {spacing[2]:0.2f}"
|
|
75
|
+
except (KeyError, TypeError, AttributeError):
|
|
76
|
+
label_text = f"Unknown"
|
|
77
|
+
self.lbl_spacing.setText(label_text)
|
|
78
|
+
|
|
79
|
+
def synchronizeSpacings(self, value):
|
|
80
|
+
if self.check_iso.isChecked():
|
|
81
|
+
# Set the value of all spin boxes to the changed value
|
|
82
|
+
self.spin_x.setValue(value)
|
|
83
|
+
self.spin_y.setValue(value)
|
|
84
|
+
self.spin_z.setValue(value)
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def ui_schema(self):
|
|
88
|
+
# We call the function to get the dictionary
|
|
89
|
+
return get_schema()
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
# Renamed from 'run_process' to match the schema ID 'btn_apply'
|
|
93
|
+
def on_btn_apply_clicked(self):
|
|
94
|
+
view = self.combo_view.currentText()
|
|
95
|
+
data_view = self.data_context[view]
|
|
96
|
+
if data_view is None:
|
|
97
|
+
QMessageBox.information(self, "Error", "No image data available for the selected view.")
|
|
98
|
+
return
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
"""The main execution function."""
|
|
102
|
+
x_v = self.spin_x.value()
|
|
103
|
+
y_v = self.spin_y.value()
|
|
104
|
+
z_v = self.spin_z.value()
|
|
105
|
+
method = self.combo_method.currentText().lower()
|
|
106
|
+
im = resample_to_spacing(data_view, [x_v, y_v, z_v], method)
|
|
107
|
+
self.compute_current_spcaing(im)
|
|
108
|
+
result_package = {
|
|
109
|
+
"image": im.get_fdata(),
|
|
110
|
+
"affine": im.affine,
|
|
111
|
+
"label": np.zeros_like(im.get_fdata()),
|
|
112
|
+
"view": view
|
|
113
|
+
}
|
|
114
|
+
self.completed.emit(result_package)
|
|
115
|
+
self.progress_bar.setValue(100)
|
|
116
|
+
#QMessageBox.information(self, "Done", "Segmentation Complete")
|
|
117
|
+
|
|
118
|
+
except Exception as e:
|
|
119
|
+
QMessageBox.information(self, "Error", f"{e}")
|
|
120
|
+
self.progress_bar.setValue(0)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
# --- THE PLUGIN WRAPPER ---
|
|
126
|
+
class AuxPlugin(MelagePlugin):
|
|
127
|
+
@property
|
|
128
|
+
def name(self) -> str: return "Resize"
|
|
129
|
+
|
|
130
|
+
@property
|
|
131
|
+
def category(self) -> str: return "Basic"
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def get_widget(self, data_context =None,parent=None):
|
|
135
|
+
logic = MainLogic(data_context, parent)
|
|
136
|
+
return logic
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
|
|
8
|
+
|
|
9
|
+
UI_SCHEMA = {
|
|
10
|
+
"title": "Image resizing",
|
|
11
|
+
"min_width": 420,
|
|
12
|
+
"layout": "vbox",
|
|
13
|
+
"items": [
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
HBox(children=[
|
|
17
|
+
Combo(id="combo_method", label="Select Method:", options=["Spline", "Linear"]),
|
|
18
|
+
Check(id="check_iso", text="Isotropic", checked=True), # Connected to activate_advanced
|
|
19
|
+
|
|
20
|
+
]),
|
|
21
|
+
# 1. Iteration (Splitter 3)
|
|
22
|
+
HBox(children=[
|
|
23
|
+
Label(text="New Spacing:"),
|
|
24
|
+
SpinBox(id="spin_x", value=1, min_val=0.1, max_val=10, decimals=2, step=0.1),
|
|
25
|
+
SpinBox(id="spin_y", value=1, min_val=0.1, max_val=10, decimals=2, step=0.1),
|
|
26
|
+
SpinBox(id="spin_z", value=1, min_val=0.1, max_val=10, decimals=2, step=0.1)
|
|
27
|
+
]),
|
|
28
|
+
HBox(children=[
|
|
29
|
+
Label(text="Current Spacing:"),
|
|
30
|
+
Label(id="lbl_spacing", text="", visible=True),
|
|
31
|
+
]),
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# --- Bottom Row: Progress + Apply ---
|
|
35
|
+
HBox(children=[
|
|
36
|
+
Progress(id="progress_bar"),
|
|
37
|
+
Button(id="btn_apply", text="Apply", default=True)
|
|
38
|
+
])
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
return UI_SCHEMA
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Helper functions to make UI schemas simple and readable.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
def Reference(text, title="Reference / Paper"):
|
|
6
|
+
"""
|
|
7
|
+
Creates a collapsible group containing the citation.
|
|
8
|
+
"""
|
|
9
|
+
# We use a Label with special flags (handled in the builder next)
|
|
10
|
+
ref_label = {
|
|
11
|
+
"type": "label",
|
|
12
|
+
"text": text,
|
|
13
|
+
"mode": "reference",
|
|
14
|
+
"word_wrap": True
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
# Return it wrapped in a Group so it doesn't clutter the UI
|
|
18
|
+
# 'collapsed=True' requires your Group logic to support it (optional)
|
|
19
|
+
return Group(title=title, children=[ref_label])
|
|
20
|
+
|
|
21
|
+
def Label(text, id=None, visible=True):
|
|
22
|
+
return {"type": "label", "text": text, "id": id, "visible": visible}
|
|
23
|
+
|
|
24
|
+
def Combo(id, options, label=None, function_name=None, default=None):
|
|
25
|
+
"""
|
|
26
|
+
Creates a Combobox.
|
|
27
|
+
If 'label' is provided, it returns a Container with the Label and Combo side-by-side.
|
|
28
|
+
"""
|
|
29
|
+
combo = {"type": "combobox", "id": id, "options": options,
|
|
30
|
+
"function_name": function_name, "default": default}
|
|
31
|
+
if label:
|
|
32
|
+
return HBox([Label(label), combo])
|
|
33
|
+
return combo
|
|
34
|
+
|
|
35
|
+
def Check(id, text, checked=False, context=None):
|
|
36
|
+
return {
|
|
37
|
+
"type": "checkbox", "id": id, "text": text,
|
|
38
|
+
"checked": checked, "context_menu": context
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
def Radio(id, text, checked=False, enabled=True):
|
|
42
|
+
return {
|
|
43
|
+
"type": "radio", "id": id, "text": text,
|
|
44
|
+
"checked": checked, "enabled": enabled
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
def Group(children, id=None, title="", layout="vbox", enabled=True):
|
|
48
|
+
return {
|
|
49
|
+
"type": "groupbox", "id": id, "title": title,
|
|
50
|
+
"layout": layout, "children": children, "enabled": enabled
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def SpinBox(id, label=None, value=0.0, min_val=0.0, max_val=100.0, step=1.0, decimals=2,
|
|
55
|
+
enabled = True):
|
|
56
|
+
"""
|
|
57
|
+
Creates a DoubleSpinBox definition.
|
|
58
|
+
For integers, just set decimals=0.
|
|
59
|
+
"""
|
|
60
|
+
item = {
|
|
61
|
+
"type": "spinbox",
|
|
62
|
+
"id": id,
|
|
63
|
+
"value": value,
|
|
64
|
+
"min": min_val,
|
|
65
|
+
"max": max_val,
|
|
66
|
+
"step": step,
|
|
67
|
+
"decimals": decimals,
|
|
68
|
+
"enabled": enabled
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# If a label is requested, wrap it in a vertical group
|
|
72
|
+
if label:
|
|
73
|
+
return Group(layout="vbox", children=[
|
|
74
|
+
Label(text=label),
|
|
75
|
+
item
|
|
76
|
+
])
|
|
77
|
+
|
|
78
|
+
return item
|
|
79
|
+
|
|
80
|
+
def Button(id, text, default=False, enabled=True):
|
|
81
|
+
return {"type": "button", "id": id, "text": text, "default": default, "enabled": enabled}
|
|
82
|
+
|
|
83
|
+
def Progress(id, min=0, max=100, value=0):
|
|
84
|
+
return {"type": "progressbar", "id": id, "min": min, "max": max, "value": value}
|
|
85
|
+
|
|
86
|
+
def HBox(children):
|
|
87
|
+
"""Puts items side-by-side"""
|
|
88
|
+
return {"type": "container", "layout": "hbox", "children": children}
|
|
89
|
+
|
|
90
|
+
def VBox(children):
|
|
91
|
+
"""Puts items top-to-bottom"""
|
|
92
|
+
return {"type": "container", "layout": "vbox", "children": children}
|
|
93
|
+
|
|
94
|
+
def LineEdit(id=None, text="", placeholder="", read_only=False, width=None):
|
|
95
|
+
return {
|
|
96
|
+
"type": "line_edit",
|
|
97
|
+
"id": id,
|
|
98
|
+
"text": text,
|
|
99
|
+
"placeholder": placeholder,
|
|
100
|
+
"read_only": read_only,
|
|
101
|
+
"width": width
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def FilePicker(id, label=None, check_label =None, placeholder="Select file...", button_text="Browse...", file_filter="All Files (*)"):
|
|
106
|
+
"""
|
|
107
|
+
Creates a composite widget: Label (optional) + [LineEdit | Button]
|
|
108
|
+
"""
|
|
109
|
+
# 1. Create unique IDs for the internal parts based on the main ID
|
|
110
|
+
line_id = f"{id}_path"
|
|
111
|
+
btn_id = f"{id}_btn"
|
|
112
|
+
check_id = f"{id}_check"
|
|
113
|
+
is_enabled = False if check_label else True
|
|
114
|
+
|
|
115
|
+
# 2. Define the Browse Button
|
|
116
|
+
# We add a custom key 'file_filter' here.
|
|
117
|
+
# Your UI renderer will ignore it, but we will read it in the Python logic.
|
|
118
|
+
browse_btn = Button(id=btn_id, text=button_text, enabled=is_enabled)
|
|
119
|
+
browse_btn['special_mode'] = 'file_browse'
|
|
120
|
+
browse_btn['file_filter'] = file_filter # <--- Storing the filter string here
|
|
121
|
+
browse_btn['target_id'] = line_id # <--- Storing which line edit to update
|
|
122
|
+
|
|
123
|
+
# 3. Define the HBox (Line Edit + Button)
|
|
124
|
+
picker_row = HBox(children=[
|
|
125
|
+
LineEdit(id=line_id, placeholder=placeholder, read_only=True),
|
|
126
|
+
browse_btn
|
|
127
|
+
])
|
|
128
|
+
|
|
129
|
+
# 4. If a label is requested, wrap it all in a VBox (or list), otherwise return just the row
|
|
130
|
+
if check_label:
|
|
131
|
+
# We add a custom key 'enable_targets' that our builder will read
|
|
132
|
+
toggle_check = Check(id=check_id, text=check_label, checked=False)
|
|
133
|
+
toggle_check['enable_targets'] = [line_id, btn_id]
|
|
134
|
+
return Group(layout="vbox", children=[
|
|
135
|
+
toggle_check,
|
|
136
|
+
picker_row
|
|
137
|
+
])
|
|
138
|
+
if label:
|
|
139
|
+
return Group(layout="vbox", children=[
|
|
140
|
+
Label(text=label),
|
|
141
|
+
picker_row
|
|
142
|
+
])
|
|
143
|
+
|
|
144
|
+
return picker_row
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
from PyQt5.QtWidgets import QMessageBox
|
|
2
|
+
from melage.widgets import MelagePlugin
|
|
3
|
+
from melage.dialogs.dynamic_gui import DynamicDialog
|
|
4
|
+
from .WarpSeg_schema import get_schema
|
|
5
|
+
from PyQt5 import QtWidgets
|
|
6
|
+
from .warpseg_main.test 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 WarpSegLogic(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
|
+
# 4. Set Initial State
|
|
61
|
+
#self.update_ui_state()
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def ui_schema(self):
|
|
65
|
+
# We call the function to get the dictionary
|
|
66
|
+
return get_schema()
|
|
67
|
+
# We alias these to 'update_ui_state' so the auto-connector finds them
|
|
68
|
+
def on_check_adult_toggled(self, checked=None):
|
|
69
|
+
return None
|
|
70
|
+
#self.update_ui_state()
|
|
71
|
+
|
|
72
|
+
def on_check_infant_toggled(self, checked=None):
|
|
73
|
+
return None
|
|
74
|
+
#self.update_ui_state()
|
|
75
|
+
|
|
76
|
+
def update_ui_state(self):
|
|
77
|
+
"""Handle the Adult vs Infant mutual exclusion logic."""
|
|
78
|
+
sender = self.sender()
|
|
79
|
+
|
|
80
|
+
# Mutual Exclusion Logic
|
|
81
|
+
if sender == self.check_adult and self.check_adult.isChecked():
|
|
82
|
+
self.check_infant.blockSignals(True)
|
|
83
|
+
self.check_infant.setChecked(False)
|
|
84
|
+
self.check_infant.blockSignals(False)
|
|
85
|
+
elif sender == self.check_infant and self.check_infant.isChecked():
|
|
86
|
+
self.check_adult.blockSignals(True)
|
|
87
|
+
self.check_adult.setChecked(False)
|
|
88
|
+
self.check_adult.blockSignals(False)
|
|
89
|
+
|
|
90
|
+
# Enable/Disable Groups
|
|
91
|
+
self.group_adult.setEnabled(self.check_adult.isChecked())
|
|
92
|
+
self.group_infant.setEnabled(self.check_infant.isChecked())
|
|
93
|
+
|
|
94
|
+
# Update Label (using the auto-bound ID 'lbl_model_info')
|
|
95
|
+
mode = "Adult" if self.check_adult.isChecked() else "Infant"
|
|
96
|
+
self.lbl_model_info.setText(f"Model Info: Ready for {mode} segmentation")
|
|
97
|
+
|
|
98
|
+
def browse_weights(self, widget):
|
|
99
|
+
"""
|
|
100
|
+
Opens file dialog and updates the LineEdit.
|
|
101
|
+
"""
|
|
102
|
+
options = QtWidgets.QFileDialog.Options()
|
|
103
|
+
file_path, _ = QtWidgets.QFileDialog.getOpenFileName(
|
|
104
|
+
None,
|
|
105
|
+
"Select Model Weights",
|
|
106
|
+
"",
|
|
107
|
+
"PyTorch Models (*.pth *.pt);;All Files (*)",
|
|
108
|
+
options=options
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
if file_path:
|
|
112
|
+
# 1. Update the LineEdit text to show the path
|
|
113
|
+
widget['txt_weights_path'].setText(file_path)
|
|
114
|
+
|
|
115
|
+
# 2. Update the status label to give feedback
|
|
116
|
+
filename = os.path.basename(file_path)
|
|
117
|
+
widget['lbl_model_info'].setText(f"Selected: {filename}")
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
# Renamed from 'run_process' to match the schema ID 'btn_apply'
|
|
121
|
+
def on_btn_apply_clicked(self):
|
|
122
|
+
view = self.combo_view.currentText()
|
|
123
|
+
data_view = self.data_context[view]
|
|
124
|
+
if data_view is None:
|
|
125
|
+
QMessageBox.information(self, "Error", "No image data available for the selected view.")
|
|
126
|
+
return
|
|
127
|
+
|
|
128
|
+
try:
|
|
129
|
+
"""The main execution function."""
|
|
130
|
+
# Get values using auto-bound attributes
|
|
131
|
+
use_cuda = self.check_cuda.isChecked()
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
self.progress_bar.setValue(10)
|
|
135
|
+
print(f"Running WarpSeg: View={view}, CUDA={use_cuda}")
|
|
136
|
+
|
|
137
|
+
if use_cuda and torch.cuda.is_available():
|
|
138
|
+
device = torch.device("cuda")
|
|
139
|
+
print("Using CUDA for computation.")
|
|
140
|
+
else:
|
|
141
|
+
device = torch.device("cpu")
|
|
142
|
+
print("Using CPU for computation.")
|
|
143
|
+
#if self.check_adult.isChecked():
|
|
144
|
+
model_path = getattr(self, 'weights_path_custom', None) or os.path.join(settings.DEFAULT_MODELS_DIR, "WarpSeg_Adult.pth")
|
|
145
|
+
#else:
|
|
146
|
+
# model_path = getattr(self, 'weights_path_custom', None) or os.path.join(settings.DEFAULT_MODELS_DIR, "WarpSeg_Infant.pth")
|
|
147
|
+
self.progress_bar.setValue(30)
|
|
148
|
+
# Build model
|
|
149
|
+
model = build_model(model_path=model_path, device=device)
|
|
150
|
+
self.progress_bar.setValue(50)
|
|
151
|
+
# Here you would load pre-trained weights if available
|
|
152
|
+
# For simplicity, we skip that step
|
|
153
|
+
# Run inference
|
|
154
|
+
|
|
155
|
+
data = data_view.get_fdata().copy()
|
|
156
|
+
if len(data.shape)<=1:
|
|
157
|
+
raise ValueError("Input image must be at least 2D NIfTI.")
|
|
158
|
+
seg_tissue, seg = get_inference(model, data, device, post_processing=False)
|
|
159
|
+
if self.radio_adult_whole.isChecked():
|
|
160
|
+
seg = seg
|
|
161
|
+
else:
|
|
162
|
+
seg = seg_tissue
|
|
163
|
+
result_package = {
|
|
164
|
+
"image": None,
|
|
165
|
+
"label": seg,
|
|
166
|
+
"view": view
|
|
167
|
+
}
|
|
168
|
+
self.completed.emit(result_package)
|
|
169
|
+
self.progress_bar.setValue(100)
|
|
170
|
+
#QMessageBox.information(self, "Done", "Segmentation Complete")
|
|
171
|
+
|
|
172
|
+
except Exception as e:
|
|
173
|
+
QMessageBox.information(self, "Error", f"{e}")
|
|
174
|
+
self.progress_bar.setValue(0)
|
|
175
|
+
|
|
176
|
+
def on_context_action(self, text, widget):
|
|
177
|
+
"""Handle the Right-Click Context Menu defined in schema"""
|
|
178
|
+
if text == "Reset Adult Options":
|
|
179
|
+
# Access radio button directly by ID
|
|
180
|
+
self.radio_adult_whole.setChecked(True)
|
|
181
|
+
print("Options reset.")
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
# --- THE PLUGIN WRAPPER ---
|
|
185
|
+
class WarpSegPlugin(MelagePlugin):
|
|
186
|
+
@property
|
|
187
|
+
def name(self) -> str: return "WarpSeg (Dynamic)"
|
|
188
|
+
|
|
189
|
+
@property
|
|
190
|
+
def category(self) -> str: return "Segmentation"
|
|
191
|
+
|
|
192
|
+
def get_widget(self, data_context =None,parent=None):
|
|
193
|
+
logic = WarpSegLogic(data_context, parent)
|
|
194
|
+
|
|
195
|
+
return logic
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
from ..ui_helpers import Label, Combo, Check, Radio, Group, Button, Progress, HBox, FilePicker
|
|
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": "MorphSeg Deep Learning Segmentation",
|
|
9
|
+
"min_width": 500,
|
|
10
|
+
"layout": "vbox",
|
|
11
|
+
"items": [
|
|
12
|
+
|
|
13
|
+
# 1. Combobox with a Label
|
|
14
|
+
# The 'Combo' helper with a 'label' argument automatically creates
|
|
15
|
+
# an HBox with a Label and the ComboBox inside.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# 2. Adult Section
|
|
19
|
+
# Context menu allows for extra actions like resetting options
|
|
20
|
+
#Check(id="check_adult", text="<b>Adult Segmentation</b>", checked=True,
|
|
21
|
+
# context=["Reset Adult Options"]),
|
|
22
|
+
Label(id = "lbl_model_info", text="Model Info: Ready for Adult segmentation"),
|
|
23
|
+
Group(id="group_adult", layout="hbox", children=[
|
|
24
|
+
Radio(id="radio_adult_whole", text="Whole Segmentation", checked=True),
|
|
25
|
+
Radio(id="radio_adult_tissue", text="Tissue Segmentation")
|
|
26
|
+
]),
|
|
27
|
+
|
|
28
|
+
# 3. Infant Section
|
|
29
|
+
#Check(id="check_infant", text="<b>Infant Segmentation</b>"),
|
|
30
|
+
|
|
31
|
+
# This group starts disabled because Infant mode is not active by default
|
|
32
|
+
#Group(id="group_infant", layout="hbox", enabled=False, children=[
|
|
33
|
+
# Radio(id="radio_infant_whole", text="Whole Segmentation", checked=True),
|
|
34
|
+
# Radio(id="radio_infant_tissue", text="Tissue Segmentation", enabled=False)
|
|
35
|
+
#]),
|
|
36
|
+
|
|
37
|
+
# 4. Configuration Section (UPDATED)
|
|
38
|
+
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
return UI_SCHEMA
|