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
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
import torch
|
|
2
|
+
import torch.nn.functional as F
|
|
3
|
+
import torch.nn as nn
|
|
4
|
+
import ants
|
|
5
|
+
import nibabel as nib
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
from scipy.ndimage import gaussian_filter
|
|
9
|
+
from scipy.ndimage import zoom
|
|
10
|
+
|
|
11
|
+
def intensity_res(imT1, prob):
|
|
12
|
+
# Avoid division by zero
|
|
13
|
+
eps = 1e-5
|
|
14
|
+
|
|
15
|
+
# Ensure input tensors are on the same device (e.g., CUDA or CPU)
|
|
16
|
+
imT1 = imT1.float() # Ensure imT1 is a float tensor
|
|
17
|
+
prob = prob.float() # Ensure prob is a float tensor
|
|
18
|
+
|
|
19
|
+
# Broadcast imT1 to match the shape of prob (B, K, D, H, W)
|
|
20
|
+
if imT1.shape[1] == 1:
|
|
21
|
+
imT1_broadcast = imT1.expand(-1, prob.shape[1], -1, -1, -1) # Broadcast imT1 to (B, K, D, H, W)
|
|
22
|
+
else:
|
|
23
|
+
imT1_broadcast = imT1 # (B, K, D, H, W), no need to broadcast if shapes already match
|
|
24
|
+
|
|
25
|
+
# Mean: mu_k shape (B, K)
|
|
26
|
+
sum_prob = torch.sum(prob, dim=(2, 3, 4)) # Sum over the spatial dimensions
|
|
27
|
+
mu_k = torch.sum(prob * imT1_broadcast, dim=(2, 3, 4)) / (sum_prob + eps)
|
|
28
|
+
|
|
29
|
+
# Variance: var_k shape (B, K)
|
|
30
|
+
mu_k_broadcast = mu_k.unsqueeze(-1).unsqueeze(-1).unsqueeze(-1) # (B, K, 1, 1, 1) for broadcasting
|
|
31
|
+
var_k = torch.sum(prob * (imT1_broadcast - mu_k_broadcast) ** 2, dim=(2, 3, 4)) / (sum_prob + eps)
|
|
32
|
+
|
|
33
|
+
# Standard deviation: std_k shape (B, K)
|
|
34
|
+
std_k = torch.sqrt(var_k + eps)
|
|
35
|
+
|
|
36
|
+
# Expand for broadcasting
|
|
37
|
+
mu = mu_k.unsqueeze(-1).unsqueeze(-1).unsqueeze(-1) # shape (B, K, 1, 1, 1)
|
|
38
|
+
std = std_k.unsqueeze(-1).unsqueeze(-1).unsqueeze(-1) # shape (B, K, 1, 1, 1)
|
|
39
|
+
|
|
40
|
+
# Log-likelihood under Gaussian model
|
|
41
|
+
log_likelihood = -0.5 * ((imT1_broadcast - mu) ** 2) / (std ** 2 + eps) \
|
|
42
|
+
- torch.log(std + eps) \
|
|
43
|
+
- 0.5 * np.log(2 * np.pi)
|
|
44
|
+
|
|
45
|
+
# Softmax across regions (K) to get confidence weights
|
|
46
|
+
logits = log_likelihood
|
|
47
|
+
logits_max = torch.max(logits, dim=1, keepdim=True).values # Numerical stability (subtract max)
|
|
48
|
+
exp_logits = torch.exp(logits - logits_max) # for numerical stability
|
|
49
|
+
confidence_weights = exp_logits / (torch.sum(exp_logits, dim=1, keepdim=True) + eps) # shape (B, K, D, H, W)
|
|
50
|
+
|
|
51
|
+
return confidence_weights
|
|
52
|
+
|
|
53
|
+
def create_image_from_prob(imT1, prob_value):
|
|
54
|
+
topk_probs, topk_labels = torch.topk(prob_value, k=1, dim=1)
|
|
55
|
+
|
|
56
|
+
centers = (prob_value * imT1).sum(dim=[2, 3, 4]) / (prob_value.sum(dim=[2, 3, 4]) + 1e-5) # shape [B, C]
|
|
57
|
+
# Reshape centers for broadcasting: [B, C, 1, 1, 1]
|
|
58
|
+
centers_expanded = centers.view(centers.shape[0], centers.shape[1], 1, 1, 1)
|
|
59
|
+
# Expand to match spatial dims of topk_labels: [B, C, D, H, W]
|
|
60
|
+
centers_expanded = centers_expanded.expand(-1, -1, *topk_labels.shape[2:])
|
|
61
|
+
# Make sure topk_labels is shaped for indexing: [B, 1, D, H, W] (for class/channel selection)
|
|
62
|
+
# It should be long/int type
|
|
63
|
+
topk_labels = topk_labels.long() # Add channel dim for gather
|
|
64
|
+
# Gather values: [B, 1, D, H, W]
|
|
65
|
+
new_image = torch.gather(centers_expanded, dim=1, index=topk_labels)
|
|
66
|
+
|
|
67
|
+
return new_image
|
|
68
|
+
|
|
69
|
+
def write_to_file(prob_atlas_size,mask_original, mask_new, prob_new, pathOrigin):
|
|
70
|
+
imA = read_atlas_file(pathOrigin, rewrite_to_file=True)
|
|
71
|
+
|
|
72
|
+
mask_original = mask_original.squeeze().detach().cpu().numpy()
|
|
73
|
+
mask_original = nib.Nifti1Image(mask_original.astype(np.int16), affine=imA.affine, header=imA.header)
|
|
74
|
+
|
|
75
|
+
mask_original.to_filename(mask_new)
|
|
76
|
+
|
|
77
|
+
prob_atlas_size = prob_atlas_size.squeeze().detach().cpu().numpy()
|
|
78
|
+
prob_atlas_size = nib.Nifti1Image(prob_atlas_size, affine=imA.affine, header=imA.header)
|
|
79
|
+
|
|
80
|
+
prob_atlas_size.to_filename(prob_new)
|
|
81
|
+
print(f'OutProb_original: {prob_new}')
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class Histogram_Matching(nn.Module):
|
|
86
|
+
def __init__(self, differentiable=True, bins=32, sigma=None):
|
|
87
|
+
super(Histogram_Matching, self).__init__()
|
|
88
|
+
self.differentiable = differentiable
|
|
89
|
+
self.bins = bins
|
|
90
|
+
self.sigma = sigma if sigma is not None else 5.0
|
|
91
|
+
|
|
92
|
+
def forward(self, dst, ref):
|
|
93
|
+
B, C, D, H, W = dst.shape
|
|
94
|
+
assert dst.device == ref.device
|
|
95
|
+
|
|
96
|
+
hist_dst = self.cal_hist(dst)
|
|
97
|
+
hist_ref = self.cal_hist(ref)
|
|
98
|
+
|
|
99
|
+
tables = self.cal_trans_batch(hist_dst, hist_ref)
|
|
100
|
+
|
|
101
|
+
dst_flat = dst.view(B*C, -1) * (self.bins - 1) # scale intensities
|
|
102
|
+
dst_flat = dst_flat.unsqueeze(2) # (B*C, N, 1)
|
|
103
|
+
|
|
104
|
+
indices = torch.linspace(0, self.bins-1, self.bins, device=dst.device).view(1, 1, -1) # (1,1,bins)
|
|
105
|
+
|
|
106
|
+
weights = torch.softmax(-((dst_flat - indices)**2) / (2*(self.sigma**2)), dim=-1) # (B*C, N, bins)
|
|
107
|
+
|
|
108
|
+
matched = torch.bmm(weights, tables.unsqueeze(-1)).squeeze(-1) # (B*C, N)
|
|
109
|
+
|
|
110
|
+
matched = matched.view(B, C, D, H, W) / (self.bins - 1) # back to [0,1]
|
|
111
|
+
|
|
112
|
+
return matched
|
|
113
|
+
|
|
114
|
+
def cal_hist(self, img):
|
|
115
|
+
B, C, D, H, W = img.shape
|
|
116
|
+
if self.differentiable:
|
|
117
|
+
hists = self.soft_histc_batch(img * (self.bins - 1))
|
|
118
|
+
else:
|
|
119
|
+
hists = torch.stack([
|
|
120
|
+
torch.histc(img[b, c] * (self.bins - 1), bins=self.bins, min=0, max=self.bins-1)
|
|
121
|
+
for b in range(B) for c in range(C)
|
|
122
|
+
])
|
|
123
|
+
hists = F.normalize(hists.float(), p=1, dim=1)
|
|
124
|
+
cdfs = torch.cumsum(hists, dim=1)
|
|
125
|
+
return cdfs
|
|
126
|
+
|
|
127
|
+
def soft_histc_batch(self, x):
|
|
128
|
+
B, C, D, H, W = x.shape
|
|
129
|
+
x = x.view(B*C, -1)
|
|
130
|
+
|
|
131
|
+
delta = 1.0
|
|
132
|
+
centers = torch.linspace(0, self.bins-1, self.bins, device=x.device).float()
|
|
133
|
+
centers = centers[None, :, None] # (1, bins, 1)
|
|
134
|
+
|
|
135
|
+
x = x.unsqueeze(1) # (B*C, 1, N)
|
|
136
|
+
|
|
137
|
+
soft_bins = torch.sigmoid((x - centers + delta/2) * self.sigma) - torch.sigmoid((x - centers - delta/2) * self.sigma)
|
|
138
|
+
soft_hist = soft_bins.sum(dim=2) # (B*C, bins)
|
|
139
|
+
|
|
140
|
+
return soft_hist
|
|
141
|
+
|
|
142
|
+
def cal_trans_batch(self, cdf_src, cdf_ref):
|
|
143
|
+
Bc, bins = cdf_src.shape
|
|
144
|
+
cdf_src = cdf_src.unsqueeze(2) # (B*C, bins, 1)
|
|
145
|
+
cdf_ref = cdf_ref.unsqueeze(1) # (B*C, 1, bins)
|
|
146
|
+
|
|
147
|
+
dist = torch.abs(cdf_src - cdf_ref) # (B*C, bins, bins)
|
|
148
|
+
|
|
149
|
+
mapping = dist.argmin(dim=2) # (B*C, bins)
|
|
150
|
+
|
|
151
|
+
return mapping.float()
|
|
152
|
+
|
|
153
|
+
def erode_mask(mask, radius=1):
|
|
154
|
+
kernel = torch.ones((1, 1, 2*radius+1, 2*radius+1, 2*radius+1), device=mask.device)
|
|
155
|
+
padded = F.pad(mask.float(), [radius]*6, mode='replicate')
|
|
156
|
+
eroded = F.conv3d(padded, kernel) == kernel.numel()
|
|
157
|
+
return eroded.float()
|
|
158
|
+
|
|
159
|
+
def adjust_probs_with_uncertainty(probs, uncertainty, min_temp=1.0, max_temp=5.0):
|
|
160
|
+
# Normalize uncertainty to [0, 1]
|
|
161
|
+
norm_unc = (uncertainty - uncertainty.min()) / (uncertainty.max() - uncertainty.min() + 1e-5)
|
|
162
|
+
|
|
163
|
+
# Convert normalized uncertainty to temperature (higher temp = more smoothing)
|
|
164
|
+
temp = min_temp + (max_temp - min_temp) * norm_unc # shape: (B, 1, D, H, W)
|
|
165
|
+
|
|
166
|
+
# To avoid instability, apply temp scaling in log-space
|
|
167
|
+
log_probs = torch.log(probs + 1e-8)
|
|
168
|
+
log_probs_scaled = log_probs / temp # broadcast over channels
|
|
169
|
+
|
|
170
|
+
probs_adj = F.softmax(log_probs_scaled, dim=1)
|
|
171
|
+
return probs_adj
|
|
172
|
+
|
|
173
|
+
def get_back_to_size_torch(img: torch.Tensor, pad_width):
|
|
174
|
+
(pad_x, pad_y, pad_z) = pad_width
|
|
175
|
+
pad_x1, pad_x2 = pad_x
|
|
176
|
+
pad_y1, pad_y2 = pad_y
|
|
177
|
+
pad_z1, pad_z2 = pad_z
|
|
178
|
+
|
|
179
|
+
unpadded_img = img[
|
|
180
|
+
...,
|
|
181
|
+
pad_x1 : -pad_x2 if pad_x2 > 0 else None,
|
|
182
|
+
pad_y1 : -pad_y2 if pad_y2 > 0 else None,
|
|
183
|
+
pad_z1 : -pad_z2 if pad_z2 > 0 else None,
|
|
184
|
+
]
|
|
185
|
+
return unpadded_img
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def calculate_jacobian_determinant_3d(flow):
|
|
189
|
+
"""Calculates the Jacobian determinant of a 3D deformation field."""
|
|
190
|
+
B, _, D, H, W = flow.shape
|
|
191
|
+
device = flow.device
|
|
192
|
+
grid_z, grid_y, grid_x = torch.meshgrid(torch.arange(D, device=device), torch.arange(H, device=device),
|
|
193
|
+
torch.arange(W, device=device), indexing='ij')
|
|
194
|
+
grid = torch.stack((grid_x, grid_y, grid_z), dim=0).float()
|
|
195
|
+
grid = grid.unsqueeze(0).repeat(B, 1, 1, 1, 1)
|
|
196
|
+
transform_map = grid + flow
|
|
197
|
+
|
|
198
|
+
diff_x = transform_map[..., 1:] - transform_map[..., :-1]
|
|
199
|
+
grad_x = torch.cat([diff_x, diff_x[..., -1:]], dim=-1)
|
|
200
|
+
diff_y = transform_map[..., 1:, :] - transform_map[..., :-1, :]
|
|
201
|
+
grad_y = torch.cat([diff_y, diff_y[..., -1:, :]], dim=-2)
|
|
202
|
+
diff_z = transform_map[:, :, 1:, :, :] - transform_map[:, :, :-1, :, :]
|
|
203
|
+
grad_z = torch.cat([diff_z, diff_z[:, :, -1:, :, :]], dim=-3)
|
|
204
|
+
|
|
205
|
+
J_xx, J_yx, J_zx = grad_x[:, 0, ...], grad_x[:, 1, ...], grad_x[:, 2, ...]
|
|
206
|
+
J_xy, J_yy, J_zy = grad_y[:, 0, ...], grad_y[:, 1, ...], grad_y[:, 2, ...]
|
|
207
|
+
J_xz, J_yz, J_zz = grad_z[:, 0, ...], grad_z[:, 1, ...], grad_z[:, 2, ...]
|
|
208
|
+
|
|
209
|
+
determinant = (J_xx * (J_yy * J_zz - J_zy * J_yz) - J_xy * (J_yx * J_zz - J_zx * J_yz) + J_xz * (
|
|
210
|
+
J_yx * J_zy - J_zx * J_yy))
|
|
211
|
+
return determinant.unsqueeze(1)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def spatial_transformer_field(image, deformation_field, mode='bilinear'):
|
|
215
|
+
device = image.device
|
|
216
|
+
D, H, W = image.shape[2:]
|
|
217
|
+
d_coords, h_coords, w_coords = torch.meshgrid(torch.linspace(-1, 1, D), torch.linspace(-1, 1, H), torch.linspace(-1, 1, W), indexing='ij')
|
|
218
|
+
identity_grid = torch.stack([w_coords, h_coords, d_coords], dim=-1).unsqueeze(0).to(device)
|
|
219
|
+
scaling = torch.tensor([2 / (W - 1), 2 / (H - 1), 2 / (D - 1)], device=device)
|
|
220
|
+
deformation_field_normalized = deformation_field.permute(0, 2, 3, 4, 1) * scaling
|
|
221
|
+
sampling_grid = identity_grid + deformation_field_normalized
|
|
222
|
+
if mode=='bilinear':
|
|
223
|
+
warped_image = F.grid_sample(image, sampling_grid, mode='bilinear', padding_mode='border', align_corners=True)
|
|
224
|
+
elif mode=='nearest':
|
|
225
|
+
warped_image = warped_image = F.grid_sample(image, sampling_grid, mode='nearest', padding_mode='border', align_corners=True)
|
|
226
|
+
else:
|
|
227
|
+
return None
|
|
228
|
+
return warped_image
|
|
229
|
+
|
|
230
|
+
def augment_based_on_deform_field(source, atlas_probs):
|
|
231
|
+
# Define which ROIs you want to smooth
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
IMAGE_SHAPE = source.shape[2:]
|
|
236
|
+
DEFORMATION_COARSE_GRID = (4, 2, 4)
|
|
237
|
+
DEFORMATION_MAGNITUDE = 8.0 # Max displacement in pixels
|
|
238
|
+
deformation_field = generate_smooth_deformation_field(
|
|
239
|
+
shape=IMAGE_SHAPE,
|
|
240
|
+
coarse_grid_shape=DEFORMATION_COARSE_GRID,
|
|
241
|
+
magnitude=DEFORMATION_MAGNITUDE
|
|
242
|
+
)
|
|
243
|
+
print("Calculating Jacobian determinant...")
|
|
244
|
+
jacobian_map = calculate_jacobian_determinant_3d(deformation_field)
|
|
245
|
+
y_source = spatial_transformer_field(source, deformation_field)
|
|
246
|
+
prob_atlas = spatial_transformer_field(atlas_probs, deformation_field, mode='nearest') # *mask
|
|
247
|
+
# c. Modulate the intensity of the warped image using the Jacobian
|
|
248
|
+
print("Modulating intensity based on deformation...")
|
|
249
|
+
INTENSITY_EFFECT_STRENGTH = 0.8 # How much compression/expansion changes brightness
|
|
250
|
+
INTENSITY_NOISE_LEVEL = 0.01 # How much random noise to add
|
|
251
|
+
modulated_image = modulate_intensity_with_jacobian(
|
|
252
|
+
y_source, prob_atlas, jacobian_map,
|
|
253
|
+
effect_strength=INTENSITY_EFFECT_STRENGTH,
|
|
254
|
+
noise_level=INTENSITY_NOISE_LEVEL
|
|
255
|
+
)
|
|
256
|
+
return modulated_image, prob_atlas
|
|
257
|
+
|
|
258
|
+
# --- NEW FUNCTION ---
|
|
259
|
+
def modulate_intensity_with_jacobian(base_image, atlas, jacobian_map, effect_strength=0.5, noise_level=0.1):
|
|
260
|
+
"""
|
|
261
|
+
Modulates image intensity within ROIs based on local Jacobian values.
|
|
262
|
+
|
|
263
|
+
Args:
|
|
264
|
+
base_image (torch.Tensor): The image to modify (1, 1, D, H, W).
|
|
265
|
+
atlas (torch.Tensor): Atlas with integer labels for ROIs (1, 1, D, H, W).
|
|
266
|
+
jacobian_map (torch.Tensor): The Jacobian determinant map (1, 1, D, H, W).
|
|
267
|
+
effect_strength (float): How strongly the Jacobian affects intensity.
|
|
268
|
+
Positive: compression -> brighter.
|
|
269
|
+
Negative: compression -> darker.
|
|
270
|
+
noise_level (float): The standard deviation of Gaussian noise to add.
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
torch.Tensor: The image with modulated intensities.
|
|
274
|
+
"""
|
|
275
|
+
#modulated_image = base_image.clone()
|
|
276
|
+
|
|
277
|
+
pixels_in_roi = base_image
|
|
278
|
+
jacobian_in_roi = jacobian_map
|
|
279
|
+
|
|
280
|
+
# 1. Calculate the deterministic intensity modulation factor
|
|
281
|
+
# (J-1) centers the effect: J=1 -> no change. J<1 (compression) -> negative.
|
|
282
|
+
|
|
283
|
+
modulation_factor = 1.0 - (jacobian_in_roi - (jacobian_in_roi.mean()+2*jacobian_in_roi.std())) * effect_strength
|
|
284
|
+
|
|
285
|
+
# 2. Create a random noise component
|
|
286
|
+
random_noise = torch.randn_like(pixels_in_roi) * noise_level
|
|
287
|
+
|
|
288
|
+
# 3. Apply the changes
|
|
289
|
+
modified_pixels = pixels_in_roi * modulation_factor + random_noise
|
|
290
|
+
|
|
291
|
+
# Place the modified pixels back into the image
|
|
292
|
+
modulated_image = modified_pixels
|
|
293
|
+
|
|
294
|
+
"""
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
# Process each ROI label found in the atlas
|
|
298
|
+
for label in torch.unique(atlas)[1:]: # Skip background (label 0)
|
|
299
|
+
mask = (atlas == label)
|
|
300
|
+
|
|
301
|
+
# Get the pixels and corresponding Jacobian values for this ROI
|
|
302
|
+
pixels_in_roi = base_image[mask]
|
|
303
|
+
jacobian_in_roi = jacobian_map[mask]
|
|
304
|
+
|
|
305
|
+
# 1. Calculate the deterministic intensity modulation factor
|
|
306
|
+
# (J-1) centers the effect: J=1 -> no change. J<1 (compression) -> negative.
|
|
307
|
+
modulation_factor = 1.0 - (jacobian_in_roi - 1.0) * effect_strength
|
|
308
|
+
|
|
309
|
+
# 2. Create a random noise component
|
|
310
|
+
random_noise = torch.randn_like(pixels_in_roi) * noise_level
|
|
311
|
+
|
|
312
|
+
# 3. Apply the changes
|
|
313
|
+
modified_pixels = pixels_in_roi * modulation_factor + random_noise
|
|
314
|
+
|
|
315
|
+
# Place the modified pixels back into the image
|
|
316
|
+
modulated_image[mask] = modified_pixels
|
|
317
|
+
"""
|
|
318
|
+
return modulated_image
|
|
319
|
+
def generate_smooth_deformation_field(shape, coarse_grid_shape, magnitude):
|
|
320
|
+
|
|
321
|
+
"""
|
|
322
|
+
Generates a smooth, random 3D deformation field.
|
|
323
|
+
|
|
324
|
+
This works by creating a very low-resolution random vector field and then
|
|
325
|
+
upsampling and smoothing it into a high-resolution, plausible deformation.
|
|
326
|
+
|
|
327
|
+
Args:
|
|
328
|
+
shape (tuple): The final shape of the field (D, H, W).
|
|
329
|
+
coarse_grid_shape (tuple): The low-resolution grid size (e.g., (4, 4, 4)).
|
|
330
|
+
magnitude (float): A scaling factor for the displacement strength.
|
|
331
|
+
|
|
332
|
+
Returns:
|
|
333
|
+
torch.Tensor: The smooth deformation field of shape (1, 3, D, H, W).
|
|
334
|
+
"""
|
|
335
|
+
# 1. Create the coarse, random vector field
|
|
336
|
+
coarse_field = np.random.randn(*coarse_grid_shape, 3) * magnitude
|
|
337
|
+
|
|
338
|
+
# 2. Upsample the coarse field to the final shape
|
|
339
|
+
zoom_factors = [s / cs for s, cs in zip(shape, coarse_grid_shape)]
|
|
340
|
+
|
|
341
|
+
# Upsample each displacement channel (x, y, z)
|
|
342
|
+
upsampled_field = np.zeros((*shape, 3))
|
|
343
|
+
for i in range(3):
|
|
344
|
+
upsampled_field[..., i] = zoom(coarse_field[..., i], zoom=zoom_factors, order=3) # Cubic spline interpolation
|
|
345
|
+
|
|
346
|
+
# 3. Smooth the upsampled field to make it physically plausible
|
|
347
|
+
# A large sigma creates very smooth, large-scale deformations.
|
|
348
|
+
smoothed_field = np.zeros_like(upsampled_field)
|
|
349
|
+
for i in range(3):
|
|
350
|
+
smoothed_field[..., i] = gaussian_filter(upsampled_field[..., i], sigma=10)
|
|
351
|
+
|
|
352
|
+
# 4. Convert to a PyTorch tensor and format for the spatial transformer
|
|
353
|
+
# The channels need to be in the second dimension (B, C, D, H, W)
|
|
354
|
+
# The standard for grid_sample is (x, y, z), which corresponds to (W, H, D)
|
|
355
|
+
#flow_tensor = torch.from_numpy(smoothed_field).permute(3, 0, 1, 2).unsqueeze(0).float()
|
|
356
|
+
|
|
357
|
+
# PyTorch flow fields are ordered (x,y,z), corresponding to W,H,D dimensions
|
|
358
|
+
# Our numpy array was D,H,W,C so we permute C,D,H,W
|
|
359
|
+
# Let's re-order the numpy array for clarity before converting to tensor
|
|
360
|
+
smoothed_field_xyz = smoothed_field[..., [2, 1, 0]] # Reorder to x,y,z
|
|
361
|
+
flow_tensor = torch.from_numpy(smoothed_field_xyz).permute(3, 0, 1, 2).unsqueeze(0).float()
|
|
362
|
+
|
|
363
|
+
return flow_tensor
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
def restore_zero_torch(cropped_data: torch.Tensor, original_shape, min_max, value=0):
|
|
367
|
+
"""
|
|
368
|
+
Restore the cropped data back to the original shape with padding (default = 0).
|
|
369
|
+
|
|
370
|
+
:param cropped_data: The cropped tensor from remove_zero
|
|
371
|
+
:param original_shape: The shape of the original full image
|
|
372
|
+
:param min_max: The min/max indices used for cropping
|
|
373
|
+
:param value: The padding value to fill
|
|
374
|
+
:return: Restored full-size tensor
|
|
375
|
+
"""
|
|
376
|
+
if min_max.abs().sum()==0:
|
|
377
|
+
return cropped_data
|
|
378
|
+
B, C, _, _, _ = cropped_data.shape
|
|
379
|
+
W,H, D = original_shape
|
|
380
|
+
restored = torch.full((B,C,W,H,D), value, dtype=cropped_data.dtype, device=cropped_data.device)
|
|
381
|
+
|
|
382
|
+
restored[:,:,
|
|
383
|
+
min_max[0][0]:min_max[0][1] + 1,
|
|
384
|
+
min_max[1][0]:min_max[1][1] + 1,
|
|
385
|
+
min_max[2][0]:min_max[2][1] + 1
|
|
386
|
+
] = cropped_data
|
|
387
|
+
|
|
388
|
+
return restored
|
|
389
|
+
|
|
390
|
+
def change_to_original(im_changed, data, batch_num=0):
|
|
391
|
+
im1 = get_back_to_size_torch(im_changed, data['pad_width'][batch_num])
|
|
392
|
+
im1 = restore_zero_torch(im1, data['shape_original'][batch_num], data['min_max'][batch_num])
|
|
393
|
+
return im1
|
|
394
|
+
|
|
395
|
+
def differentiable_boundary(mask, kernel_size=3):
|
|
396
|
+
"""Returns soft boundary: high when neighbor differs from center."""
|
|
397
|
+
# Laplacian-like filter via average pooling
|
|
398
|
+
pad = kernel_size // 2
|
|
399
|
+
avg_mask = F.avg_pool3d(mask, kernel_size=kernel_size, stride=1, padding=pad)
|
|
400
|
+
return torch.abs(avg_mask - mask)
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
def laplacian_3d(image):
|
|
404
|
+
# 3D Laplacian kernel (center - 6 neighbors)
|
|
405
|
+
kernel = torch.tensor([[[[0, 0, 0],
|
|
406
|
+
[0, -1, 0],
|
|
407
|
+
[0, 0, 0]],
|
|
408
|
+
|
|
409
|
+
[[0, -1, 0],
|
|
410
|
+
[-1, 6, -1],
|
|
411
|
+
[0, -1, 0]],
|
|
412
|
+
|
|
413
|
+
[[0, 0, 0],
|
|
414
|
+
[0, -1, 0],
|
|
415
|
+
[0, 0, 0]]]], dtype=image.dtype, device=image.device)
|
|
416
|
+
|
|
417
|
+
kernel = kernel.unsqueeze(0) # shape: [1, 1, 3, 3, 3]
|
|
418
|
+
|
|
419
|
+
# Apply convolution
|
|
420
|
+
lap = F.conv3d(image, kernel, padding=1)
|
|
421
|
+
return lap
|
|
422
|
+
def soft_erode(img, iterations=3):
|
|
423
|
+
for _ in range(iterations):
|
|
424
|
+
img = -F.max_pool3d(-img, kernel_size=3, stride=1, padding=1)
|
|
425
|
+
return img
|
|
426
|
+
|
|
427
|
+
def soft_skeletonize(img, iterations=3):
|
|
428
|
+
skel = F.relu(img - soft_erode(img, iterations))
|
|
429
|
+
return skel
|
|
430
|
+
def gradient_3d(img):
|
|
431
|
+
dz = img[:, :, 1:, :, :] - img[:, :, :-1, :, :]
|
|
432
|
+
dy = img[:, :, :, 1:, :] - img[:, :, :, :-1, :]
|
|
433
|
+
dx = img[:, :, :, :, 1:] - img[:, :, :, :, :-1]
|
|
434
|
+
return dx, dy, dz
|
|
435
|
+
|
|
436
|
+
def bending_energy_loss(disp):
|
|
437
|
+
"""
|
|
438
|
+
disp: tensor of shape (B, 3, D, H, W), displacement field
|
|
439
|
+
"""
|
|
440
|
+
dx = disp[:, :, 2:, 1:-1, 1:-1] - 2 * disp[:, :, 1:-1, 1:-1, 1:-1] + disp[:, :, :-2, 1:-1, 1:-1]
|
|
441
|
+
dy = disp[:, :, 1:-1, 2:, 1:-1] - 2 * disp[:, :, 1:-1, 1:-1, 1:-1] + disp[:, :, 1:-1, :-2, 1:-1]
|
|
442
|
+
dz = disp[:, :, 1:-1, 1:-1, 2:] - 2 * disp[:, :, 1:-1, 1:-1, 1:-1] + disp[:, :, 1:-1, 1:-1, :-2]
|
|
443
|
+
return (dx.pow(2) + dy.pow(2) + dz.pow(2)).mean()
|
|
444
|
+
|
|
445
|
+
def gm_highest_at_wm_border(P_WM, P_GM, P_BG, P_GM_previous, eps=1e-6):
|
|
446
|
+
"""
|
|
447
|
+
Computes a soft, differentiable metric for:
|
|
448
|
+
where WM touches CSF or BG, is GM the highest?
|
|
449
|
+
"""
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
# Extract individual tissue probs
|
|
453
|
+
wm = P_WM
|
|
454
|
+
gm = P_GM
|
|
455
|
+
bg = P_BG
|
|
456
|
+
|
|
457
|
+
# Define WM border using soft boundary detection
|
|
458
|
+
kernel = torch.zeros((1, 1, 3, 3, 3), device=P_BG.device)
|
|
459
|
+
offsets = [(0, 1, 1), (1, 0, 1), (1, 1, 0),
|
|
460
|
+
(1, 1, 2), (1, 2, 1), (2, 1, 1)]
|
|
461
|
+
for i, j, k in offsets:
|
|
462
|
+
kernel[0, 0, i, j, k] = 1.0
|
|
463
|
+
neighbour_wm = F.conv3d((wm > 0.5).float(), kernel, padding=1)/6. # (B, 1, H, W, D)
|
|
464
|
+
wm_boundary = (neighbour_wm-wm).abs()
|
|
465
|
+
# Compute contact with CSF or BG: high where neighboring probs are nonzero
|
|
466
|
+
csf_or_bg = ( (bg[0]==0)).float()
|
|
467
|
+
touching = (wm_boundary * csf_or_bg)>0 # soft mask for "touching" regions
|
|
468
|
+
gm[touching] = P_GM_previous[touching]
|
|
469
|
+
|
|
470
|
+
return gm # in [0, 1], higher = more GM dominance at WM borders
|
|
@@ -22,10 +22,10 @@ import math
|
|
|
22
22
|
from collections import defaultdict
|
|
23
23
|
from sys import platform
|
|
24
24
|
if platform=='darwin':
|
|
25
|
-
from melage.
|
|
25
|
+
from melage.rendering.helpers.Shaders_120 import vsrc, fsrc, fsrcPaint, vsrcPaint
|
|
26
26
|
else:
|
|
27
|
-
from melage.
|
|
28
|
-
|
|
27
|
+
from melage.rendering.helpers.Shaders_330 import vsrc, fsrc, fsrcPaint, vsrcPaint
|
|
28
|
+
|
|
29
29
|
from melage.utils.utils import LargestCC
|
|
30
30
|
from sklearn.mixture import GaussianMixture
|
|
31
31
|
|
|
@@ -970,97 +970,84 @@ class GLWidget(QOpenGLWidget):
|
|
|
970
970
|
if self.imSlice is None:
|
|
971
971
|
return
|
|
972
972
|
|
|
973
|
-
self.UpdatePaintInfo()
|
|
974
973
|
self.makeObject()
|
|
975
974
|
|
|
976
|
-
|
|
977
975
|
def UpdatePaintInfo(self):
|
|
978
976
|
"""
|
|
979
|
-
Update
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
self.left = imWidth / 2 - (self.zoomed_height * self.windowAR - self.zoomed_width / 2)
|
|
1001
|
-
|
|
1002
|
-
# image right position
|
|
1003
|
-
self.right = self.left + self.zoomed_width
|
|
1004
|
-
else:
|
|
1005
|
-
if ratioX < 1 and ratioY > 1:
|
|
1006
|
-
self.zoomed_height = imHeight
|
|
1007
|
-
self.bottom = 0 #
|
|
1008
|
-
self.top = self.bottom + self.zoomed_height
|
|
1009
|
-
|
|
1010
|
-
self.zoomed_width = ratioY * self.width()
|
|
1011
|
-
self.left = imWidth / 2 - (self.zoomed_height * self.windowAR - self.zoomed_width / 2)
|
|
1012
|
-
self.right = self.left + self.zoomed_width
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
else:
|
|
1016
|
-
self.zoomed_width = imWidth
|
|
1017
|
-
self.left = 0 # -imWidth * (self.windowAR - 1) / 2
|
|
1018
|
-
self.right = self.left + self.zoomed_width
|
|
1019
|
-
|
|
1020
|
-
self.zoomed_height = ratioX * self.height()
|
|
1021
|
-
self.bottom = imHeight / 2 - (self.zoomed_width / self.windowAR - self.zoomed_height / 2)
|
|
1022
|
-
self.top = self.bottom + self.zoomed_height
|
|
977
|
+
Update information of the image with a simplified "fit" scaling.
|
|
978
|
+
|
|
979
|
+
This centers the image and scales it to fit within the window
|
|
980
|
+
while preserving its aspect ratio, creating "letterboxing" or
|
|
981
|
+
"pillarboxing" as needed.
|
|
982
|
+
"""
|
|
983
|
+
# Add a small epsilon to prevent division by zero
|
|
984
|
+
epsilon = 0.000001
|
|
985
|
+
|
|
986
|
+
window_w = self.width()
|
|
987
|
+
window_h = self.height() + epsilon
|
|
988
|
+
img_w = self.imWidth
|
|
989
|
+
img_h = self.imHeight
|
|
990
|
+
#print(f"windw w {window_w} and {window_h}")
|
|
991
|
+
# Handle case where image might not be loaded yet
|
|
992
|
+
if img_w == 0 or img_h == 0:
|
|
993
|
+
self.left = 0
|
|
994
|
+
self.right = window_w
|
|
995
|
+
self.bottom = 0
|
|
996
|
+
self.top = window_h
|
|
997
|
+
return
|
|
1023
998
|
|
|
999
|
+
img_h += epsilon # Add epsilon to image height as well
|
|
1024
1000
|
|
|
1025
|
-
|
|
1001
|
+
# 1. Calculate Aspect Ratios
|
|
1002
|
+
window_ar = window_w / window_h
|
|
1003
|
+
image_ar = img_w / img_h
|
|
1026
1004
|
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1005
|
+
# 2. Compare aspect ratios to determine the limiting dimension
|
|
1006
|
+
if window_ar > image_ar:
|
|
1007
|
+
# --- CASE 1: Window is "wider" than the image ---
|
|
1008
|
+
# The image is "taller" relative to the window.
|
|
1009
|
+
# We are limited by the image's HEIGHT.
|
|
1010
|
+
# This will create "pillarboxing" (black bars on left/right).
|
|
1032
1011
|
|
|
1033
|
-
|
|
1012
|
+
# The view's height will be the image's height
|
|
1013
|
+
view_height = img_h
|
|
1014
|
+
# The view's width must be calculated from the view's height
|
|
1015
|
+
# to match the window's aspect ratio.
|
|
1016
|
+
view_width = view_height * window_ar
|
|
1034
1017
|
|
|
1035
|
-
|
|
1036
|
-
|
|
1018
|
+
# Center the view horizontally around the image's center
|
|
1019
|
+
self.bottom = 0
|
|
1020
|
+
self.top = img_h
|
|
1021
|
+
self.left = (img_w / 2.0) - (view_width / 2.0)
|
|
1022
|
+
self.right = (img_w / 2.0) + (view_width / 2.0)
|
|
1037
1023
|
|
|
1038
1024
|
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1025
|
+
else:
|
|
1026
|
+
# --- CASE 2: Image is "wider" than the window ---
|
|
1027
|
+
# The image is "wider" relative to the window.
|
|
1028
|
+
# We are limited by the image's WIDTH.
|
|
1029
|
+
# This will create "letterboxing" (black bars on top/bottom).
|
|
1043
1030
|
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1031
|
+
# The view's width will be the image's width
|
|
1032
|
+
view_width = img_w
|
|
1033
|
+
# The view's height must be calculated from the view's width
|
|
1034
|
+
# to match the window's aspect ratio.
|
|
1035
|
+
view_height = view_width / window_ar
|
|
1047
1036
|
|
|
1037
|
+
# Center the view vertically around the image's center
|
|
1038
|
+
self.left = 0
|
|
1039
|
+
self.right = img_w
|
|
1040
|
+
self.bottom = (img_h / 2.0) - (view_height / 2.0)
|
|
1041
|
+
self.top = (img_h / 2.0) + (view_height / 2.0)
|
|
1048
1042
|
|
|
1049
|
-
else:
|
|
1050
1043
|
|
|
1051
|
-
self.zoomed_width = imWidth
|
|
1052
|
-
self.left = 0
|
|
1053
|
-
self.right = self.left + self.zoomed_width
|
|
1054
1044
|
|
|
1055
|
-
|
|
1056
|
-
|
|
1045
|
+
# These are just for information, not used by glOrtho
|
|
1046
|
+
self.zoomed_width = view_width
|
|
1047
|
+
self.zoomed_height = view_height
|
|
1057
1048
|
|
|
1058
|
-
self.bottom = imHeight / 2 - (self.zoomed_width / self.windowAR - self.zoomed_height / 2)
|
|
1059
|
-
self.top = self.bottom + self.zoomed_height
|
|
1060
|
-
#if self.currentWidnowName != 'axial' and self.imType == 't1':
|
|
1061
|
-
# self.updateScale( self.width()//2, self.height()//2, 1, 0.5)
|
|
1062
1049
|
self.halfH = self.height() // 2
|
|
1063
|
-
glEnable(GL_NORMALIZE)
|
|
1050
|
+
glEnable(GL_NORMALIZE)
|
|
1064
1051
|
|
|
1065
1052
|
def drawImage(self):
|
|
1066
1053
|
|
|
@@ -1394,6 +1381,7 @@ class GLWidget(QOpenGLWidget):
|
|
|
1394
1381
|
def resizeGL(self, width, height):
|
|
1395
1382
|
if self.imSlice is None:
|
|
1396
1383
|
return
|
|
1384
|
+
self.UpdatePaintInfo()
|
|
1397
1385
|
side = min(width, height)
|
|
1398
1386
|
#Set viewport
|
|
1399
1387
|
glViewport((width- side) // 2, (height-side) // 2, self.imWidth,
|
|
@@ -1613,7 +1601,7 @@ class GLWidget(QOpenGLWidget):
|
|
|
1613
1601
|
else:
|
|
1614
1602
|
self._magic_slice = None
|
|
1615
1603
|
elif self.enabledCircle:
|
|
1616
|
-
# from
|
|
1604
|
+
# from MELAGE.utils.utils import
|
|
1617
1605
|
if self._NenabledCircle > 0 and self.colorInd != 9876:
|
|
1618
1606
|
|
|
1619
1607
|
self._center_circle = []
|
|
@@ -1950,7 +1938,7 @@ class GLWidget(QOpenGLWidget):
|
|
|
1950
1938
|
polErase = ConvertPToPolygons(self.erasePoints) # convert to polygons
|
|
1951
1939
|
self.erasePolygon(polErase)
|
|
1952
1940
|
elif self.enabledCircle:
|
|
1953
|
-
#from
|
|
1941
|
+
#from MELAGE.utils.utils import
|
|
1954
1942
|
if self._NenabledCircle>0:
|
|
1955
1943
|
|
|
1956
1944
|
self._center_circle=[]
|
|
@@ -2077,7 +2065,7 @@ class GLWidget(QOpenGLWidget):
|
|
|
2077
2065
|
seg_c = segmented_image[int(yc_mp)-min_whit[0], int(xc_mp)-min_whit[1]]
|
|
2078
2066
|
(segmented_image-seg_c)
|
|
2079
2067
|
|
|
2080
|
-
from
|
|
2068
|
+
from MELAGE.utils.utils import Threshold_MultiOtsu
|
|
2081
2069
|
num_class = 3
|
|
2082
2070
|
|
|
2083
2071
|
ths = Threshold_MultiOtsu(im1, num_class)
|
|
@@ -3,7 +3,7 @@ __author__= 'Bahram Jafrasteh'
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
import sys
|
|
5
5
|
sys.path.append('../')
|
|
6
|
-
from melage.
|
|
6
|
+
from melage.rendering import GLViewWidget, GLAxisItem, GLScatterPlotItem, GLGridItem, GLVolumeItem, GLPolygonItem
|
|
7
7
|
from OpenGL.GL import *
|
|
8
8
|
from collections import defaultdict
|
|
9
9
|
from PyQt5.QtWidgets import QApplication, QWidget, QMenu, QAction, QSlider, QFileDialog
|