melage 0.0.68__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
- resource/color/Simple.txt → assets/resource/color/lut_prostate.txt +20 -18
- assets/resource/horizontalview.png +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
- 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.68.dist-info/METADATA +0 -740
- melage-0.0.68.dist-info/RECORD +0 -916
- melage-0.0.68.dist-info/entry_points.txt +0 -2
- melage-0.0.68.dist-info/top_level.txt +0 -2
- resource/0circle.png +0 -0
- resource/0circle_faded.png +0 -0
- resource/3d.png +0 -0
- resource/3d.psd +0 -0
- resource/3dFaded.png +0 -0
- resource/Eraser.png +0 -0
- resource/EraserFaded.png +0 -0
- resource/EraserX.png +0 -0
- resource/EraserXFaded.png +0 -0
- resource/Eraser_icon.svg +0 -79
- resource/Hand.png +0 -0
- resource/HandIcons_0.png +0 -0
- resource/Hand_IX.png +0 -0
- resource/Hand_IXFaded.png +0 -0
- resource/Handsqueezed.png +0 -0
- resource/Handwriting (copy).png +0 -0
- resource/Handwriting.png +0 -0
- resource/HandwritingMinus.png +0 -0
- resource/HandwritingMinusX.png +0 -0
- resource/HandwritingPlus.png +0 -0
- resource/HandwritingPlusX.png +0 -0
- resource/Move_icon.svg +0 -8
- resource/PngItem_2422924.png +0 -0
- resource/about.png +0 -0
- resource/about_logo.png +0 -0
- resource/about_logo0.png +0 -0
- resource/action_check.png +0 -0
- resource/action_check_OFF.png +0 -0
- resource/arrow).png +0 -0
- resource/arrow.png +0 -0
- resource/arrowFaded.png +0 -0
- resource/arrow_org.png +0 -0
- resource/arrow_org.png.png +0 -0
- resource/arrows.png +0 -0
- resource/authors.mp4 +0 -0
- resource/box.png +0 -0
- resource/check-image-icon-0.jpg +0 -0
- resource/circle.png +0 -0
- resource/circle_faded.png +0 -0
- resource/circle_or.png +0 -0
- resource/close.png +0 -0
- resource/close_bg.png +0 -0
- resource/color/Tissue.txt +0 -24
- resource/color/Tissue12.txt +0 -27
- resource/color/albert_LUT.txt +0 -102
- resource/color/mcrib_LUT.txt +0 -102
- resource/color/pediatric1.txt +0 -29
- resource/color/pediatric1_old.txt +0 -27
- resource/color/pediatric2.txt +0 -87
- resource/color/pediatric3.txt +0 -29
- resource/color/pediatrics (copy).csv +0 -103
- resource/color/tissue_seg.txt +0 -4
- resource/contour.png +0 -0
- resource/contour.svg +0 -2
- resource/contourFaded.png +0 -0
- resource/contourX.png +0 -0
- resource/contourXFaded.png +0 -0
- resource/dti.png +0 -0
- resource/dti0.png +0 -0
- resource/dti222.png +0 -0
- resource/dti_or.png +0 -0
- resource/eco.png +0 -0
- resource/eco22.png +0 -0
- resource/eco_old.png +0 -0
- resource/eco_or.png +0 -0
- resource/eco_or2.png +0 -0
- resource/eco_seg.png +0 -0
- resource/eco_seg_old.png +0 -0
- resource/export.png +0 -0
- resource/hand-grab-icon-10.jpg +0 -0
- resource/hand-grab-icon-25.jpg +0 -0
- resource/info.png +0 -0
- resource/line.png +0 -0
- resource/linefaded.png +0 -0
- resource/load.png +0 -0
- resource/melage_top.ico +0 -0
- resource/melage_top.png +0 -0
- resource/melage_top0.png +0 -0
- resource/melage_top1.png +0 -0
- resource/melage_top4.png +0 -0
- resource/mri (copy).png +0 -0
- resource/mri.png +0 -0
- resource/mri0.png +0 -0
- resource/mri000.png +0 -0
- resource/mri22.png +0 -0
- resource/mri_big.png +0 -0
- resource/mri_old.png +0 -0
- resource/mri_seg.png +0 -0
- resource/mri_seg_old.png +0 -0
- resource/new.png +0 -0
- resource/open.png +0 -0
- resource/open2.png +0 -0
- resource/pan.png +0 -0
- resource/pencil.png +0 -0
- resource/pencilFaded.png +0 -0
- resource/points.png +0 -0
- resource/pointsFaded.png +0 -0
- resource/rotate.png +0 -0
- resource/ruler.png +0 -0
- resource/rulerFaded.png +0 -0
- resource/s.png +0 -0
- resource/s.psd +0 -0
- resource/save.png +0 -0
- resource/saveas.png +0 -0
- resource/seg_mri.png +0 -0
- resource/seg_mri2.png +0 -0
- resource/settings.png +0 -0
- resource/synch.png +0 -0
- resource/synchFaded.png +0 -0
- resource/theme/rc/.keep +0 -1
- resource/theme/rc/arrow_down.png +0 -0
- resource/theme/rc/arrow_down@2x.png +0 -0
- resource/theme/rc/arrow_down_disabled.png +0 -0
- resource/theme/rc/arrow_down_disabled@2x.png +0 -0
- resource/theme/rc/arrow_down_focus.png +0 -0
- resource/theme/rc/arrow_down_focus@2x.png +0 -0
- resource/theme/rc/arrow_down_pressed.png +0 -0
- resource/theme/rc/arrow_down_pressed@2x.png +0 -0
- resource/theme/rc/arrow_left.png +0 -0
- resource/theme/rc/arrow_left@2x.png +0 -0
- resource/theme/rc/arrow_left_disabled.png +0 -0
- resource/theme/rc/arrow_left_disabled@2x.png +0 -0
- resource/theme/rc/arrow_left_focus.png +0 -0
- resource/theme/rc/arrow_left_focus@2x.png +0 -0
- resource/theme/rc/arrow_left_pressed.png +0 -0
- resource/theme/rc/arrow_left_pressed@2x.png +0 -0
- resource/theme/rc/arrow_right.png +0 -0
- resource/theme/rc/arrow_right@2x.png +0 -0
- resource/theme/rc/arrow_right_disabled.png +0 -0
- resource/theme/rc/arrow_right_disabled@2x.png +0 -0
- resource/theme/rc/arrow_right_focus.png +0 -0
- resource/theme/rc/arrow_right_focus@2x.png +0 -0
- resource/theme/rc/arrow_right_pressed.png +0 -0
- resource/theme/rc/arrow_right_pressed@2x.png +0 -0
- resource/theme/rc/arrow_up.png +0 -0
- resource/theme/rc/arrow_up@2x.png +0 -0
- resource/theme/rc/arrow_up_disabled.png +0 -0
- resource/theme/rc/arrow_up_disabled@2x.png +0 -0
- resource/theme/rc/arrow_up_focus.png +0 -0
- resource/theme/rc/arrow_up_focus@2x.png +0 -0
- resource/theme/rc/arrow_up_pressed.png +0 -0
- resource/theme/rc/arrow_up_pressed@2x.png +0 -0
- resource/theme/rc/base_icon.png +0 -0
- resource/theme/rc/base_icon@2x.png +0 -0
- resource/theme/rc/base_icon_disabled.png +0 -0
- resource/theme/rc/base_icon_disabled@2x.png +0 -0
- resource/theme/rc/base_icon_focus.png +0 -0
- resource/theme/rc/base_icon_focus@2x.png +0 -0
- resource/theme/rc/base_icon_pressed.png +0 -0
- resource/theme/rc/base_icon_pressed@2x.png +0 -0
- resource/theme/rc/branch_closed.png +0 -0
- resource/theme/rc/branch_closed@2x.png +0 -0
- resource/theme/rc/branch_closed_disabled.png +0 -0
- resource/theme/rc/branch_closed_disabled@2x.png +0 -0
- resource/theme/rc/branch_closed_focus.png +0 -0
- resource/theme/rc/branch_closed_focus@2x.png +0 -0
- resource/theme/rc/branch_closed_pressed.png +0 -0
- resource/theme/rc/branch_closed_pressed@2x.png +0 -0
- resource/theme/rc/branch_end.png +0 -0
- resource/theme/rc/branch_end@2x.png +0 -0
- resource/theme/rc/branch_end_disabled.png +0 -0
- resource/theme/rc/branch_end_disabled@2x.png +0 -0
- resource/theme/rc/branch_end_focus.png +0 -0
- resource/theme/rc/branch_end_focus@2x.png +0 -0
- resource/theme/rc/branch_end_pressed.png +0 -0
- resource/theme/rc/branch_end_pressed@2x.png +0 -0
- resource/theme/rc/branch_line.png +0 -0
- resource/theme/rc/branch_line@2x.png +0 -0
- resource/theme/rc/branch_line_disabled.png +0 -0
- resource/theme/rc/branch_line_disabled@2x.png +0 -0
- resource/theme/rc/branch_line_focus.png +0 -0
- resource/theme/rc/branch_line_focus@2x.png +0 -0
- resource/theme/rc/branch_line_pressed.png +0 -0
- resource/theme/rc/branch_line_pressed@2x.png +0 -0
- resource/theme/rc/branch_more.png +0 -0
- resource/theme/rc/branch_more@2x.png +0 -0
- resource/theme/rc/branch_more_disabled.png +0 -0
- resource/theme/rc/branch_more_disabled@2x.png +0 -0
- resource/theme/rc/branch_more_focus.png +0 -0
- resource/theme/rc/branch_more_focus@2x.png +0 -0
- resource/theme/rc/branch_more_pressed.png +0 -0
- resource/theme/rc/branch_more_pressed@2x.png +0 -0
- resource/theme/rc/branch_open.png +0 -0
- resource/theme/rc/branch_open@2x.png +0 -0
- resource/theme/rc/branch_open_disabled.png +0 -0
- resource/theme/rc/branch_open_disabled@2x.png +0 -0
- resource/theme/rc/branch_open_focus.png +0 -0
- resource/theme/rc/branch_open_focus@2x.png +0 -0
- resource/theme/rc/branch_open_pressed.png +0 -0
- resource/theme/rc/branch_open_pressed@2x.png +0 -0
- resource/theme/rc/checkbox_checked.png +0 -0
- resource/theme/rc/checkbox_checked0.png +0 -0
- resource/theme/rc/checkbox_checked@2x.png +0 -0
- resource/theme/rc/checkbox_checked@2x0.png +0 -0
- resource/theme/rc/checkbox_checked@2x000.png.png +0 -0
- resource/theme/rc/checkbox_checked_disabled.png +0 -0
- resource/theme/rc/checkbox_checked_disabled0.png +0 -0
- resource/theme/rc/checkbox_checked_disabled@2x.png +0 -0
- resource/theme/rc/checkbox_checked_disabled@2x0.png +0 -0
- resource/theme/rc/checkbox_checked_focus.png +0 -0
- resource/theme/rc/checkbox_checked_focus0.png +0 -0
- resource/theme/rc/checkbox_checked_focus@2x.png +0 -0
- resource/theme/rc/checkbox_checked_focus@2x0.png +0 -0
- resource/theme/rc/checkbox_checked_pressed.png +0 -0
- resource/theme/rc/checkbox_checked_pressed0.png +0 -0
- resource/theme/rc/checkbox_checked_pressed@2x.png +0 -0
- resource/theme/rc/checkbox_checked_pressed@2x0.png +0 -0
- resource/theme/rc/checkbox_indeterminate.png +0 -0
- resource/theme/rc/checkbox_indeterminate@2x.png +0 -0
- resource/theme/rc/checkbox_indeterminate_disabled.png +0 -0
- resource/theme/rc/checkbox_indeterminate_disabled@2x.png +0 -0
- resource/theme/rc/checkbox_indeterminate_focus.png +0 -0
- resource/theme/rc/checkbox_indeterminate_focus@2x.png +0 -0
- resource/theme/rc/checkbox_indeterminate_pressed.png +0 -0
- resource/theme/rc/checkbox_indeterminate_pressed@2x.png +0 -0
- resource/theme/rc/checkbox_unchecked.png +0 -0
- resource/theme/rc/checkbox_unchecked0.png +0 -0
- resource/theme/rc/checkbox_unchecked00.png +0 -0
- resource/theme/rc/checkbox_unchecked@2x.png +0 -0
- resource/theme/rc/checkbox_unchecked@2x0.png +0 -0
- resource/theme/rc/checkbox_unchecked@2x00.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled0.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled00.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled@2x.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled@2x0.png +0 -0
- resource/theme/rc/checkbox_unchecked_disabled@2x00.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus0.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus00.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus@2x.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus@2x0.png +0 -0
- resource/theme/rc/checkbox_unchecked_focus@2x00.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed0.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed00.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed@2x.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed@2x0.png +0 -0
- resource/theme/rc/checkbox_unchecked_pressed@2x00.png +0 -0
- resource/theme/rc/line_horizontal.png +0 -0
- resource/theme/rc/line_horizontal@2x.png +0 -0
- resource/theme/rc/line_horizontal_disabled.png +0 -0
- resource/theme/rc/line_horizontal_disabled@2x.png +0 -0
- resource/theme/rc/line_horizontal_focus.png +0 -0
- resource/theme/rc/line_horizontal_focus@2x.png +0 -0
- resource/theme/rc/line_horizontal_pressed.png +0 -0
- resource/theme/rc/line_horizontal_pressed@2x.png +0 -0
- resource/theme/rc/line_vertical.png +0 -0
- resource/theme/rc/line_vertical@2x.png +0 -0
- resource/theme/rc/line_vertical_disabled.png +0 -0
- resource/theme/rc/line_vertical_disabled@2x.png +0 -0
- resource/theme/rc/line_vertical_focus.png +0 -0
- resource/theme/rc/line_vertical_focus@2x.png +0 -0
- resource/theme/rc/line_vertical_pressed.png +0 -0
- resource/theme/rc/line_vertical_pressed@2x.png +0 -0
- resource/theme/rc/radio_checked.png +0 -0
- resource/theme/rc/radio_checked@2x.png +0 -0
- resource/theme/rc/radio_checked_disabled.png +0 -0
- resource/theme/rc/radio_checked_disabled@2x.png +0 -0
- resource/theme/rc/radio_checked_focus.png +0 -0
- resource/theme/rc/radio_checked_focus@2x.png +0 -0
- resource/theme/rc/radio_checked_pressed.png +0 -0
- resource/theme/rc/radio_checked_pressed@2x.png +0 -0
- resource/theme/rc/radio_unchecked.png +0 -0
- resource/theme/rc/radio_unchecked@2x.png +0 -0
- resource/theme/rc/radio_unchecked_disabled.png +0 -0
- resource/theme/rc/radio_unchecked_disabled@2x.png +0 -0
- resource/theme/rc/radio_unchecked_focus.png +0 -0
- resource/theme/rc/radio_unchecked_focus@2x.png +0 -0
- resource/theme/rc/radio_unchecked_pressed.png +0 -0
- resource/theme/rc/radio_unchecked_pressed@2x.png +0 -0
- resource/theme/rc/toolbar_move_horizontal.png +0 -0
- resource/theme/rc/toolbar_move_horizontal@2x.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_disabled.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_disabled@2x.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_focus.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_focus@2x.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_pressed.png +0 -0
- resource/theme/rc/toolbar_move_horizontal_pressed@2x.png +0 -0
- resource/theme/rc/toolbar_move_vertical.png +0 -0
- resource/theme/rc/toolbar_move_vertical@2x.png +0 -0
- resource/theme/rc/toolbar_move_vertical_disabled.png +0 -0
- resource/theme/rc/toolbar_move_vertical_disabled@2x.png +0 -0
- resource/theme/rc/toolbar_move_vertical_focus.png +0 -0
- resource/theme/rc/toolbar_move_vertical_focus@2x.png +0 -0
- resource/theme/rc/toolbar_move_vertical_pressed.png +0 -0
- resource/theme/rc/toolbar_move_vertical_pressed@2x.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal@2x.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_disabled.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_disabled@2x.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_focus.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_focus@2x.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_pressed.png +0 -0
- resource/theme/rc/toolbar_separator_horizontal_pressed@2x.png +0 -0
- resource/theme/rc/toolbar_separator_vertical.png +0 -0
- resource/theme/rc/toolbar_separator_vertical@2x.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_disabled.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_disabled@2x.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_focus.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_focus@2x.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_pressed.png +0 -0
- resource/theme/rc/toolbar_separator_vertical_pressed@2x.png +0 -0
- resource/theme/rc/transparent.png +0 -0
- resource/theme/rc/transparent@2x.png +0 -0
- resource/theme/rc/transparent_disabled.png +0 -0
- resource/theme/rc/transparent_disabled@2x.png +0 -0
- resource/theme/rc/transparent_focus.png +0 -0
- resource/theme/rc/transparent_focus@2x.png +0 -0
- resource/theme/rc/transparent_pressed.png +0 -0
- resource/theme/rc/transparent_pressed@2x.png +0 -0
- resource/theme/rc/window_close.png +0 -0
- resource/theme/rc/window_close@2x.png +0 -0
- resource/theme/rc/window_close_disabled.png +0 -0
- resource/theme/rc/window_close_disabled@2x.png +0 -0
- resource/theme/rc/window_close_focus.png +0 -0
- resource/theme/rc/window_close_focus@2x.png +0 -0
- resource/theme/rc/window_close_pressed.png +0 -0
- resource/theme/rc/window_close_pressed@2x.png +0 -0
- resource/theme/rc/window_grip.png +0 -0
- resource/theme/rc/window_grip@2x.png +0 -0
- resource/theme/rc/window_grip_disabled.png +0 -0
- resource/theme/rc/window_grip_disabled@2x.png +0 -0
- resource/theme/rc/window_grip_focus.png +0 -0
- resource/theme/rc/window_grip_focus@2x.png +0 -0
- resource/theme/rc/window_grip_pressed.png +0 -0
- resource/theme/rc/window_grip_pressed@2x.png +0 -0
- resource/theme/rc/window_minimize.png +0 -0
- resource/theme/rc/window_minimize@2x.png +0 -0
- resource/theme/rc/window_minimize_disabled.png +0 -0
- resource/theme/rc/window_minimize_disabled@2x.png +0 -0
- resource/theme/rc/window_minimize_focus.png +0 -0
- resource/theme/rc/window_minimize_focus@2x.png +0 -0
- resource/theme/rc/window_minimize_pressed.png +0 -0
- resource/theme/rc/window_minimize_pressed@2x.png +0 -0
- resource/theme/rc/window_undock.png +0 -0
- resource/theme/rc/window_undock@2x.png +0 -0
- resource/theme/rc/window_undock_disabled.png +0 -0
- resource/theme/rc/window_undock_disabled@2x.png +0 -0
- resource/theme/rc/window_undock_focus.png +0 -0
- resource/theme/rc/window_undock_focus@2x.png +0 -0
- resource/theme/rc/window_undock_pressed.png +0 -0
- resource/theme/rc/window_undock_pressed@2x.png +0 -0
- resource/theme/style.qss +0 -2223
- resource/tract.png +0 -0
- resource/view1.png +0 -0
- resource/view1_eco.png +0 -0
- resource/view1_mri.png +0 -0
- resource/view1_seg.png +0 -0
- resource/view2.png +0 -0
- resource/view2_seg.png +0 -0
- resource/w.png +0 -0
- resource/zoom_in.png +0 -0
- resource/zoom_inFaded.png +0 -0
- resource/zoom_out.png +0 -0
- resource/zoom_outFaded.png +0 -0
- {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
- {resource → assets/resource}/main.ico +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
- {resource → docs}/manual_images/3D_rightc.png +0 -0
- {resource → docs}/manual_images/3D_rightc_goto.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_draw1.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_draw2.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render2.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render3.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render4.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render5.png +0 -0
- {resource → docs}/manual_images/3D_rightc_paint_render6.png +0 -0
- {resource → docs}/manual_images/3D_rightc_seg.png +0 -0
- {resource → docs}/manual_images/exit_toolbar.png +0 -0
- {resource → docs}/manual_images/load_image_file.png +0 -0
- {resource → docs}/manual_images/load_image_file_openp.png +0 -0
- {resource → docs}/manual_images/main_page.png +0 -0
- {resource → docs}/manual_images/menu_file.png +0 -0
- {resource → docs}/manual_images/menu_file_export.png +0 -0
- {resource → docs}/manual_images/menu_file_import.png +0 -0
- {resource → docs}/manual_images/menu_file_settings.png +0 -0
- {resource → docs}/manual_images/menu_file_ss.png +0 -0
- {resource → docs}/manual_images/open_save_load.png +0 -0
- {resource → docs}/manual_images/panning_toolbar.png +0 -0
- {resource → docs}/manual_images/segmentation_toolbar.png +0 -0
- {resource → docs}/manual_images/tab_mri.png +0 -0
- {resource → docs}/manual_images/tab_us.png +0 -0
- {resource → docs}/manual_images/tabs.png +0 -0
- {resource → docs}/manual_images/toolbar_tools.png +0 -0
- {resource → docs}/manual_images/tools_basic.png +0 -0
- {resource → docs}/manual_images/tools_bet.png +0 -0
- {resource → docs}/manual_images/tools_cs.png +0 -0
- {resource → docs}/manual_images/tools_deepbet.png +0 -0
- {resource → docs}/manual_images/tools_imageinfo.png +0 -0
- {resource → docs}/manual_images/tools_maskO.png +0 -0
- {resource → docs}/manual_images/tools_masking.png +0 -0
- {resource → docs}/manual_images/tools_n4b.png +0 -0
- {resource → docs}/manual_images/tools_resize.png +0 -0
- {resource → docs}/manual_images/tools_ruler.png +0 -0
- {resource → docs}/manual_images/tools_seg.png +0 -0
- {resource → docs}/manual_images/tools_threshold.png +0 -0
- {resource → docs}/manual_images/tools_tools.png +0 -0
- {resource → docs}/manual_images/widget_color.png +0 -0
- {resource → docs}/manual_images/widget_color_add.png +0 -0
- {resource → docs}/manual_images/widget_color_add2.png +0 -0
- {resource → docs}/manual_images/widget_color_additional.png +0 -0
- {resource → docs}/manual_images/widget_images.png +0 -0
- {resource → docs}/manual_images/widget_images2.png +0 -0
- {resource → docs}/manual_images/widget_images3.png +0 -0
- {resource → docs}/manual_images/widget_marker.png +0 -0
- {resource → docs}/manual_images/widget_mri.png +0 -0
- {resource → docs}/manual_images/widget_mri2.png +0 -0
- {resource → docs}/manual_images/widget_segintensity.png +0 -0
- {resource → docs}/manual_images/widget_tab_mutualview.png +0 -0
- {resource → docs}/manual_images/widget_tab_mutualview2.png +0 -0
- {resource → docs}/manual_images/widget_table.png +0 -0
- {resource → docs}/manual_images/widget_table2.png +0 -0
- {resource → docs}/manual_images/widget_us.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.68.dist-info → melage-1.0.0.dist-info}/WHEEL +0 -0
melage/utils/utils.py
CHANGED
|
@@ -4,6 +4,7 @@ __AUTHOR__ = 'Bahram Jafrasteh'
|
|
|
4
4
|
|
|
5
5
|
import sys
|
|
6
6
|
from operator import index
|
|
7
|
+
from pathlib import Path
|
|
7
8
|
|
|
8
9
|
sys.path.append("../../")
|
|
9
10
|
import numpy as np
|
|
@@ -28,7 +29,7 @@ try:
|
|
|
28
29
|
except:
|
|
29
30
|
None
|
|
30
31
|
try:
|
|
31
|
-
from melage.
|
|
32
|
+
from melage.config import settings
|
|
32
33
|
except:
|
|
33
34
|
pass
|
|
34
35
|
# Direction of medical image Left, Right, Posterior Anterior, Inferior, Superior
|
|
@@ -43,6 +44,50 @@ class Item:
|
|
|
43
44
|
size: bytes
|
|
44
45
|
|
|
45
46
|
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def get_filter_for_file(filename, all_filters):
|
|
51
|
+
"""
|
|
52
|
+
Returns the specific filter string (e.g., 'Nifti (*.nii)') that matches
|
|
53
|
+
the given filename.
|
|
54
|
+
"""
|
|
55
|
+
# 1. Split the massive filter string into individual categories
|
|
56
|
+
# "Nifti(...);;Vol(...)" -> ["Nifti(...)", "Vol(...)"]
|
|
57
|
+
categories = all_filters.split(';;')
|
|
58
|
+
|
|
59
|
+
# We compare in lowercase to handle extensions robustly (e.g., .NII vs .nii)
|
|
60
|
+
filename_lower = filename.lower()
|
|
61
|
+
|
|
62
|
+
for category in categories:
|
|
63
|
+
# 2. Extract the part inside parentheses: "*.nii *.nii.gz"
|
|
64
|
+
start = category.find('(')
|
|
65
|
+
end = category.find(')')
|
|
66
|
+
|
|
67
|
+
if start != -1 and end != -1:
|
|
68
|
+
# Get the content inside ()
|
|
69
|
+
pattern_str = category[start + 1:end]
|
|
70
|
+
|
|
71
|
+
# Split into individual extensions: ["*.nii", "*.nii.gz"]
|
|
72
|
+
patterns = pattern_str.split()
|
|
73
|
+
|
|
74
|
+
for pattern in patterns:
|
|
75
|
+
# Clean the pattern to get the suffix
|
|
76
|
+
# "*.nii.gz" -> ".nii.gz"
|
|
77
|
+
# "**" -> skip
|
|
78
|
+
clean_ext = pattern.replace('*', '').lower()
|
|
79
|
+
|
|
80
|
+
if not clean_ext:
|
|
81
|
+
continue # Skip empty or pure wildcards
|
|
82
|
+
|
|
83
|
+
# 3. Check if the filename ends with this extension
|
|
84
|
+
# "mri.nii.gz" ends with ".nii.gz" -> Match!
|
|
85
|
+
if filename_lower.endswith(clean_ext):
|
|
86
|
+
return category
|
|
87
|
+
|
|
88
|
+
# Fallback: If no specific match found, return "All Files" or the first one
|
|
89
|
+
return "All Files (*)"
|
|
90
|
+
|
|
46
91
|
def guess_num_image_index(nifti_input):
|
|
47
92
|
"""
|
|
48
93
|
Guess which axis of the image shape represents the 'num_images' (volume/time/channel) dimension.
|
|
@@ -56,7 +101,7 @@ def guess_num_image_index(nifti_input):
|
|
|
56
101
|
if isinstance(nifti_input, nib.Nifti1Image):
|
|
57
102
|
hdr = nifti_input.header
|
|
58
103
|
else:
|
|
59
|
-
return
|
|
104
|
+
return np.argmin(nifti_input.shape), 1
|
|
60
105
|
|
|
61
106
|
ndim = hdr['dim'][0]
|
|
62
107
|
shape = hdr['dim'][1:4]
|
|
@@ -380,7 +425,10 @@ def resample_to_spacing(im, newSpacing, method='spline'):
|
|
|
380
425
|
|
|
381
426
|
|
|
382
427
|
# Define the new spacing (voxel size) for resampling
|
|
383
|
-
|
|
428
|
+
if type(newSpacing)==list or type(newSpacing)==tuple:
|
|
429
|
+
new_spacing = newSpacing
|
|
430
|
+
else:
|
|
431
|
+
new_spacing = (newSpacing, newSpacing, newSpacing)
|
|
384
432
|
|
|
385
433
|
# Calculate the new size based on the original size and spacing
|
|
386
434
|
new_size = [int(sz * spc / new_spc + 0.5) for sz, spc, new_spc in
|
|
@@ -403,7 +451,7 @@ def resample_to_spacing(im, newSpacing, method='spline'):
|
|
|
403
451
|
return read_sitk_as_nib(resampled_image)
|
|
404
452
|
except:
|
|
405
453
|
from nibabel.processing import resample_to_output
|
|
406
|
-
return resample_to_output(im,
|
|
454
|
+
return resample_to_output(im, new_spacing)
|
|
407
455
|
|
|
408
456
|
|
|
409
457
|
###################### Help dialogue to open new image ######################
|
|
@@ -468,174 +516,6 @@ def calculate_snr(image_array):
|
|
|
468
516
|
|
|
469
517
|
###################### A class to resize image######################
|
|
470
518
|
|
|
471
|
-
class resize_window(QtWidgets.QDialog):
|
|
472
|
-
from PyQt5.QtCore import pyqtSignal
|
|
473
|
-
closeSig = pyqtSignal()
|
|
474
|
-
resizeim = pyqtSignal(object)
|
|
475
|
-
comboboxCh = pyqtSignal(object, object)
|
|
476
|
-
"""
|
|
477
|
-
A dialog for combo box created for reading 4d images
|
|
478
|
-
"""
|
|
479
|
-
def __init__(self, parent=None, use_combobox=False):
|
|
480
|
-
QtWidgets.QDialog.__init__(self, parent)
|
|
481
|
-
self.setWindowTitle("Child Window!")
|
|
482
|
-
Dialog = self.window()
|
|
483
|
-
self.use_combobox = use_combobox
|
|
484
|
-
self.setupUi(Dialog)
|
|
485
|
-
self.check_box.setCheckState(Qt.Checked)
|
|
486
|
-
self._status = False
|
|
487
|
-
|
|
488
|
-
def setupUi(self, Dialog):
|
|
489
|
-
|
|
490
|
-
Dialog.setObjectName("Dialog")
|
|
491
|
-
Dialog.resize(500, 112)
|
|
492
|
-
self.grid_main = QtWidgets.QGridLayout(self)
|
|
493
|
-
self.grid_main.setContentsMargins(10,10,10,10)
|
|
494
|
-
self.grid_main.setObjectName("gridLayout")
|
|
495
|
-
|
|
496
|
-
self.hbox_0 = QtWidgets.QHBoxLayout()
|
|
497
|
-
self.label_warning = QtWidgets.QLabel()
|
|
498
|
-
self.label_warning.setText('The pixels are not isotropic. Do you want to resize image (isotropic)?')
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
self.hbox_0.addWidget(self.label_warning)
|
|
502
|
-
|
|
503
|
-
_translate = QtCore.QCoreApplication.translate
|
|
504
|
-
self.pushbutton = QtWidgets.QDialogButtonBox()
|
|
505
|
-
self.pushbutton_cancel = QtWidgets.QPushButton()
|
|
506
|
-
self.pushbutton.setStandardButtons(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel)
|
|
507
|
-
self.pushbutton.accepted.connect(self.accept_it)
|
|
508
|
-
self.pushbutton.rejected.connect(self.reject_it)
|
|
509
|
-
|
|
510
|
-
#self.hbox_0.addWidget(self.pushbutton)
|
|
511
|
-
|
|
512
|
-
if self.use_combobox:
|
|
513
|
-
self.comboBox_image = QtWidgets.QComboBox()
|
|
514
|
-
self.comboBox_image.setObjectName("comboBox_image")
|
|
515
|
-
self.comboBox_image.addItem("")
|
|
516
|
-
self.comboBox_image.addItem("")
|
|
517
|
-
self.comboBox_image.currentIndexChanged.connect(self.comboBOX_changed)
|
|
518
|
-
#
|
|
519
|
-
self.hbox_0.addWidget(self.comboBox_image)
|
|
520
|
-
self.grid_main.addLayout(self.hbox_0, 0, 0, 1, 1)
|
|
521
|
-
else:
|
|
522
|
-
self.grid_main.addLayout(self.hbox_0, 0, 0, 1, 1)
|
|
523
|
-
|
|
524
|
-
self.grid_main.addWidget(self.pushbutton, 3, 0, 1, 1)
|
|
525
|
-
self.check_box = QtWidgets.QCheckBox()
|
|
526
|
-
|
|
527
|
-
self.check_box.stateChanged.connect(self.changeAllSpacing)
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
self.label_current_spc0 = QtWidgets.QLabel()
|
|
531
|
-
self.label_current_spc0.setText('Current Spacing')
|
|
532
|
-
|
|
533
|
-
self.label_current_spc = QtWidgets.QLabel()
|
|
534
|
-
#self.label_current_spc.setReadOnly(True)
|
|
535
|
-
self.label_current_spc.setText('0,0,0')
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
self.radioButton_1 = QtWidgets.QCheckBox()
|
|
539
|
-
|
|
540
|
-
self.radioButton_1.setObjectName("radioButton_1")
|
|
541
|
-
self.radioButton_1.setChecked(False)
|
|
542
|
-
|
|
543
|
-
self.hbox = QtWidgets.QHBoxLayout()
|
|
544
|
-
self.hbox.addWidget(self.check_box)
|
|
545
|
-
self.hbox.addWidget(self.radioButton_1)
|
|
546
|
-
self.hbox.addWidget(self.label_current_spc0)
|
|
547
|
-
self.hbox.addWidget(self.label_current_spc)
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
self.hbox2 = QtWidgets.QHBoxLayout()
|
|
551
|
-
self.label_new_spc0 = QtWidgets.QLabel()
|
|
552
|
-
self.label_new_spc0.setText('New Spacing')
|
|
553
|
-
self.label_new_spc0.setStyleSheet('color: Red')
|
|
554
|
-
|
|
555
|
-
self.label_new_spc = QtWidgets.QDoubleSpinBox(self)
|
|
556
|
-
self.label_new_spc_y = QtWidgets.QDoubleSpinBox(self)
|
|
557
|
-
self.label_new_spc_z = QtWidgets.QDoubleSpinBox(self)
|
|
558
|
-
|
|
559
|
-
for spin_box in (self.label_new_spc, self.label_new_spc_y, self.label_new_spc_z):
|
|
560
|
-
spin_box.setMinimum(0.01)
|
|
561
|
-
spin_box.setMaximum(20)
|
|
562
|
-
spin_box.setSingleStep(0.1)
|
|
563
|
-
spin_box.setValue(1.0)
|
|
564
|
-
spin_box.setDecimals(2)
|
|
565
|
-
|
|
566
|
-
self.hbox2.addWidget(self.label_new_spc0)
|
|
567
|
-
self.hbox2.addWidget(self.label_new_spc)
|
|
568
|
-
self.hbox2.addWidget(self.label_new_spc_y)
|
|
569
|
-
self.hbox2.addWidget(self.label_new_spc_z)
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
#self.pushbutton.setText(_translate("Dialog", "OK"))
|
|
573
|
-
#self.grid_main.addWidget(self.label_warning, 0,0,1,1)
|
|
574
|
-
self.grid_main.addLayout(self.hbox, 1,0,1,1)
|
|
575
|
-
self.grid_main.addLayout(self.hbox2,2,0,1,1)
|
|
576
|
-
|
|
577
|
-
#self.hbox3 = QtWidgets.QHBoxLayout()
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
#self.grid_main.addLayout(self.hbox_0, 3, 0, 1, 1)
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
self.retranslateUi(Dialog)
|
|
584
|
-
|
|
585
|
-
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
|
586
|
-
|
|
587
|
-
def changeAllSpacing(self, state):
|
|
588
|
-
if state == QtCore.Qt.Checked:
|
|
589
|
-
# Connect the change signal to synchronize function
|
|
590
|
-
self.label_new_spc.valueChanged.connect(self.synchronizeSpacings)
|
|
591
|
-
self.label_new_spc_y.valueChanged.connect(self.synchronizeSpacings)
|
|
592
|
-
self.label_new_spc_z.valueChanged.connect(self.synchronizeSpacings)
|
|
593
|
-
else:
|
|
594
|
-
# Disconnect the synchronize function to allow independent changes
|
|
595
|
-
self.label_new_spc.valueChanged.disconnect(self.synchronizeSpacings)
|
|
596
|
-
self.label_new_spc_y.valueChanged.disconnect(self.synchronizeSpacings)
|
|
597
|
-
self.label_new_spc_z.valueChanged.disconnect(self.synchronizeSpacings)
|
|
598
|
-
|
|
599
|
-
def synchronizeSpacings(self, value):
|
|
600
|
-
# Set the value of all spin boxes to the changed value
|
|
601
|
-
self.label_new_spc.blockSignals(True)
|
|
602
|
-
self.label_new_spc_y.blockSignals(True)
|
|
603
|
-
self.label_new_spc_z.blockSignals(True)
|
|
604
|
-
self.label_new_spc.setValue(value)
|
|
605
|
-
self.label_new_spc_y.setValue(value)
|
|
606
|
-
self.label_new_spc_z.setValue(value)
|
|
607
|
-
self.label_new_spc.blockSignals(False)
|
|
608
|
-
self.label_new_spc_y.blockSignals(False)
|
|
609
|
-
self.label_new_spc_z.blockSignals(False)
|
|
610
|
-
|
|
611
|
-
def comboBOX_changed(self):
|
|
612
|
-
ind = self.comboBox_image.currentIndex()
|
|
613
|
-
self.comboboxCh.emit(None, ind)
|
|
614
|
-
|
|
615
|
-
def retranslateUi(self, Dialog):
|
|
616
|
-
_translate = QtCore.QCoreApplication.translate
|
|
617
|
-
Dialog.setWindowTitle(_translate("Dialog", "Resize..."))
|
|
618
|
-
|
|
619
|
-
_translate = QtCore.QCoreApplication.translate
|
|
620
|
-
self.radioButton_1.setText(_translate("Main", "Linear"))
|
|
621
|
-
self.check_box.setText(_translate("Main", "Isotropic"))
|
|
622
|
-
if self.use_combobox:
|
|
623
|
-
self.comboBox_image.setItemText(0, _translate("Form", " Top Image "))
|
|
624
|
-
self.comboBox_image.setItemText(1, _translate("Form", " Bottom Image "))
|
|
625
|
-
def closeEvent(self, a0: QtGui.QCloseEvent) -> None:
|
|
626
|
-
self.closeSig.emit()
|
|
627
|
-
super(resize_window, self).closeEvent(a0)
|
|
628
|
-
def accept_it(self):
|
|
629
|
-
self._status = True
|
|
630
|
-
if self.use_combobox:
|
|
631
|
-
index = self.comboBox_image.currentIndex()
|
|
632
|
-
self.resizeim.emit(index)
|
|
633
|
-
self.accept()
|
|
634
|
-
|
|
635
|
-
def reject_it(self):
|
|
636
|
-
self._status = False
|
|
637
|
-
self.reject()
|
|
638
|
-
|
|
639
519
|
########### COMBO BOX To read 4D images #####################
|
|
640
520
|
class ComboBox_Dialog(QtWidgets.QDialog):
|
|
641
521
|
"""
|
|
@@ -920,9 +800,199 @@ def manually_check_tree_item(self, txt='9876'):
|
|
|
920
800
|
for l in ls:
|
|
921
801
|
root.child(l).setCheckState(Qt.Checked)
|
|
922
802
|
return ls
|
|
803
|
+
####################### Discover all scheme files #####################
|
|
804
|
+
def discover_color_files(base_folder):
|
|
805
|
+
"""
|
|
806
|
+
Dynamically finds all .txt files in the 'color' subdirectory.
|
|
807
|
+
|
|
808
|
+
Args:
|
|
809
|
+
base_folder (str): The root folder containing the 'color' directory.
|
|
923
810
|
|
|
811
|
+
Returns:
|
|
812
|
+
dict: A dictionary where keys are filenames (without extension)
|
|
813
|
+
and values are the relative paths to the .txt files.
|
|
814
|
+
Returns an empty dictionary if the folder doesn't exist.
|
|
815
|
+
"""
|
|
816
|
+
color_dir = Path(base_folder) / 'color'
|
|
817
|
+
if not color_dir.is_dir():
|
|
818
|
+
print(f"Warning: Color directory not found at '{color_dir}'")
|
|
819
|
+
return {}
|
|
820
|
+
|
|
821
|
+
# Create a dictionary mapping the filename (e.g., 'Simple')
|
|
822
|
+
# to its relative path (e.g., 'color/Simple.txt')
|
|
823
|
+
# The .lower() makes the key consistent for lookups.
|
|
824
|
+
return {
|
|
825
|
+
path.stem: f"/color/{path.name}"
|
|
826
|
+
for path in color_dir.glob('*.txt')
|
|
827
|
+
}
|
|
924
828
|
###################### Updating current color scheme ##################
|
|
925
|
-
|
|
829
|
+
|
|
830
|
+
MAX_COLORS = 255
|
|
831
|
+
COMBINED_COLOR_ID = 9876
|
|
832
|
+
DEFAULT_COLOR_FILES = {
|
|
833
|
+
'simple': '/color/Simple.txt',
|
|
834
|
+
'tissue': '/color/Tissue.txt',
|
|
835
|
+
'albert': '/color/albert_LUT.txt',
|
|
836
|
+
'mcrib': '/color/mcrib_LUT.txt',
|
|
837
|
+
}
|
|
838
|
+
from PyQt5.QtWidgets import QFileDialog
|
|
839
|
+
|
|
840
|
+
# --- Helper Functions (These perform the specific, isolated tasks) ---
|
|
841
|
+
|
|
842
|
+
def _get_required_indices(data, data_add=None):
|
|
843
|
+
"""Extracts unique positive integer indices from data arrays."""
|
|
844
|
+
|
|
845
|
+
indices = set([l for l in np.unique(data).astype('int') if l > 0])
|
|
846
|
+
if data_add is not None:
|
|
847
|
+
indices.update([l for l in np.unique(data_add).astype('int') if l > 0])
|
|
848
|
+
return {idx for idx in indices if idx > 0}
|
|
849
|
+
|
|
850
|
+
|
|
851
|
+
def _get_color_filepath(app_instance, show_dialog, unique_count):
|
|
852
|
+
|
|
853
|
+
"""Gets color file path via dialog or automatic selection."""
|
|
854
|
+
if show_dialog:
|
|
855
|
+
filters = "Text files (*.txt)"
|
|
856
|
+
opts = QFileDialog.DontUseNativeDialog
|
|
857
|
+
file_path, _ = QFileDialog.getOpenFileName(app_instance, "Open Color File", settings.DEFAULT_USE_DIR, filters,
|
|
858
|
+
options=opts)
|
|
859
|
+
if file_path!='':
|
|
860
|
+
return file_path
|
|
861
|
+
available_files = discover_color_files(settings.RESOURCE_DIR)
|
|
862
|
+
if not available_files:
|
|
863
|
+
print("Error: No color files found.")
|
|
864
|
+
return None # No files to choose from
|
|
865
|
+
# Automatic selection logic
|
|
866
|
+
# This example selects a file based on name, similar to before.
|
|
867
|
+
if unique_count <= 2 and 'Simple' in available_files:
|
|
868
|
+
filepath = available_files['Simple']
|
|
869
|
+
elif unique_count <= 9 and 'Tissue' in available_files:
|
|
870
|
+
filepath = available_files['Tissue']
|
|
871
|
+
elif unique_count < 90 and 'albert_LUT' in available_files:
|
|
872
|
+
filepath = available_files['albert_LUT']
|
|
873
|
+
elif 'mcrib_LUT' in available_files: # Fallback for larger counts
|
|
874
|
+
filepath = available_files['mcrib_LUT']
|
|
875
|
+
else:
|
|
876
|
+
# If no specific logic matches, just pick the first available file
|
|
877
|
+
filepath = next(iter(available_files.values()))
|
|
878
|
+
filepath = available_files["FreeSurferColorLUT"]
|
|
879
|
+
return settings.RESOURCE_DIR + filepath
|
|
880
|
+
|
|
881
|
+
|
|
882
|
+
def _load_color_definitions(file_path):
|
|
883
|
+
"""Loads color definitions from a text file, trying multiple formats."""
|
|
884
|
+
try:
|
|
885
|
+
names, rgb_data, _ = read_txt_color(file_path, from_one=False, mode='albert')
|
|
886
|
+
return {'names': names, 'rgb': rgb_data}
|
|
887
|
+
except Exception as e1:
|
|
888
|
+
print(f"Could not read '{file_path}' in primary format. Trying fallback. Error: {e1}")
|
|
889
|
+
try:
|
|
890
|
+
names, rgb_data, _ = read_txt_color(file_path, from_one=False)
|
|
891
|
+
return {'names': names, 'rgb': rgb_data}
|
|
892
|
+
except Exception as e2:
|
|
893
|
+
print(f"Error: Failed to read color file '{file_path}'. Error: {e2}")
|
|
894
|
+
return None
|
|
895
|
+
|
|
896
|
+
|
|
897
|
+
def _update_ui_widgets(app_instance):
|
|
898
|
+
"""Safely disconnects, updates, and reconnects UI signals and widgets."""
|
|
899
|
+
try:
|
|
900
|
+
#self.dw2_cb.currentTextChanged.disconnect(self.changeColorPen)
|
|
901
|
+
app_instance.tree_colors.itemChanged.disconnect(app_instance.changeColorPen)
|
|
902
|
+
except:
|
|
903
|
+
pass
|
|
904
|
+
|
|
905
|
+
set_new_color_scheme(app_instance)
|
|
906
|
+
try:
|
|
907
|
+
#self.dw2_cb.currentTextChanged.connect(self.changeColorPen)
|
|
908
|
+
app_instance.tree_colors.itemChanged.connect(app_instance.changeColorPen)
|
|
909
|
+
except:
|
|
910
|
+
pass
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
# --- Main Function ---
|
|
914
|
+
|
|
915
|
+
def update_color_scheme(app_instance, data, data_add=None, dialog=True, update_widget=True):
|
|
916
|
+
"""
|
|
917
|
+
Updates the application's color scheme based on indices present in the data.
|
|
918
|
+
|
|
919
|
+
Args:
|
|
920
|
+
app_instance: The instance of the application class (what was 'self').
|
|
921
|
+
data (np.ndarray): The primary data array with color indices.
|
|
922
|
+
data_add (np.ndarray, optional): Additional data array with color indices.
|
|
923
|
+
dialog (bool): If True, shows a file dialog to select a color file.
|
|
924
|
+
update_widget (bool): If True, updates the UI widgets after the scheme is changed.
|
|
925
|
+
|
|
926
|
+
Returns:
|
|
927
|
+
tuple[np.ndarray, bool]: The original data array and a success flag.
|
|
928
|
+
"""
|
|
929
|
+
if data is None:
|
|
930
|
+
data = np.array([0, 1])
|
|
931
|
+
|
|
932
|
+
# 1. Determine which color indices are required
|
|
933
|
+
required_indices = _get_required_indices(data, data_add)
|
|
934
|
+
if len(required_indices) > MAX_COLORS:
|
|
935
|
+
print(f"Error: Number of unique colors exceeds the limit of {MAX_COLORS}.")
|
|
936
|
+
return data, False
|
|
937
|
+
|
|
938
|
+
current_indices = set(app_instance.color_index_rgb[:, 0].astype(int))
|
|
939
|
+
new_indices_needed = required_indices - current_indices
|
|
940
|
+
|
|
941
|
+
if not new_indices_needed:
|
|
942
|
+
return data, True # Success, no update was needed
|
|
943
|
+
|
|
944
|
+
# 2. Get the color file and load the color definitions
|
|
945
|
+
color_file_path = _get_color_filepath(app_instance, dialog, len(required_indices))
|
|
946
|
+
#if not color_file_path:
|
|
947
|
+
# return data, False # User cancelled or no file found
|
|
948
|
+
|
|
949
|
+
loaded_colors = _load_color_definitions(color_file_path)
|
|
950
|
+
#if loaded_colors is None:
|
|
951
|
+
# return data, False # Failed to load file
|
|
952
|
+
|
|
953
|
+
# 3. Merge new colors with the existing scheme and update the app's state
|
|
954
|
+
loaded_rgb_map = {int(row[0]): row for row in loaded_colors['rgb']}
|
|
955
|
+
loaded_name_map = {int(name.split('_')[0]): name for name in loaded_colors['names']}
|
|
956
|
+
|
|
957
|
+
final_rgb = list(app_instance.color_index_rgb)
|
|
958
|
+
final_names = list(app_instance.color_name)
|
|
959
|
+
|
|
960
|
+
for ii, index in enumerate(new_indices_needed):
|
|
961
|
+
if index in loaded_rgb_map:
|
|
962
|
+
final_rgb.append(loaded_rgb_map[index])
|
|
963
|
+
final_names.append(loaded_name_map.get(index, f"{index}_unknown"))
|
|
964
|
+
else:
|
|
965
|
+
new_rgb_row = [index, np.random.rand(), np.random.rand(), np.random.rand(), 1]
|
|
966
|
+
final_rgb.append(new_rgb_row)
|
|
967
|
+
final_names.append(f"{index}_structure_unknown")
|
|
968
|
+
|
|
969
|
+
# Ensure the special "Combined" color exists
|
|
970
|
+
if COMBINED_COLOR_ID not in {int(row[0]) for row in final_rgb}:
|
|
971
|
+
final_rgb.append([COMBINED_COLOR_ID, 1, 0, 0, 1])
|
|
972
|
+
final_names.append(f"{COMBINED_COLOR_ID}_Combined")
|
|
973
|
+
|
|
974
|
+
|
|
975
|
+
# Update the application state directly on the passed instance
|
|
976
|
+
app_instance.color_index_rgb, app_instance.color_name, app_instance.colorsCombinations = \
|
|
977
|
+
generate_color_scheme_info(app_instance,np.array(final_rgb), final_names)
|
|
978
|
+
|
|
979
|
+
widgets_num = [0, 1, 2, 3, 4, 5, 10, 11, 13, 23]
|
|
980
|
+
for num in widgets_num:
|
|
981
|
+
name = 'openGLWidget_' + str(num + 1)
|
|
982
|
+
widget = getattr(app_instance, name)
|
|
983
|
+
if hasattr(widget, 'colorsCombinations'):
|
|
984
|
+
widget.colorsCombinations = app_instance.colorsCombinations
|
|
985
|
+
if hasattr(widget, 'color_name'):
|
|
986
|
+
widget.color_name = app_instance.color_name
|
|
987
|
+
|
|
988
|
+
# 4. Update the UI components
|
|
989
|
+
if update_widget:
|
|
990
|
+
_update_ui_widgets(app_instance)
|
|
991
|
+
|
|
992
|
+
return data, True
|
|
993
|
+
|
|
994
|
+
|
|
995
|
+
def update_color_scheme0(self, data, data_add=None, dialog=True, update_widget=True):
|
|
926
996
|
"""
|
|
927
997
|
Updating current color scheme
|
|
928
998
|
Args:
|
|
@@ -935,7 +1005,7 @@ def update_color_scheme(self, data, data_add=None, dialog=True, update_widget=Tr
|
|
|
935
1005
|
|
|
936
1006
|
"""
|
|
937
1007
|
if data_add is not None:
|
|
938
|
-
uq1 = [l for l in np.unique(data_add) if l > 0]
|
|
1008
|
+
uq1 = [l for l in np.unique(data_add).astype('int') if l > 0]
|
|
939
1009
|
else:
|
|
940
1010
|
uq1 = []
|
|
941
1011
|
if data is None:
|
|
@@ -963,13 +1033,13 @@ def update_color_scheme(self, data, data_add=None, dialog=True, update_widget=Tr
|
|
|
963
1033
|
print('automatic files')
|
|
964
1034
|
len_u = len(np.unique(data))
|
|
965
1035
|
if len_u<=2:
|
|
966
|
-
filen =
|
|
1036
|
+
filen = settings.RESOURCE_DIR + '/color/Simple.txt'
|
|
967
1037
|
elif len_u<=9:
|
|
968
|
-
filen =
|
|
1038
|
+
filen = settings.RESOURCE_DIR + '/color/Tissue.txt'
|
|
969
1039
|
elif len_u <90:
|
|
970
|
-
filen =
|
|
1040
|
+
filen = settings.RESOURCE_DIR + '/color/albert_LUT.txt'
|
|
971
1041
|
else:
|
|
972
|
-
filen =
|
|
1042
|
+
filen = settings.RESOURCE_DIR + '/color/mcrib_LUT.txt'
|
|
973
1043
|
from_one = False
|
|
974
1044
|
try:
|
|
975
1045
|
possible_color_name, possible_color_index_rgb, _ = read_txt_color(filen, from_one=from_one, mode='albert')
|
|
@@ -1007,7 +1077,7 @@ def update_color_scheme(self, data, data_add=None, dialog=True, update_widget=Tr
|
|
|
1007
1077
|
possible_color_index_rgb = np.vstack((possible_color_index_rgb, np.array(new_color_rgb)))
|
|
1008
1078
|
|
|
1009
1079
|
#self.color_index_rgb, self.color_name, self.colorsCombinations = combinedIndex(self.colorsCombinations, possible_color_index_rgb, possible_color_name, np.unique(data), uq1)
|
|
1010
|
-
self.color_index_rgb, self.color_name, self.colorsCombinations = generate_color_scheme_info(possible_color_index_rgb, possible_color_name)
|
|
1080
|
+
self.color_index_rgb, self.color_name, self.colorsCombinations = generate_color_scheme_info(self, possible_color_index_rgb, possible_color_name)
|
|
1011
1081
|
try:
|
|
1012
1082
|
#self.dw2_cb.currentTextChanged.disconnect(self.changeColorPen)
|
|
1013
1083
|
self.tree_colors.itemChanged.disconnect(self.changeColorPen)
|
|
@@ -1193,7 +1263,7 @@ def getUnique(mat):
|
|
|
1193
1263
|
return np.unique(mat)
|
|
1194
1264
|
|
|
1195
1265
|
###################### Generate info for color schemes ##################
|
|
1196
|
-
def generate_color_scheme_info(color_index_rgb, color_name):
|
|
1266
|
+
def generate_color_scheme_info(reader, color_index_rgb, color_name):
|
|
1197
1267
|
"""
|
|
1198
1268
|
Generate color scheme information
|
|
1199
1269
|
Args:
|
|
@@ -1258,7 +1328,77 @@ def set_new_color_scheme(self):
|
|
|
1258
1328
|
addTreeRoot(parent, '9876', 'Combined', colr)
|
|
1259
1329
|
|
|
1260
1330
|
################# SET IMAGE SCHEME ###########################
|
|
1261
|
-
|
|
1331
|
+
from PyQt5 import QtGui, QtCore
|
|
1332
|
+
import os
|
|
1333
|
+
import numpy as np
|
|
1334
|
+
|
|
1335
|
+
# Place this helper method inside your main class
|
|
1336
|
+
def _is_image_already_added(self, file_path, view_index):
|
|
1337
|
+
"""Checks if an image has already been added to a specific view."""
|
|
1338
|
+
for item_data in self.imported_images:
|
|
1339
|
+
existing_file = item_data[0][0][0]
|
|
1340
|
+
existing_view_index = item_data[0][0][2]
|
|
1341
|
+
if file_path == existing_file and view_index == existing_view_index:
|
|
1342
|
+
return True
|
|
1343
|
+
return False
|
|
1344
|
+
|
|
1345
|
+
# Your updated function
|
|
1346
|
+
def update_image_sch(self, info=None, color=[1, 1, 0], loaded=False):
|
|
1347
|
+
"""
|
|
1348
|
+
Sets a new color scheme and adds items for multiple images.
|
|
1349
|
+
"""
|
|
1350
|
+
# SUGGESTION: Add a guard clause for safety
|
|
1351
|
+
if info is None:
|
|
1352
|
+
return
|
|
1353
|
+
|
|
1354
|
+
if hasattr(self, 'tree_images'):
|
|
1355
|
+
parent = self.tree_images.model().sourceModel().invisibleRootItem()
|
|
1356
|
+
fileObj, index, index_view = info
|
|
1357
|
+
|
|
1358
|
+
# Determine the description string for the view
|
|
1359
|
+
if index >= 3:
|
|
1360
|
+
indc = f'View {index_view + 1} (seg)'
|
|
1361
|
+
else:
|
|
1362
|
+
indc = f'View {index_view + 1}'
|
|
1363
|
+
|
|
1364
|
+
color_255 = [int(c * 255) for c in color]
|
|
1365
|
+
|
|
1366
|
+
for file in fileObj[0]:
|
|
1367
|
+
if '*' in file:
|
|
1368
|
+
continue
|
|
1369
|
+
|
|
1370
|
+
# SUGGESTION: Use the clearer helper function
|
|
1371
|
+
if not _is_image_already_added(self, file, index_view):
|
|
1372
|
+
self.imported_images.append([[[file, fileObj[1], index_view], index], color, loaded, indc])
|
|
1373
|
+
else:
|
|
1374
|
+
# If it already exists, skip adding it to the tree
|
|
1375
|
+
continue
|
|
1376
|
+
|
|
1377
|
+
# --- Create Tree Items ---
|
|
1378
|
+
node1 = QtGui.QStandardItem(indc)
|
|
1379
|
+
node1.setForeground(QtGui.QBrush(QtGui.QColor(*color_255)))
|
|
1380
|
+
node1.setData(index_view)
|
|
1381
|
+
|
|
1382
|
+
# SUGGESTION: Set flags correctly to prevent the double-toggle bug
|
|
1383
|
+
# DO NOT include ItemIsUserCheckable
|
|
1384
|
+
node1.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsTristate)
|
|
1385
|
+
node1.setCheckable(True)
|
|
1386
|
+
node1.setFlags(node1.flags() & QtCore.Qt.ItemIsUserCheckable)
|
|
1387
|
+
|
|
1388
|
+
# Set initial check state
|
|
1389
|
+
node1.setCheckState(QtCore.Qt.Checked if loaded else QtCore.Qt.Unchecked)
|
|
1390
|
+
|
|
1391
|
+
descp = os.path.basename(file)
|
|
1392
|
+
node2 = QtGui.QStandardItem(descp)
|
|
1393
|
+
node2.setForeground(QtGui.QBrush(QtGui.QColor(*color_255)))
|
|
1394
|
+
# SUGGESTION: No need for flags on a non-checkable item
|
|
1395
|
+
# node2.setFlags(...)
|
|
1396
|
+
#node2.setFlags(node2.flags() | QtCore.Qt.ItemIsTristate)
|
|
1397
|
+
|
|
1398
|
+
parent.appendRow([node1, node2])
|
|
1399
|
+
|
|
1400
|
+
|
|
1401
|
+
def update_image_sch_to_remove(self, info=None, color = [1,1,0],loaded = False):
|
|
1262
1402
|
"""
|
|
1263
1403
|
SET new color scheme to read multiple images
|
|
1264
1404
|
Args:
|
|
@@ -1395,7 +1535,8 @@ def clean_parent_image2(self, filename, indc,index_view):
|
|
|
1395
1535
|
if signal.checkState() == Qt.Checked:
|
|
1396
1536
|
if signal.text() in indc:
|
|
1397
1537
|
try:
|
|
1398
|
-
self.tree_images.model().sourceModel().itemChanged.disconnect(self.changeImage)
|
|
1538
|
+
#self.tree_images.model().sourceModel().itemChanged.disconnect(self.changeImage)
|
|
1539
|
+
self.tree_images.clicked.disconnect(self.on_row_clicked_image)
|
|
1399
1540
|
except:
|
|
1400
1541
|
pass
|
|
1401
1542
|
signal.setCheckState(Qt.Unchecked)
|
|
@@ -1403,7 +1544,8 @@ def clean_parent_image2(self, filename, indc,index_view):
|
|
|
1403
1544
|
#if indc in info[0][1]:
|
|
1404
1545
|
indices.append(i)
|
|
1405
1546
|
try:
|
|
1406
|
-
self.tree_images.model().sourceModel().itemChanged.connect(self.changeImage)
|
|
1547
|
+
#self.tree_images.model().sourceModel().itemChanged.connect(self.changeImage)
|
|
1548
|
+
self.tree_images.clicked.connect(self.on_row_clicked_image)
|
|
1407
1549
|
except:
|
|
1408
1550
|
pass
|
|
1409
1551
|
for ind in indices:
|
|
@@ -1426,12 +1568,14 @@ def clean_parent_image(self, index_row, indc,index_view):
|
|
|
1426
1568
|
if signal.checkState() == Qt.Checked:
|
|
1427
1569
|
if signal.text() in indc:
|
|
1428
1570
|
try:
|
|
1429
|
-
self.tree_images.model().sourceModel().itemChanged.disconnect(self.changeImage)
|
|
1571
|
+
#self.tree_images.model().sourceModel().itemChanged.disconnect(self.changeImage)
|
|
1572
|
+
self.tree_images.clicked.disconnect(self.on_row_clicked_image)
|
|
1430
1573
|
except:
|
|
1431
1574
|
pass
|
|
1432
1575
|
signal.setCheckState(Qt.Unchecked)
|
|
1433
1576
|
try:
|
|
1434
|
-
self.tree_images.model().sourceModel().itemChanged.connect(self.changeImage)
|
|
1577
|
+
#self.tree_images.model().sourceModel().itemChanged.connect(self.changeImage)
|
|
1578
|
+
self.tree_images.clicked.connect(self.on_row_clicked_image)
|
|
1435
1579
|
except:
|
|
1436
1580
|
pass
|
|
1437
1581
|
|
|
@@ -1533,6 +1677,8 @@ def read_txt_color(file, mode ='lut', from_one= False):
|
|
|
1533
1677
|
|
|
1534
1678
|
#color_name = [l.split('\t')[0]+"_"+l.split('\t')[-1][1:-2] for l in lines[id:]]
|
|
1535
1679
|
#color_name = [[r for r in re.sub(r'\s+', ' ', l).split() if r != '' and r!='\n'][0] + "_"+' '.join([r.replace('"', '') for r in re.sub(r'\s+', ' ', l[:-1]).split() if r != '' and r!='\n'][indices_non_numeric]) for l in lines[id:] if l[0]!='#']
|
|
1680
|
+
lines = [l for l in lines if l.strip() and not l.strip().startswith('#')]
|
|
1681
|
+
id = 0
|
|
1536
1682
|
color_name = [[r for r in re.sub(r'\s+', ' ', l).split() if r != '' and r!='\n'][0] + "_"+"".join([r.replace('"', '') for r in re.sub(r'\s+', ' ', l[:-1]).split() if r != '' and r!='\n'][indices_non_numeric]) for l in lines[id:] if l[0]!='#']
|
|
1537
1683
|
indices_el = [int([r for r in re.sub(r'\s+', ' ', l).split() if r != '' and r != '\n'][0]) for l in lines[id:] if l[0] != '#']
|
|
1538
1684
|
color_index_rgb = np.array([[int(float(s)) for s in [r for r in re.sub(r'\s+', ' ', l).split() if r != '' and r != '\n'][index_colr_start:index_colr_end]] for l in
|
|
@@ -1675,29 +1821,29 @@ def vox2ref(affine, ref):
|
|
|
1675
1821
|
###################### Cursors ######################
|
|
1676
1822
|
|
|
1677
1823
|
def cursorOpenHand():
|
|
1678
|
-
bitmap = QtGui.QPixmap(
|
|
1824
|
+
bitmap = QtGui.QPixmap(settings.RESOURCE_DIR+"/Hand.png")
|
|
1679
1825
|
return QtGui.QCursor(bitmap)
|
|
1680
1826
|
|
|
1681
1827
|
def cursorClosedHand():
|
|
1682
|
-
bitmap = QtGui.QPixmap(
|
|
1828
|
+
bitmap = QtGui.QPixmap(settings.RESOURCE_DIR+"/Handsqueezed.png")
|
|
1683
1829
|
return QtGui.QCursor(bitmap)
|
|
1684
1830
|
def cursorZoomIn():
|
|
1685
|
-
bitmap = QtGui.QPixmap(
|
|
1831
|
+
bitmap = QtGui.QPixmap(settings.RESOURCE_DIR+"/zoom_in.png")
|
|
1686
1832
|
return QtGui.QCursor(bitmap)
|
|
1687
1833
|
def cursorZoomOut():
|
|
1688
|
-
bitmap = QtGui.QPixmap(
|
|
1834
|
+
bitmap = QtGui.QPixmap(settings.RESOURCE_DIR+"/zoom_out.png")
|
|
1689
1835
|
return QtGui.QCursor(bitmap)
|
|
1690
1836
|
def cursorRotate():
|
|
1691
|
-
bitmap = QtGui.QPixmap(
|
|
1837
|
+
bitmap = QtGui.QPixmap(settings.RESOURCE_DIR+"/rotate.png")
|
|
1692
1838
|
return QtGui.QCursor(bitmap)
|
|
1693
1839
|
def cursorArrow():
|
|
1694
|
-
#bitmap = QtGui.QPixmap(
|
|
1840
|
+
#bitmap = QtGui.QPixmap(settings.RESOURCE_DIR+"/arrow.png")
|
|
1695
1841
|
return QtGui.QCursor(Qt.ArrowCursor)
|
|
1696
1842
|
def cursorPaint():
|
|
1697
|
-
bitmap = QtGui.QPixmap(
|
|
1843
|
+
bitmap = QtGui.QPixmap(settings.RESOURCE_DIR+"/HandwritingPlus.png")
|
|
1698
1844
|
return QtGui.QCursor(bitmap)
|
|
1699
1845
|
def cursorPaintX():
|
|
1700
|
-
bitmap = QtGui.QPixmap(
|
|
1846
|
+
bitmap = QtGui.QPixmap(settings.RESOURCE_DIR+"/HandwritingPlusX.png")
|
|
1701
1847
|
return QtGui.QCursor(bitmap)
|
|
1702
1848
|
def cursorCircle(size = 50):
|
|
1703
1849
|
|
|
@@ -1731,10 +1877,10 @@ def cursorCircle(size = 50):
|
|
|
1731
1877
|
return QtGui.QCursor(pil_image_to_qpixmap(image))
|
|
1732
1878
|
|
|
1733
1879
|
def cursorErase():
|
|
1734
|
-
bitmap = QtGui.QPixmap(
|
|
1880
|
+
bitmap = QtGui.QPixmap(settings.RESOURCE_DIR+"/HandwritingMinus.png")
|
|
1735
1881
|
return QtGui.QCursor(bitmap)
|
|
1736
1882
|
def cursorEraseX():
|
|
1737
|
-
bitmap = QtGui.QPixmap(
|
|
1883
|
+
bitmap = QtGui.QPixmap(settings.RESOURCE_DIR+"/HandwritingMinusX.png")
|
|
1738
1884
|
return QtGui.QCursor(bitmap)
|
|
1739
1885
|
|
|
1740
1886
|
###################### locate proper widgets ######################
|
|
@@ -3785,8 +3931,9 @@ def histogram_equalization(source):
|
|
|
3785
3931
|
import cv2
|
|
3786
3932
|
# Reshape the 3D image into a 2D array with shape (num_slices, height * width)
|
|
3787
3933
|
num_slices, height, width = image.shape
|
|
3934
|
+
image = normalize_mri(image)
|
|
3788
3935
|
flattened_image = image.reshape((num_slices, height * width))
|
|
3789
|
-
flattened_image = normalize_mri(flattened_image)
|
|
3936
|
+
#flattened_image = normalize_mri(flattened_image)
|
|
3790
3937
|
# Apply histogram equalization to the flattened image
|
|
3791
3938
|
if method=='ehist':
|
|
3792
3939
|
alg = cv2.equalizeHist
|