melage 0.0.65__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.
- melage/__init__.py +16 -0
- melage/cli.py +4 -0
- melage/graphics/GLGraphicsItem.py +286 -0
- melage/graphics/GLViewWidget.py +595 -0
- melage/graphics/Transform3D.py +55 -0
- melage/graphics/__init__.py +8 -0
- melage/graphics/functions.py +101 -0
- melage/graphics/items/GLAxisItem.py +149 -0
- melage/graphics/items/GLGridItem.py +178 -0
- melage/graphics/items/GLPolygonItem.py +77 -0
- melage/graphics/items/GLScatterPlotItem.py +135 -0
- melage/graphics/items/GLVolumeItem.py +280 -0
- melage/graphics/items/GLVolumeItem_b.py +237 -0
- melage/graphics/items/__init__.py +0 -0
- melage/graphics/shaders.py +202 -0
- melage/main.py +270 -0
- melage/requirements22.txt +25 -0
- melage/requirements_old.txt +28 -0
- melage/resource/0circle.png +0 -0
- melage/resource/0circle_faded.png +0 -0
- melage/resource/3d.png +0 -0
- melage/resource/3d.psd +0 -0
- melage/resource/3dFaded.png +0 -0
- melage/resource/Eraser.png +0 -0
- melage/resource/EraserFaded.png +0 -0
- melage/resource/EraserX.png +0 -0
- melage/resource/EraserXFaded.png +0 -0
- melage/resource/Eraser_icon.svg +79 -0
- melage/resource/Hand.png +0 -0
- melage/resource/HandIcons_0.png +0 -0
- melage/resource/Hand_IX.png +0 -0
- melage/resource/Hand_IXFaded.png +0 -0
- melage/resource/Handsqueezed.png +0 -0
- melage/resource/Handwriting (copy).png +0 -0
- melage/resource/Handwriting.png +0 -0
- melage/resource/HandwritingMinus.png +0 -0
- melage/resource/HandwritingMinusX.png +0 -0
- melage/resource/HandwritingPlus.png +0 -0
- melage/resource/HandwritingPlusX.png +0 -0
- melage/resource/Move_icon.svg +8 -0
- melage/resource/PngItem_2422924.png +0 -0
- melage/resource/about.png +0 -0
- melage/resource/about_logo.png +0 -0
- melage/resource/about_logo0.png +0 -0
- melage/resource/action_check.png +0 -0
- melage/resource/action_check_OFF.png +0 -0
- melage/resource/arrow).png +0 -0
- melage/resource/arrow.png +0 -0
- melage/resource/arrowFaded.png +0 -0
- melage/resource/arrow_org.png +0 -0
- melage/resource/arrow_org.png.png +0 -0
- melage/resource/arrows.png +0 -0
- melage/resource/authors.mp4 +0 -0
- melage/resource/box.png +0 -0
- melage/resource/check-image-icon-0.jpg +0 -0
- melage/resource/circle.png +0 -0
- melage/resource/circle_faded.png +0 -0
- melage/resource/circle_or.png +0 -0
- melage/resource/close.png +0 -0
- melage/resource/close_bg.png +0 -0
- melage/resource/color/Simple.txt +18 -0
- melage/resource/color/Tissue.txt +24 -0
- melage/resource/color/Tissue12.txt +27 -0
- melage/resource/color/albert_LUT.txt +102 -0
- melage/resource/color/mcrib_LUT.txt +102 -0
- melage/resource/color/pediatric1.txt +29 -0
- melage/resource/color/pediatric1_old.txt +27 -0
- melage/resource/color/pediatric2.txt +87 -0
- melage/resource/color/pediatric3.txt +29 -0
- melage/resource/color/pediatrics (copy).csv +103 -0
- melage/resource/color/tissue_seg.txt +4 -0
- melage/resource/contour.png +0 -0
- melage/resource/contour.svg +2 -0
- melage/resource/contourFaded.png +0 -0
- melage/resource/contourX.png +0 -0
- melage/resource/contourXFaded.png +0 -0
- melage/resource/dti.png +0 -0
- melage/resource/dti0.png +0 -0
- melage/resource/dti222.png +0 -0
- melage/resource/dti_or.png +0 -0
- melage/resource/eco.png +0 -0
- melage/resource/eco22.png +0 -0
- melage/resource/eco_old.png +0 -0
- melage/resource/eco_or.png +0 -0
- melage/resource/eco_or2.png +0 -0
- melage/resource/eco_seg.png +0 -0
- melage/resource/eco_seg_old.png +0 -0
- melage/resource/export.png +0 -0
- melage/resource/hand-grab-icon-10.jpg +0 -0
- melage/resource/hand-grab-icon-25.jpg +0 -0
- melage/resource/info.png +0 -0
- melage/resource/line.png +0 -0
- melage/resource/linefaded.png +0 -0
- melage/resource/load.png +0 -0
- melage/resource/main.ico +0 -0
- melage/resource/manual_images/3D_rightc.png +0 -0
- melage/resource/manual_images/3D_rightc_goto.png +0 -0
- melage/resource/manual_images/3D_rightc_paint.png +0 -0
- melage/resource/manual_images/3D_rightc_paint_draw1.png +0 -0
- melage/resource/manual_images/3D_rightc_paint_draw2.png +0 -0
- melage/resource/manual_images/3D_rightc_paint_render.png +0 -0
- melage/resource/manual_images/3D_rightc_paint_render2.png +0 -0
- melage/resource/manual_images/3D_rightc_paint_render3.png +0 -0
- melage/resource/manual_images/3D_rightc_paint_render4.png +0 -0
- melage/resource/manual_images/3D_rightc_paint_render5.png +0 -0
- melage/resource/manual_images/3D_rightc_paint_render6.png +0 -0
- melage/resource/manual_images/3D_rightc_seg.png +0 -0
- melage/resource/manual_images/exit_toolbar.png +0 -0
- melage/resource/manual_images/load_image_file.png +0 -0
- melage/resource/manual_images/load_image_file_openp.png +0 -0
- melage/resource/manual_images/main_page.png +0 -0
- melage/resource/manual_images/menu_file.png +0 -0
- melage/resource/manual_images/menu_file_export.png +0 -0
- melage/resource/manual_images/menu_file_import.png +0 -0
- melage/resource/manual_images/menu_file_settings.png +0 -0
- melage/resource/manual_images/menu_file_ss.png +0 -0
- melage/resource/manual_images/open_save_load.png +0 -0
- melage/resource/manual_images/panning_toolbar.png +0 -0
- melage/resource/manual_images/segmentation_toolbar.png +0 -0
- melage/resource/manual_images/tab_mri.png +0 -0
- melage/resource/manual_images/tab_us.png +0 -0
- melage/resource/manual_images/tabs.png +0 -0
- melage/resource/manual_images/toolbar_tools.png +0 -0
- melage/resource/manual_images/tools_basic.png +0 -0
- melage/resource/manual_images/tools_bet.png +0 -0
- melage/resource/manual_images/tools_cs.png +0 -0
- melage/resource/manual_images/tools_deepbet.png +0 -0
- melage/resource/manual_images/tools_imageinfo.png +0 -0
- melage/resource/manual_images/tools_maskO.png +0 -0
- melage/resource/manual_images/tools_masking.png +0 -0
- melage/resource/manual_images/tools_n4b.png +0 -0
- melage/resource/manual_images/tools_resize.png +0 -0
- melage/resource/manual_images/tools_ruler.png +0 -0
- melage/resource/manual_images/tools_seg.png +0 -0
- melage/resource/manual_images/tools_threshold.png +0 -0
- melage/resource/manual_images/tools_tools.png +0 -0
- melage/resource/manual_images/widget_color.png +0 -0
- melage/resource/manual_images/widget_color_add.png +0 -0
- melage/resource/manual_images/widget_color_add2.png +0 -0
- melage/resource/manual_images/widget_color_additional.png +0 -0
- melage/resource/manual_images/widget_images.png +0 -0
- melage/resource/manual_images/widget_images2.png +0 -0
- melage/resource/manual_images/widget_images3.png +0 -0
- melage/resource/manual_images/widget_marker.png +0 -0
- melage/resource/manual_images/widget_mri.png +0 -0
- melage/resource/manual_images/widget_mri2.png +0 -0
- melage/resource/manual_images/widget_segintensity.png +0 -0
- melage/resource/manual_images/widget_tab_mutualview.png +0 -0
- melage/resource/manual_images/widget_tab_mutualview2.png +0 -0
- melage/resource/manual_images/widget_table.png +0 -0
- melage/resource/manual_images/widget_table2.png +0 -0
- melage/resource/manual_images/widget_us.png +0 -0
- melage/resource/melage_top.ico +0 -0
- melage/resource/melage_top.png +0 -0
- melage/resource/melage_top0.png +0 -0
- melage/resource/melage_top1.png +0 -0
- melage/resource/melage_top4.png +0 -0
- melage/resource/mri (copy).png +0 -0
- melage/resource/mri.png +0 -0
- melage/resource/mri0.png +0 -0
- melage/resource/mri000.png +0 -0
- melage/resource/mri22.png +0 -0
- melage/resource/mri_big.png +0 -0
- melage/resource/mri_old.png +0 -0
- melage/resource/mri_seg.png +0 -0
- melage/resource/mri_seg_old.png +0 -0
- melage/resource/new.png +0 -0
- melage/resource/open.png +0 -0
- melage/resource/open2.png +0 -0
- melage/resource/pan.png +0 -0
- melage/resource/pencil.png +0 -0
- melage/resource/pencilFaded.png +0 -0
- melage/resource/points.png +0 -0
- melage/resource/pointsFaded.png +0 -0
- melage/resource/rotate.png +0 -0
- melage/resource/ruler.png +0 -0
- melage/resource/rulerFaded.png +0 -0
- melage/resource/s.png +0 -0
- melage/resource/s.psd +0 -0
- melage/resource/save.png +0 -0
- melage/resource/saveas.png +0 -0
- melage/resource/seg_mri.png +0 -0
- melage/resource/seg_mri2.png +0 -0
- melage/resource/settings.png +0 -0
- melage/resource/synch.png +0 -0
- melage/resource/synchFaded.png +0 -0
- melage/resource/theme/rc/.keep +1 -0
- melage/resource/theme/rc/arrow_down.png +0 -0
- melage/resource/theme/rc/arrow_down@2x.png +0 -0
- melage/resource/theme/rc/arrow_down_disabled.png +0 -0
- melage/resource/theme/rc/arrow_down_disabled@2x.png +0 -0
- melage/resource/theme/rc/arrow_down_focus.png +0 -0
- melage/resource/theme/rc/arrow_down_focus@2x.png +0 -0
- melage/resource/theme/rc/arrow_down_pressed.png +0 -0
- melage/resource/theme/rc/arrow_down_pressed@2x.png +0 -0
- melage/resource/theme/rc/arrow_left.png +0 -0
- melage/resource/theme/rc/arrow_left@2x.png +0 -0
- melage/resource/theme/rc/arrow_left_disabled.png +0 -0
- melage/resource/theme/rc/arrow_left_disabled@2x.png +0 -0
- melage/resource/theme/rc/arrow_left_focus.png +0 -0
- melage/resource/theme/rc/arrow_left_focus@2x.png +0 -0
- melage/resource/theme/rc/arrow_left_pressed.png +0 -0
- melage/resource/theme/rc/arrow_left_pressed@2x.png +0 -0
- melage/resource/theme/rc/arrow_right.png +0 -0
- melage/resource/theme/rc/arrow_right@2x.png +0 -0
- melage/resource/theme/rc/arrow_right_disabled.png +0 -0
- melage/resource/theme/rc/arrow_right_disabled@2x.png +0 -0
- melage/resource/theme/rc/arrow_right_focus.png +0 -0
- melage/resource/theme/rc/arrow_right_focus@2x.png +0 -0
- melage/resource/theme/rc/arrow_right_pressed.png +0 -0
- melage/resource/theme/rc/arrow_right_pressed@2x.png +0 -0
- melage/resource/theme/rc/arrow_up.png +0 -0
- melage/resource/theme/rc/arrow_up@2x.png +0 -0
- melage/resource/theme/rc/arrow_up_disabled.png +0 -0
- melage/resource/theme/rc/arrow_up_disabled@2x.png +0 -0
- melage/resource/theme/rc/arrow_up_focus.png +0 -0
- melage/resource/theme/rc/arrow_up_focus@2x.png +0 -0
- melage/resource/theme/rc/arrow_up_pressed.png +0 -0
- melage/resource/theme/rc/arrow_up_pressed@2x.png +0 -0
- melage/resource/theme/rc/base_icon.png +0 -0
- melage/resource/theme/rc/base_icon@2x.png +0 -0
- melage/resource/theme/rc/base_icon_disabled.png +0 -0
- melage/resource/theme/rc/base_icon_disabled@2x.png +0 -0
- melage/resource/theme/rc/base_icon_focus.png +0 -0
- melage/resource/theme/rc/base_icon_focus@2x.png +0 -0
- melage/resource/theme/rc/base_icon_pressed.png +0 -0
- melage/resource/theme/rc/base_icon_pressed@2x.png +0 -0
- melage/resource/theme/rc/branch_closed.png +0 -0
- melage/resource/theme/rc/branch_closed@2x.png +0 -0
- melage/resource/theme/rc/branch_closed_disabled.png +0 -0
- melage/resource/theme/rc/branch_closed_disabled@2x.png +0 -0
- melage/resource/theme/rc/branch_closed_focus.png +0 -0
- melage/resource/theme/rc/branch_closed_focus@2x.png +0 -0
- melage/resource/theme/rc/branch_closed_pressed.png +0 -0
- melage/resource/theme/rc/branch_closed_pressed@2x.png +0 -0
- melage/resource/theme/rc/branch_end.png +0 -0
- melage/resource/theme/rc/branch_end@2x.png +0 -0
- melage/resource/theme/rc/branch_end_disabled.png +0 -0
- melage/resource/theme/rc/branch_end_disabled@2x.png +0 -0
- melage/resource/theme/rc/branch_end_focus.png +0 -0
- melage/resource/theme/rc/branch_end_focus@2x.png +0 -0
- melage/resource/theme/rc/branch_end_pressed.png +0 -0
- melage/resource/theme/rc/branch_end_pressed@2x.png +0 -0
- melage/resource/theme/rc/branch_line.png +0 -0
- melage/resource/theme/rc/branch_line@2x.png +0 -0
- melage/resource/theme/rc/branch_line_disabled.png +0 -0
- melage/resource/theme/rc/branch_line_disabled@2x.png +0 -0
- melage/resource/theme/rc/branch_line_focus.png +0 -0
- melage/resource/theme/rc/branch_line_focus@2x.png +0 -0
- melage/resource/theme/rc/branch_line_pressed.png +0 -0
- melage/resource/theme/rc/branch_line_pressed@2x.png +0 -0
- melage/resource/theme/rc/branch_more.png +0 -0
- melage/resource/theme/rc/branch_more@2x.png +0 -0
- melage/resource/theme/rc/branch_more_disabled.png +0 -0
- melage/resource/theme/rc/branch_more_disabled@2x.png +0 -0
- melage/resource/theme/rc/branch_more_focus.png +0 -0
- melage/resource/theme/rc/branch_more_focus@2x.png +0 -0
- melage/resource/theme/rc/branch_more_pressed.png +0 -0
- melage/resource/theme/rc/branch_more_pressed@2x.png +0 -0
- melage/resource/theme/rc/branch_open.png +0 -0
- melage/resource/theme/rc/branch_open@2x.png +0 -0
- melage/resource/theme/rc/branch_open_disabled.png +0 -0
- melage/resource/theme/rc/branch_open_disabled@2x.png +0 -0
- melage/resource/theme/rc/branch_open_focus.png +0 -0
- melage/resource/theme/rc/branch_open_focus@2x.png +0 -0
- melage/resource/theme/rc/branch_open_pressed.png +0 -0
- melage/resource/theme/rc/branch_open_pressed@2x.png +0 -0
- melage/resource/theme/rc/checkbox_checked.png +0 -0
- melage/resource/theme/rc/checkbox_checked0.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/resource/theme/rc/line_horizontal.png +0 -0
- melage/resource/theme/rc/line_horizontal@2x.png +0 -0
- melage/resource/theme/rc/line_horizontal_disabled.png +0 -0
- melage/resource/theme/rc/line_horizontal_disabled@2x.png +0 -0
- melage/resource/theme/rc/line_horizontal_focus.png +0 -0
- melage/resource/theme/rc/line_horizontal_focus@2x.png +0 -0
- melage/resource/theme/rc/line_horizontal_pressed.png +0 -0
- melage/resource/theme/rc/line_horizontal_pressed@2x.png +0 -0
- melage/resource/theme/rc/line_vertical.png +0 -0
- melage/resource/theme/rc/line_vertical@2x.png +0 -0
- melage/resource/theme/rc/line_vertical_disabled.png +0 -0
- melage/resource/theme/rc/line_vertical_disabled@2x.png +0 -0
- melage/resource/theme/rc/line_vertical_focus.png +0 -0
- melage/resource/theme/rc/line_vertical_focus@2x.png +0 -0
- melage/resource/theme/rc/line_vertical_pressed.png +0 -0
- melage/resource/theme/rc/line_vertical_pressed@2x.png +0 -0
- melage/resource/theme/rc/radio_checked.png +0 -0
- melage/resource/theme/rc/radio_checked@2x.png +0 -0
- melage/resource/theme/rc/radio_checked_disabled.png +0 -0
- melage/resource/theme/rc/radio_checked_disabled@2x.png +0 -0
- melage/resource/theme/rc/radio_checked_focus.png +0 -0
- melage/resource/theme/rc/radio_checked_focus@2x.png +0 -0
- melage/resource/theme/rc/radio_checked_pressed.png +0 -0
- melage/resource/theme/rc/radio_checked_pressed@2x.png +0 -0
- melage/resource/theme/rc/radio_unchecked.png +0 -0
- melage/resource/theme/rc/radio_unchecked@2x.png +0 -0
- melage/resource/theme/rc/radio_unchecked_disabled.png +0 -0
- melage/resource/theme/rc/radio_unchecked_disabled@2x.png +0 -0
- melage/resource/theme/rc/radio_unchecked_focus.png +0 -0
- melage/resource/theme/rc/radio_unchecked_focus@2x.png +0 -0
- melage/resource/theme/rc/radio_unchecked_pressed.png +0 -0
- melage/resource/theme/rc/radio_unchecked_pressed@2x.png +0 -0
- melage/resource/theme/rc/toolbar_move_horizontal.png +0 -0
- melage/resource/theme/rc/toolbar_move_horizontal@2x.png +0 -0
- melage/resource/theme/rc/toolbar_move_horizontal_disabled.png +0 -0
- melage/resource/theme/rc/toolbar_move_horizontal_disabled@2x.png +0 -0
- melage/resource/theme/rc/toolbar_move_horizontal_focus.png +0 -0
- melage/resource/theme/rc/toolbar_move_horizontal_focus@2x.png +0 -0
- melage/resource/theme/rc/toolbar_move_horizontal_pressed.png +0 -0
- melage/resource/theme/rc/toolbar_move_horizontal_pressed@2x.png +0 -0
- melage/resource/theme/rc/toolbar_move_vertical.png +0 -0
- melage/resource/theme/rc/toolbar_move_vertical@2x.png +0 -0
- melage/resource/theme/rc/toolbar_move_vertical_disabled.png +0 -0
- melage/resource/theme/rc/toolbar_move_vertical_disabled@2x.png +0 -0
- melage/resource/theme/rc/toolbar_move_vertical_focus.png +0 -0
- melage/resource/theme/rc/toolbar_move_vertical_focus@2x.png +0 -0
- melage/resource/theme/rc/toolbar_move_vertical_pressed.png +0 -0
- melage/resource/theme/rc/toolbar_move_vertical_pressed@2x.png +0 -0
- melage/resource/theme/rc/toolbar_separator_horizontal.png +0 -0
- melage/resource/theme/rc/toolbar_separator_horizontal@2x.png +0 -0
- melage/resource/theme/rc/toolbar_separator_horizontal_disabled.png +0 -0
- melage/resource/theme/rc/toolbar_separator_horizontal_disabled@2x.png +0 -0
- melage/resource/theme/rc/toolbar_separator_horizontal_focus.png +0 -0
- melage/resource/theme/rc/toolbar_separator_horizontal_focus@2x.png +0 -0
- melage/resource/theme/rc/toolbar_separator_horizontal_pressed.png +0 -0
- melage/resource/theme/rc/toolbar_separator_horizontal_pressed@2x.png +0 -0
- melage/resource/theme/rc/toolbar_separator_vertical.png +0 -0
- melage/resource/theme/rc/toolbar_separator_vertical@2x.png +0 -0
- melage/resource/theme/rc/toolbar_separator_vertical_disabled.png +0 -0
- melage/resource/theme/rc/toolbar_separator_vertical_disabled@2x.png +0 -0
- melage/resource/theme/rc/toolbar_separator_vertical_focus.png +0 -0
- melage/resource/theme/rc/toolbar_separator_vertical_focus@2x.png +0 -0
- melage/resource/theme/rc/toolbar_separator_vertical_pressed.png +0 -0
- melage/resource/theme/rc/toolbar_separator_vertical_pressed@2x.png +0 -0
- melage/resource/theme/rc/transparent.png +0 -0
- melage/resource/theme/rc/transparent@2x.png +0 -0
- melage/resource/theme/rc/transparent_disabled.png +0 -0
- melage/resource/theme/rc/transparent_disabled@2x.png +0 -0
- melage/resource/theme/rc/transparent_focus.png +0 -0
- melage/resource/theme/rc/transparent_focus@2x.png +0 -0
- melage/resource/theme/rc/transparent_pressed.png +0 -0
- melage/resource/theme/rc/transparent_pressed@2x.png +0 -0
- melage/resource/theme/rc/window_close.png +0 -0
- melage/resource/theme/rc/window_close@2x.png +0 -0
- melage/resource/theme/rc/window_close_disabled.png +0 -0
- melage/resource/theme/rc/window_close_disabled@2x.png +0 -0
- melage/resource/theme/rc/window_close_focus.png +0 -0
- melage/resource/theme/rc/window_close_focus@2x.png +0 -0
- melage/resource/theme/rc/window_close_pressed.png +0 -0
- melage/resource/theme/rc/window_close_pressed@2x.png +0 -0
- melage/resource/theme/rc/window_grip.png +0 -0
- melage/resource/theme/rc/window_grip@2x.png +0 -0
- melage/resource/theme/rc/window_grip_disabled.png +0 -0
- melage/resource/theme/rc/window_grip_disabled@2x.png +0 -0
- melage/resource/theme/rc/window_grip_focus.png +0 -0
- melage/resource/theme/rc/window_grip_focus@2x.png +0 -0
- melage/resource/theme/rc/window_grip_pressed.png +0 -0
- melage/resource/theme/rc/window_grip_pressed@2x.png +0 -0
- melage/resource/theme/rc/window_minimize.png +0 -0
- melage/resource/theme/rc/window_minimize@2x.png +0 -0
- melage/resource/theme/rc/window_minimize_disabled.png +0 -0
- melage/resource/theme/rc/window_minimize_disabled@2x.png +0 -0
- melage/resource/theme/rc/window_minimize_focus.png +0 -0
- melage/resource/theme/rc/window_minimize_focus@2x.png +0 -0
- melage/resource/theme/rc/window_minimize_pressed.png +0 -0
- melage/resource/theme/rc/window_minimize_pressed@2x.png +0 -0
- melage/resource/theme/rc/window_undock.png +0 -0
- melage/resource/theme/rc/window_undock@2x.png +0 -0
- melage/resource/theme/rc/window_undock_disabled.png +0 -0
- melage/resource/theme/rc/window_undock_disabled@2x.png +0 -0
- melage/resource/theme/rc/window_undock_focus.png +0 -0
- melage/resource/theme/rc/window_undock_focus@2x.png +0 -0
- melage/resource/theme/rc/window_undock_pressed.png +0 -0
- melage/resource/theme/rc/window_undock_pressed@2x.png +0 -0
- melage/resource/theme/style.qss +2223 -0
- melage/resource/tract.png +0 -0
- melage/resource/view1.png +0 -0
- melage/resource/view1_eco.png +0 -0
- melage/resource/view1_mri.png +0 -0
- melage/resource/view1_seg.png +0 -0
- melage/resource/view2.png +0 -0
- melage/resource/view2_seg.png +0 -0
- melage/resource/w.png +0 -0
- melage/resource/zoom_in.png +0 -0
- melage/resource/zoom_inFaded.png +0 -0
- melage/resource/zoom_out.png +0 -0
- melage/resource/zoom_outFaded.png +0 -0
- melage/some_notes.txt +3 -0
- melage/utils/DispalyIm.py +2788 -0
- melage/utils/GMM.py +720 -0
- melage/utils/Shaders_120.py +257 -0
- melage/utils/Shaders_330.py +314 -0
- melage/utils/Shaders_bu.py +314 -0
- melage/utils/__init__0.py +7 -0
- melage/utils/brain_extraction_helper.py +234 -0
- melage/utils/custom_QScrollBar.py +61 -0
- melage/utils/glScientific.py +1554 -0
- melage/utils/glScientific_bc.py +1585 -0
- melage/utils/readData.py +1061 -0
- melage/utils/registration.py +512 -0
- melage/utils/source_folder.py +18 -0
- melage/utils/utils.py +3808 -0
- melage/version.txt +1 -0
- melage/widgets/ApplyMask.py +212 -0
- melage/widgets/ChangeSystem.py +152 -0
- melage/widgets/DeepLModels/InfantSegment/Unet.py +464 -0
- melage/widgets/DeepLModels/NPP/dataset/mri_dataset_affine.py +149 -0
- melage/widgets/DeepLModels/NPP/models/checkpoints/npp_v1.pth.py +0 -0
- melage/widgets/DeepLModels/NPP/models/losses.py +146 -0
- melage/widgets/DeepLModels/NPP/models/model.py +272 -0
- melage/widgets/DeepLModels/NPP/models/utils.py +303 -0
- melage/widgets/DeepLModels/NPP/npp.py +116 -0
- melage/widgets/DeepLModels/NPP/requirements.txt +8 -0
- melage/widgets/DeepLModels/NPP/train/train.py +116 -0
- melage/widgets/DeepLModels/Unet3DAtt.py +657 -0
- melage/widgets/DeepLModels/Unet3D_basic.py +648 -0
- melage/widgets/DeepLModels/new_unet.py +652 -0
- melage/widgets/DeepLModels/new_unet_old.py +639 -0
- melage/widgets/DeepLModels/new_unet_old2.py +658 -0
- melage/widgets/HistImage.py +153 -0
- melage/widgets/ImageThresholding.py +222 -0
- melage/widgets/MaskOperations.py +147 -0
- melage/widgets/N4Dialog.py +241 -0
- melage/widgets/Segmentation/FCM.py +1553 -0
- melage/widgets/Segmentation/__init__.py +588 -0
- melage/widgets/Segmentation/utils.py +417 -0
- melage/widgets/SemiAutoSeg.py +666 -0
- melage/widgets/Synthstrip.py +141 -0
- melage/widgets/__init__0.py +5 -0
- melage/widgets/about.py +246 -0
- melage/widgets/activation.py +437 -0
- melage/widgets/activator.py +147 -0
- melage/widgets/be_dl.py +409 -0
- melage/widgets/be_dl_unet3d.py +441 -0
- melage/widgets/brain_extraction.py +855 -0
- melage/widgets/brain_extraction_dl.py +887 -0
- melage/widgets/brain_extraction_dl_bu.py +869 -0
- melage/widgets/colorwidget.py +100 -0
- melage/widgets/dockWidgets.py +2005 -0
- melage/widgets/enhanceImWidget.py +109 -0
- melage/widgets/fileDialog_widget.py +275 -0
- melage/widgets/iminfo.py +346 -0
- melage/widgets/mainwindow_widget.py +6775 -0
- melage/widgets/melageAbout.py +123 -0
- melage/widgets/openglWidgets.py +556 -0
- melage/widgets/registrationWidget.py +342 -0
- melage/widgets/repeat_widget.py +74 -0
- melage/widgets/screenshot_widget.py +138 -0
- melage/widgets/settings_widget.py +77 -0
- melage/widgets/tranformationWidget.py +275 -0
- melage-0.0.65.dist-info/METADATA +742 -0
- melage-0.0.65.dist-info/RECORD +501 -0
- melage-0.0.65.dist-info/WHEEL +5 -0
- melage-0.0.65.dist-info/entry_points.txt +2 -0
- melage-0.0.65.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
|
|
2
|
+
__AUTHOR__ = 'Bahram Jafrasteh'
|
|
3
|
+
|
|
4
|
+
# vTexCoord=[0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0]
|
|
5
|
+
# vVertices= [-1.0,-1.0, 1.0,-1.0, 1.0,1.0, -1.0,1.0]
|
|
6
|
+
|
|
7
|
+
# self.coord = [(0, 0), (0, 1), (1, 1), (1, 0)]
|
|
8
|
+
# self.vertex = [(0, 0), (0, self.imHeight), (self.imWidth, self.imHeight), (self.imWidth, 0)]
|
|
9
|
+
|
|
10
|
+
vsrc = """
|
|
11
|
+
#version 330
|
|
12
|
+
in vec2 in_Vertex;
|
|
13
|
+
in vec2 vertTexCoord;
|
|
14
|
+
out vec2 fragTexCoord;
|
|
15
|
+
uniform mat4 g_matModelView;
|
|
16
|
+
void main(void)
|
|
17
|
+
{
|
|
18
|
+
gl_Position = vec4(in_Vertex, 0.0, 1.0)*g_matModelView;
|
|
19
|
+
|
|
20
|
+
fragTexCoord = vertTexCoord;
|
|
21
|
+
}
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
fsrc = """
|
|
25
|
+
#version 330
|
|
26
|
+
#extension GL_ARB_explicit_uniform_location : enable
|
|
27
|
+
#extension GL_ARB_explicit_attrib_location : enable
|
|
28
|
+
|
|
29
|
+
//GPU FFT using a Stockham formulation
|
|
30
|
+
#define HORIZONTAL
|
|
31
|
+
|
|
32
|
+
//precision mediump float;
|
|
33
|
+
|
|
34
|
+
const float PI = 3.14159265359;
|
|
35
|
+
uniform float u_transformSize;
|
|
36
|
+
uniform float u_subtransformSize;
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
uniform sampler2D u_input;
|
|
42
|
+
uniform sampler2D tex;
|
|
43
|
+
uniform float threshold;
|
|
44
|
+
uniform float contrastMult; /* IN: contrast multiplier */
|
|
45
|
+
uniform float brightnessAdd; /* IN: brightness summand */
|
|
46
|
+
uniform vec3 deinterlace; /* IN: de-interlacing information:
|
|
47
|
+
s .. interlacing offset [pixel/texture size]
|
|
48
|
+
t .. texture size [pixel]
|
|
49
|
+
p .. mirror y axis, if 1.0 */
|
|
50
|
+
uniform vec2 mousePos;
|
|
51
|
+
uniform vec2 iResolution;
|
|
52
|
+
uniform float maxRadius;
|
|
53
|
+
uniform float Ilum;
|
|
54
|
+
|
|
55
|
+
const float fZero= 0.0;
|
|
56
|
+
const float fOne= 1.0;
|
|
57
|
+
const float fTwo= 2.0;
|
|
58
|
+
const float fColScal= 256.0;
|
|
59
|
+
const float Epsilon= 1e-10;
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
in vec2 fragTexCoord;
|
|
63
|
+
out vec4 fragColor;
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
uniform int sobel;
|
|
67
|
+
uniform float sobel_threshold;
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
vec2 multiplyComplex (vec2 a, vec2 b) {
|
|
71
|
+
return vec2(a[0] * b[0] - a[1] * b[1], a[1] * b[0] + a[0] * b[1]);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
vec4 fft(vec2 vUV, float u_transformSize, float u_subtransformSize){
|
|
75
|
+
#ifdef HORIZONTAL
|
|
76
|
+
float index = vUV.x * u_transformSize - 0.5;
|
|
77
|
+
#else
|
|
78
|
+
float index = vUV.y * u_transformSize - 0.5;
|
|
79
|
+
#endif
|
|
80
|
+
|
|
81
|
+
float evenIndex = floor(index / u_subtransformSize) * (u_subtransformSize * 0.5) + mod(index, u_subtransformSize * 0.5);
|
|
82
|
+
|
|
83
|
+
//transform two complex sequences simultaneously
|
|
84
|
+
#ifdef HORIZONTAL
|
|
85
|
+
vec4 even = texture2D(u_input, vec2(evenIndex + 0.5, gl_FragCoord.y) / u_transformSize).rgba;
|
|
86
|
+
vec4 odd = texture2D(u_input, vec2(evenIndex + u_transformSize * 0.5 + 0.5, gl_FragCoord.y) / u_transformSize).rgba;
|
|
87
|
+
#else
|
|
88
|
+
vec4 even = texture2D(u_input, vec2(gl_FragCoord.x, evenIndex + 0.5) / u_transformSize).rgba;
|
|
89
|
+
vec4 odd = texture2D(u_input, vec2(gl_FragCoord.x, evenIndex + u_transformSize * 0.5 + 0.5) / u_transformSize).rgba;
|
|
90
|
+
#endif
|
|
91
|
+
|
|
92
|
+
float twiddleArgument1D = -2.0 * PI * (index / u_subtransformSize);
|
|
93
|
+
vec2 twiddle1D = vec2(cos(twiddleArgument1D), sin(twiddleArgument1D));
|
|
94
|
+
|
|
95
|
+
vec2 outputA = even.xy + multiplyComplex(twiddle1D, odd.xy); //even.xy
|
|
96
|
+
vec2 outputB = even.zw + multiplyComplex(twiddle1D, odd.zw); //even.zw
|
|
97
|
+
|
|
98
|
+
//gl_gl_FragColor
|
|
99
|
+
return vec4(outputA,outputB);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
vec4 sobel_kernel(sampler2D tex, vec2 coord)
|
|
103
|
+
{
|
|
104
|
+
float w = maxRadius / iResolution.x;
|
|
105
|
+
float h = maxRadius / iResolution.y;
|
|
106
|
+
|
|
107
|
+
vec3 BL = texture2D(tex, coord + vec2( -w, -h)).rgb;
|
|
108
|
+
vec3 BM = texture2D(tex, coord + vec2(0.0, -h)).rgb;
|
|
109
|
+
vec3 BR = texture2D(tex, coord + vec2( w, -h)).rgb;
|
|
110
|
+
vec3 ML = texture2D(tex, coord + vec2( -w, 0.0)).rgb;
|
|
111
|
+
vec3 MM = texture2D(tex, coord).rgb;
|
|
112
|
+
vec3 MR = texture2D(tex, coord + vec2( w, 0.0)).rgb;
|
|
113
|
+
vec3 TL = texture2D(tex, coord + vec2( -w, h)).rgb;
|
|
114
|
+
vec3 TM = texture2D(tex, coord + vec2(0.0, h)).rgb;
|
|
115
|
+
vec3 TR = texture2D(tex, coord + vec2( w, h)).rgb;
|
|
116
|
+
vec3 GradX = -TL + TR - 2.0 * ML + 2.0 * MR - BL + BR;
|
|
117
|
+
vec3 GradY = TL + 2.0 * TM + TR - BL - 2.0 * BM - BR;
|
|
118
|
+
return vec4 (length(vec2(GradX.r, GradY.r)), length(vec2(GradX.g, GradY.g)), length(vec2(GradX.b, GradY.b)), 1);
|
|
119
|
+
//vec4 sobel_edge_h = n[2] + (2.0*n[5]) + n[8] - (n[0] + (2.0*n[3]) + n[6]);
|
|
120
|
+
//vec4 sobel_edge_v = n[0] + (2.0*n[1]) + n[2] - (n[6] + (2.0*n[7]) + n[8]);
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
vec3 RGBtoHSV(in vec3 RGB)
|
|
125
|
+
{
|
|
126
|
+
vec4 P = (RGB.g < RGB.b) ? vec4(RGB.bg, -1.0, 2.0/3.0) : vec4(RGB.gb, 0.0, -1.0/3.0);
|
|
127
|
+
vec4 Q = (RGB.r < P.x) ? vec4(P.xyw, RGB.r) : vec4(RGB.r, P.yzx);
|
|
128
|
+
float C = Q.x - min(Q.w, Q.y);
|
|
129
|
+
float H = abs((Q.w - Q.y) / (6.0 * C + Epsilon) + Q.z);
|
|
130
|
+
vec3 HCV = vec3(H, C, Q.x);
|
|
131
|
+
float S = HCV.y / (HCV.z + Epsilon);
|
|
132
|
+
return vec3(HCV.x, S, HCV.z);
|
|
133
|
+
}
|
|
134
|
+
vec3 HSVtoRGB(in vec3 HSV)
|
|
135
|
+
{
|
|
136
|
+
float H = HSV.x;
|
|
137
|
+
float R = abs(H * 6.0 - 3.0) - 1.0;
|
|
138
|
+
float G = 2.0 - abs(H * 6.0 - 2.0);
|
|
139
|
+
float B = 2.0 - abs(H * 6.0 - 4.0);
|
|
140
|
+
vec3 RGB = clamp( vec3(R,G,B), 0.0, 1.0 );
|
|
141
|
+
return ((RGB - 1.0) * HSV.y + 1.0) * HSV.z;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
mat3 kernel1 = mat3 (1.0, 0.0, -1.0,
|
|
145
|
+
2.0, 0.0, 2.0,
|
|
146
|
+
1.0, 0.0, -1.0);
|
|
147
|
+
mat3 kernel2 = mat3 (1.0, 2.0, 1.0,
|
|
148
|
+
0.0, 0.0, 0.0,
|
|
149
|
+
-1.0, -2.0, -1.0);
|
|
150
|
+
|
|
151
|
+
float toGrayscale(vec3 source) {
|
|
152
|
+
float average = (source.x+source.y+source.z)/3.0;
|
|
153
|
+
return average;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
float doConvolution(mat3 kernel) {
|
|
158
|
+
float sum = 0.0;
|
|
159
|
+
float current_pixelColor = toGrayscale(texture2D(tex,fragTexCoord).xyz);
|
|
160
|
+
float xOffset = float(1)/1024.0;
|
|
161
|
+
float yOffset = float(1)/768.0;
|
|
162
|
+
float new_pixel00 = toGrayscale(texture2D(tex, vec2(fragTexCoord.x-xOffset,fragTexCoord.y-yOffset)).xyz);
|
|
163
|
+
float new_pixel01 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x,fragTexCoord.y-yOffset)).xyz);
|
|
164
|
+
float new_pixel02 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x+xOffset,fragTexCoord.y-yOffset)).xyz);
|
|
165
|
+
vec3 pixelRow0 = vec3(new_pixel00,new_pixel01,new_pixel02);
|
|
166
|
+
float new_pixel10 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x-xOffset,fragTexCoord.y)).xyz);
|
|
167
|
+
float new_pixel11 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x,fragTexCoord.y)).xyz);
|
|
168
|
+
float new_pixel12 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x+xOffset,fragTexCoord.y)).xyz);
|
|
169
|
+
vec3 pixelRow1 = vec3(new_pixel10,new_pixel11,new_pixel12);
|
|
170
|
+
float new_pixel20 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x-xOffset,fragTexCoord.y+yOffset)).xyz);
|
|
171
|
+
float new_pixel21 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x,fragTexCoord.y+yOffset)).xyz);
|
|
172
|
+
float new_pixel22 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x+xOffset,fragTexCoord.y+yOffset)).xyz);
|
|
173
|
+
vec3 pixelRow2 = vec3(new_pixel20,new_pixel21,new_pixel22);
|
|
174
|
+
vec3 mult1 = (kernel[0]*pixelRow0);
|
|
175
|
+
vec3 mult2 = (kernel[1]*pixelRow1);
|
|
176
|
+
vec3 mult3 = (kernel[2]*pixelRow2);
|
|
177
|
+
sum= mult1.x+mult1.y+mult1.z+mult2.x+mult2.y+mult2.z+mult3.x+mult3.y+mult3.z;
|
|
178
|
+
return sum;
|
|
179
|
+
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
void main(void)
|
|
184
|
+
{
|
|
185
|
+
int gaussianBlue = 0;
|
|
186
|
+
|
|
187
|
+
if (sobel== 1) //soble kernel
|
|
188
|
+
{
|
|
189
|
+
vec4 color0 = texture2D(tex, fragTexCoord);
|
|
190
|
+
vec4 bw = vec4(vec3(color0.r, color0.g, color0.b), color0.a);
|
|
191
|
+
vec2 uv = gl_FragCoord.xy/iResolution.xy;
|
|
192
|
+
vec2 mousePosition= mousePos/iResolution.xy;
|
|
193
|
+
float dist = distance(mousePosition, uv);
|
|
194
|
+
float distx = abs(mousePosition.x-uv.x);
|
|
195
|
+
float disty = abs(mousePosition.y-uv.y);
|
|
196
|
+
float mixAmount = clamp((dist - 0.0) / 0.2, 0., 1.);
|
|
197
|
+
//color0.r += mixAmount;
|
|
198
|
+
//vec4 mouseColor= texture2D(tex, mousePosition.xy);
|
|
199
|
+
//float distcolor = distance(color0.rgb, mouseColor.rgb);
|
|
200
|
+
//float mixAmountc = clamp((distcolor - 0.0) / (1.0-maxRadius), 0., 1.);
|
|
201
|
+
//color0 = mix(color0, bw, mixAmount);
|
|
202
|
+
//color0 = mix(color0, bw, mixAmountc);
|
|
203
|
+
//color0.r += mixAmountc;
|
|
204
|
+
//float luminanceM = dot (vec3(0.114 ,0.587,0.299 ),mouseColor.rgb);
|
|
205
|
+
|
|
206
|
+
vec4 sobelk = sobel_kernel(tex, fragTexCoord.st);
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
float luminance = dot (vec3(0.114 ,0.587,0.299 ),color0.rgb);
|
|
210
|
+
|
|
211
|
+
if(luminance<sobel_threshold)
|
|
212
|
+
fragColor = vec4(color0.rgba);
|
|
213
|
+
|
|
214
|
+
else
|
|
215
|
+
{
|
|
216
|
+
//if ( (distx < 0.08) && (disty < 0.04))
|
|
217
|
+
// fragColor = vec4(0.0,1,0,1);
|
|
218
|
+
//else
|
|
219
|
+
// fragColor = vec4(color0.rgba);
|
|
220
|
+
color0.r += sobelk.r;
|
|
221
|
+
color0.g = sobelk.g;
|
|
222
|
+
color0.b += sobelk.b;
|
|
223
|
+
|
|
224
|
+
}
|
|
225
|
+
fragColor = mix(color0, bw, mixAmount);
|
|
226
|
+
|
|
227
|
+
vec4 pixelColor = texture2D(tex, fragTexCoord);
|
|
228
|
+
float horizontalSum = 0.0;
|
|
229
|
+
float verticalSum = 0.0;
|
|
230
|
+
float averageSum = 0.0;
|
|
231
|
+
horizontalSum = doConvolution(kernel1);
|
|
232
|
+
verticalSum = doConvolution(kernel2);
|
|
233
|
+
if( (verticalSum > sobel_threshold)|| (horizontalSum >sobel_threshold)||(verticalSum < -sobel_threshold)|| (horizontalSum <-sobel_threshold))
|
|
234
|
+
averageSum = pixelColor.x;
|
|
235
|
+
else
|
|
236
|
+
averageSum = 1.0;
|
|
237
|
+
fragColor = vec4(averageSum,averageSum,averageSum,1.0);
|
|
238
|
+
|
|
239
|
+
}
|
|
240
|
+
else
|
|
241
|
+
{
|
|
242
|
+
vec4 pixelColor = texture2D(tex, fragTexCoord);
|
|
243
|
+
|
|
244
|
+
pixelColor.rgb /= pixelColor.a;
|
|
245
|
+
|
|
246
|
+
// first apply brightness
|
|
247
|
+
pixelColor.rgb += brightnessAdd;
|
|
248
|
+
|
|
249
|
+
// then apply contrast
|
|
250
|
+
pixelColor.rgb = ((pixelColor.rgb - 0.5) * max(contrastMult, 0.0)) + 0.5;
|
|
251
|
+
|
|
252
|
+
// Return final pixel color
|
|
253
|
+
pixelColor.rgb *= pixelColor.a;
|
|
254
|
+
|
|
255
|
+
vec3 current_Color;
|
|
256
|
+
|
|
257
|
+
current_Color = vec3(pixelColor.r, pixelColor.g, pixelColor.b);
|
|
258
|
+
|
|
259
|
+
if (threshold>0)
|
|
260
|
+
{
|
|
261
|
+
float luminance = dot (vec3(0.114 ,0.587,0.299 ),current_Color);
|
|
262
|
+
if(luminance<threshold)
|
|
263
|
+
fragColor = vec4(1.0);
|
|
264
|
+
else
|
|
265
|
+
fragColor = vec4(0.0);
|
|
266
|
+
}
|
|
267
|
+
else
|
|
268
|
+
{
|
|
269
|
+
//vec3 col_hsv = RGBtoHSV(current_Color);
|
|
270
|
+
//uniform float u_saturate;
|
|
271
|
+
//float u_saturate;
|
|
272
|
+
//u_saturate = 10.0;
|
|
273
|
+
//col_hsv.y *= (u_saturate * 2.0);
|
|
274
|
+
//vec3 col_rgb = HSVtoRGB(col_hsv.rgb);
|
|
275
|
+
//fragColor = vec4(col_rgb.rgb, fOne);
|
|
276
|
+
fragColor = vec4(current_Color, fOne);
|
|
277
|
+
|
|
278
|
+
//fragColor = fft(gl_FragCoord.xy, u_transformSize,u_subtransformSize);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
"""
|
|
285
|
+
|
|
286
|
+
vsrcPaint = """
|
|
287
|
+
#version 330
|
|
288
|
+
in vec2 in_Vertex;
|
|
289
|
+
uniform mat4 g_matModelView;
|
|
290
|
+
out vec4 positionGL;
|
|
291
|
+
void main(void)
|
|
292
|
+
{
|
|
293
|
+
|
|
294
|
+
gl_Position = vec4(in_Vertex, 0.0, 1.0)*g_matModelView;
|
|
295
|
+
positionGL = gl_Position;
|
|
296
|
+
gl_PointSize = 200.0;
|
|
297
|
+
}
|
|
298
|
+
"""
|
|
299
|
+
|
|
300
|
+
fsrcPaint = """
|
|
301
|
+
#version 330
|
|
302
|
+
|
|
303
|
+
uniform vec4 my_color;
|
|
304
|
+
out vec4 FragColor;
|
|
305
|
+
in vec4 positionGL;
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
void main(void)
|
|
310
|
+
{
|
|
311
|
+
FragColor = my_color;
|
|
312
|
+
|
|
313
|
+
}
|
|
314
|
+
"""
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Helper functions
|
|
3
|
+
"""
|
|
4
|
+
import numpy as np
|
|
5
|
+
from numba import jit
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
This code has been used from https://github.com/vanandrew/brainextractor/tree/main/brainextractor
|
|
9
|
+
with small modification whenever it is needed.
|
|
10
|
+
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def sphere(shape: list, radius: float, position: list):
|
|
15
|
+
"""
|
|
16
|
+
Creates a binary sphere
|
|
17
|
+
"""
|
|
18
|
+
# assume shape and position are both a 3-tuple of int or float
|
|
19
|
+
# the units are pixels / voxels (px for short)
|
|
20
|
+
# radius is a int or float in px
|
|
21
|
+
semisizes = (radius,) * 3
|
|
22
|
+
|
|
23
|
+
# genereate the grid for the support points
|
|
24
|
+
# centered at the position indicated by position
|
|
25
|
+
grid = [slice(-x0, dim - x0) for x0, dim in zip(position, shape)]
|
|
26
|
+
position = np.ogrid[grid]
|
|
27
|
+
# calculate the distance of all points from `position` center
|
|
28
|
+
# scaled by the radius
|
|
29
|
+
arr = np.zeros(shape, dtype=float)
|
|
30
|
+
for x_i, semisize in zip(position, semisizes):
|
|
31
|
+
# this can be generalized for exponent != 2
|
|
32
|
+
# in which case `(x_i / semisize)`
|
|
33
|
+
# would become `np.abs(x_i / semisize)`
|
|
34
|
+
arr += (x_i / semisize) ** 2
|
|
35
|
+
|
|
36
|
+
# the inner part of the sphere will have distance below 1
|
|
37
|
+
return arr <= 1.0
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@jit(nopython=True, cache=True)
|
|
41
|
+
def closest_integer_point(vertex: np.ndarray):
|
|
42
|
+
"""
|
|
43
|
+
Gives the closest integer point based on euclidean distance
|
|
44
|
+
"""
|
|
45
|
+
# get neighboring grid points to search
|
|
46
|
+
x = vertex[0]
|
|
47
|
+
y = vertex[1]
|
|
48
|
+
z = vertex[2]
|
|
49
|
+
x0 = np.floor(x)
|
|
50
|
+
y0 = np.floor(y)
|
|
51
|
+
z0 = np.floor(z)
|
|
52
|
+
x1 = x0 + 1
|
|
53
|
+
y1 = y0 + 1
|
|
54
|
+
z1 = z0 + 1
|
|
55
|
+
|
|
56
|
+
# initialize min euclidean distance
|
|
57
|
+
min_euclid = 99
|
|
58
|
+
|
|
59
|
+
# loop through each neighbor point
|
|
60
|
+
for i in [x0, x1]:
|
|
61
|
+
for j in [y0, y1]:
|
|
62
|
+
for k in [z0, z1]:
|
|
63
|
+
# compare coordinate and store if min euclid distance
|
|
64
|
+
coords = np.array([i, j, k])
|
|
65
|
+
dist = l2norm(vertex - coords)
|
|
66
|
+
if dist < min_euclid:
|
|
67
|
+
min_euclid = dist
|
|
68
|
+
final_coords = coords
|
|
69
|
+
|
|
70
|
+
# return the final coords
|
|
71
|
+
return final_coords.astype(np.int64)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@jit(nopython=True, cache=True)
|
|
75
|
+
def bresenham3d(v0: np.ndarray, v1: np.ndarray, shape):
|
|
76
|
+
"""
|
|
77
|
+
Bresenham's algorithm for a 3-D line
|
|
78
|
+
|
|
79
|
+
https://www.geeksforgeeks.org/bresenhams-algorithm-for-3-d-line-drawing/
|
|
80
|
+
"""
|
|
81
|
+
# initialize axis differences
|
|
82
|
+
|
|
83
|
+
dx = np.abs(v1[0] - v0[0])
|
|
84
|
+
dy = np.abs(v1[1] - v0[1])
|
|
85
|
+
dz = np.abs(v1[2] - v0[2])
|
|
86
|
+
maxx = shape[0]
|
|
87
|
+
maxy = shape[1]
|
|
88
|
+
maxz = shape[2]
|
|
89
|
+
v0[0] = v0[0]-1 if (v0[0] >= maxx) else v0[0]
|
|
90
|
+
v0[1] = v0[1]-1 if (v0[1] >= maxy) else v0[1]
|
|
91
|
+
v0[2] = v0[2]-1 if (v0[2] >= maxz) else v0[2]
|
|
92
|
+
|
|
93
|
+
v1[0] = v1[0]-1 if (v1[0] >= maxx) else v1[0]
|
|
94
|
+
v1[1] = v1[1]-1 if (v1[1] >= maxy) else v1[1]
|
|
95
|
+
v1[2] = v1[2]-1 if (v1[2] >= maxz) else v1[2]
|
|
96
|
+
|
|
97
|
+
xs = 1 if (v1[0] > v0[0]) else -1
|
|
98
|
+
ys = 1 if (v1[1] > v0[1]) else -1
|
|
99
|
+
zs = 1 if (v1[2] > v0[2]) else -1
|
|
100
|
+
|
|
101
|
+
# determine the driving axis
|
|
102
|
+
if dx >= dy and dx >= dz:
|
|
103
|
+
d0 = dx
|
|
104
|
+
d1 = dy
|
|
105
|
+
d2 = dz
|
|
106
|
+
s0 = xs
|
|
107
|
+
s1 = ys
|
|
108
|
+
s2 = zs
|
|
109
|
+
a0 = 0
|
|
110
|
+
a1 = 1
|
|
111
|
+
a2 = 2
|
|
112
|
+
elif dy >= dx and dy >= dz:
|
|
113
|
+
d0 = dy
|
|
114
|
+
d1 = dx
|
|
115
|
+
d2 = dz
|
|
116
|
+
s0 = ys
|
|
117
|
+
s1 = xs
|
|
118
|
+
s2 = zs
|
|
119
|
+
a0 = 1
|
|
120
|
+
a1 = 0
|
|
121
|
+
a2 = 2
|
|
122
|
+
elif dz >= dx and dz >= dy:
|
|
123
|
+
d0 = dz
|
|
124
|
+
d1 = dx
|
|
125
|
+
d2 = dy
|
|
126
|
+
s0 = zs
|
|
127
|
+
s1 = xs
|
|
128
|
+
s2 = ys
|
|
129
|
+
a0 = 2
|
|
130
|
+
a1 = 0
|
|
131
|
+
a2 = 1
|
|
132
|
+
|
|
133
|
+
# create line array
|
|
134
|
+
line = np.zeros((d0 + 1, 3), dtype=np.int64)
|
|
135
|
+
line[0] = v0
|
|
136
|
+
|
|
137
|
+
# get points
|
|
138
|
+
p1 = 2 * d1 - d0
|
|
139
|
+
p2 = 2 * d2 - d0
|
|
140
|
+
for i in range(d0):
|
|
141
|
+
c = line[i].copy()
|
|
142
|
+
c[a0] += s0
|
|
143
|
+
if p1 >= 0:
|
|
144
|
+
c[a1] += s1
|
|
145
|
+
p1 -= 2 * d0
|
|
146
|
+
if p2 >= 0:
|
|
147
|
+
c[a2] += s2
|
|
148
|
+
p2 -= 2 * d0
|
|
149
|
+
p1 += 2 * d1
|
|
150
|
+
p2 += 2 * d2
|
|
151
|
+
line[i + 1] = c
|
|
152
|
+
|
|
153
|
+
# return list
|
|
154
|
+
return line
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
@jit(nopython=True, cache=True)
|
|
158
|
+
def l2norm(vec: np.ndarray):
|
|
159
|
+
"""
|
|
160
|
+
Computes the l2 norm for 3d vector
|
|
161
|
+
"""
|
|
162
|
+
return np.sqrt(vec[0] ** 2 + vec[1] ** 2 + vec[2] ** 2)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
@jit(nopython=True, cache=True)
|
|
166
|
+
def l2normarray(array: np.ndarray):
|
|
167
|
+
"""
|
|
168
|
+
Computes the l2 norm for several 3d vectors
|
|
169
|
+
"""
|
|
170
|
+
return np.sqrt(array[:, 0] ** 2 + array[:, 1] ** 2 + array[:, 2] ** 2)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def diagonal_dot(a: np.ndarray, b: np.ndarray):
|
|
174
|
+
"""
|
|
175
|
+
Dot product by row of a and b.
|
|
176
|
+
There are a lot of ways to do this though
|
|
177
|
+
performance varies very widely. This method
|
|
178
|
+
uses a dot product to sum the row and avoids
|
|
179
|
+
function calls if at all possible.
|
|
180
|
+
"""
|
|
181
|
+
a = np.asanyarray(a)
|
|
182
|
+
return np.dot(a * b, [1.0] * a.shape[1])
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def bresenhamlines_getdata(start, end, data, tm, t2, mode):
|
|
187
|
+
#https://code.activestate.com/recipes/578112-bresenhams-line-algorithm-in-n-dimensions/
|
|
188
|
+
max_iter = np.amax(np.abs(end - start), axis=1)
|
|
189
|
+
|
|
190
|
+
slope = end - start
|
|
191
|
+
scale = np.amax(np.abs(slope), axis=1).reshape(-1, 1)
|
|
192
|
+
zeroslope = (scale == 0).all(1)
|
|
193
|
+
scale[zeroslope] = np.ones(1)
|
|
194
|
+
nslope = np.array(slope, dtype=np.double) / scale
|
|
195
|
+
nslope[zeroslope] = np.zeros(slope[0].shape)
|
|
196
|
+
npts, dim = 1, 3
|
|
197
|
+
|
|
198
|
+
# steps to iterate on
|
|
199
|
+
|
|
200
|
+
blines = []
|
|
201
|
+
Intensitymat = np.zeros(len(max_iter))
|
|
202
|
+
if mode=='min':
|
|
203
|
+
for i in range(len(max_iter)):
|
|
204
|
+
stepmat = np.ones((max_iter[i]+1, 3))*(np.arange(max_iter[i]+1).reshape(-1,1))
|
|
205
|
+
# some hacks for broadcasting properly
|
|
206
|
+
bline = np.rint(start[i, np.newaxis, :]+nslope[i,np.newaxis, :]*stepmat).astype(start.dtype)
|
|
207
|
+
intensity = data[bline[:,0], bline[:,1], bline[:,2]]
|
|
208
|
+
Intensitymat[i] = np.max([t2, np.min([np.min(intensity),tm])]) # min intensity from far distance
|
|
209
|
+
|
|
210
|
+
else:
|
|
211
|
+
for i in range(len(max_iter)):
|
|
212
|
+
stepmat = np.ones((max_iter[i]+1, 3))*(np.arange(max_iter[i]+1).reshape(-1,1))
|
|
213
|
+
# some hacks for broadcasting properly
|
|
214
|
+
bline = np.rint(start[i, np.newaxis, :]+nslope[i,np.newaxis, :]*stepmat).astype(start.dtype)
|
|
215
|
+
intensity = data[bline[:,0], bline[:,1], bline[:,2]]
|
|
216
|
+
|
|
217
|
+
Intensitymat[i] = np.min([t2, np.max([np.max(intensity), tm])])
|
|
218
|
+
return Intensitymat
|
|
219
|
+
|
|
220
|
+
def bresenham3d_python(start: np.ndarray, end: np.ndarray):
|
|
221
|
+
## BJ
|
|
222
|
+
slope = np.asanyarray(end - start)
|
|
223
|
+
scale = np.max(np.abs(slope), axis=1).reshape(-1, 1)
|
|
224
|
+
zeroslope = (scale == 0).all(1)
|
|
225
|
+
scale[zeroslope] = np.ones(1)
|
|
226
|
+
nslope = np.array(slope, dtype=np.double) / scale
|
|
227
|
+
nslope[zeroslope] = np.zeros(slope[0].shape)
|
|
228
|
+
max_iter = np.amax(np.abs(end - start), axis=1)
|
|
229
|
+
#stepseq = np.arange(1, max_iter + 1)
|
|
230
|
+
#stepmat = np.tile(stepseq, (dim, 1)).T
|
|
231
|
+
stepmat = np.ones((max_iter + 1, 3)) * (np.arange(max_iter + 1).reshape(-1, 1))
|
|
232
|
+
# some hacks for broadcasting properly
|
|
233
|
+
bline = np.rint(start[:, np.newaxis, :] + nslope[:, np.newaxis, :] * stepmat).astype(start.dtype)
|
|
234
|
+
return bline
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from PyQt5.QtWidgets import QScrollBar
|
|
2
|
+
from PyQt5.QtCore import Qt
|
|
3
|
+
from PyQt5.QtWidgets import QMenu, QAction, QDialog
|
|
4
|
+
from PyQt5.QtCore import pyqtSignal
|
|
5
|
+
from PyQt5 import QtWidgets
|
|
6
|
+
class custom_qscrollbar(QScrollBar):
|
|
7
|
+
"""
|
|
8
|
+
HORIZONTAL SLIDER
|
|
9
|
+
"""
|
|
10
|
+
cut_limit = pyqtSignal(object)
|
|
11
|
+
def __init__(self, parent=None, id = 0):
|
|
12
|
+
self.id = id
|
|
13
|
+
QScrollBar.__init__(self, parent)
|
|
14
|
+
Dialog = self.window()
|
|
15
|
+
Dialog.setObjectName("Image info")
|
|
16
|
+
Dialog.resize(40, 200)
|
|
17
|
+
self.setContextMenuPolicy(Qt.CustomContextMenu)
|
|
18
|
+
self.customContextMenuRequested.connect(self.ShowContextMenu)
|
|
19
|
+
self._txtA = "A"
|
|
20
|
+
self._txtB = "B"
|
|
21
|
+
self._first = 0
|
|
22
|
+
self._second = 0
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def ShowContextMenu(self, pos):
|
|
27
|
+
menu = QMenu('Menu')
|
|
28
|
+
first_action = QAction(self._txtA)
|
|
29
|
+
second_action = QAction(self._txtB)
|
|
30
|
+
|
|
31
|
+
cut_action = QAction("Cut")
|
|
32
|
+
menu.addAction(first_action)
|
|
33
|
+
menu.addAction(second_action)
|
|
34
|
+
menu.addAction(cut_action)
|
|
35
|
+
action = menu.exec_(self.mapToGlobal(pos))
|
|
36
|
+
if action==first_action:
|
|
37
|
+
#mouse_p = int((pos.x() / self.width()) * (self.maximum() - self.minimum()) + self.minimum())
|
|
38
|
+
#self.setSliderPosition(mouse_p)
|
|
39
|
+
self._first = self.value()
|
|
40
|
+
self._txtA = "A:{}".format(self._first)
|
|
41
|
+
#self.setSliderPosition(105)
|
|
42
|
+
elif action==second_action:
|
|
43
|
+
self._second = self.value()
|
|
44
|
+
self._txtB = "B:{}".format(self._second)
|
|
45
|
+
elif action == cut_action:
|
|
46
|
+
if self._first == self._second:
|
|
47
|
+
return
|
|
48
|
+
cut_limit = [self._first, self._second]
|
|
49
|
+
self.cut_limit.emit(cut_limit)
|
|
50
|
+
|
|
51
|
+
def run():
|
|
52
|
+
import sys
|
|
53
|
+
from PyQt5 import QtWidgets, QtCore, QtGui
|
|
54
|
+
from PyQt5.QtCore import pyqtSignal
|
|
55
|
+
app = QtWidgets.QApplication(sys.argv)
|
|
56
|
+
window = custom_qscrollbar()
|
|
57
|
+
window.show()
|
|
58
|
+
sys.exit(app.exec_())
|
|
59
|
+
|
|
60
|
+
if __name__ == '__main__':
|
|
61
|
+
run()
|