CellProfiler-nightly 5.0.0.dev466__tar.gz → 5.0.0.dev509__tar.gz
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.
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/CellProfiler_nightly.egg-info/PKG-INFO +1 -1
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/PKG-INFO +1 -1
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/_version.py +3 -3
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/enhanceedges.py +71 -60
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/flipandrotate.py +96 -158
- cellprofiler_nightly-5.0.0.dev509/cellprofiler/modules/measurecolocalization.py +1144 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measuregranularity.py +46 -210
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/smooth.py +51 -77
- cellprofiler_nightly-5.0.0.dev466/cellprofiler/modules/measurecolocalization.py +0 -2060
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/CellProfiler_nightly.egg-info/SOURCES.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/CellProfiler_nightly.egg-info/dependency_links.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/CellProfiler_nightly.egg-info/entry_points.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/CellProfiler_nightly.egg-info/requires.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/CellProfiler_nightly.egg-info/top_level.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/LICENSE +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/README.md +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/__main__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/examples/ExampleFly/ExampleFly.cppipe +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/examples/ExampleFly/images/01_POS002_D.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/examples/ExampleFly/images/01_POS002_F.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/examples/ExampleFly/images/01_POS002_R.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/examples/ExampleFly/images/01_POS076_D.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/examples/ExampleFly/images/01_POS076_F.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/examples/ExampleFly/images/01_POS076_R.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/examples/ExampleFly/images/01_POS218_D.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/examples/ExampleFly/images/01_POS218_F.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/examples/ExampleFly/images/01_POS218_R.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/display_image_tools.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/display_interactive_navigation.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/display_menu_bar.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/legacy_matlab_image.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/navigation_edit_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/navigation_file_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/navigation_test_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/navigation_window_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/other_3d_identify.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/other_batch.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/other_logging.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/other_omero.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/other_plugins.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/other_shell.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/other_troubleshooting.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/other_widget_inspector.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/output_measurements.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/output_plateviewer.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/output_spreadsheets.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/pipelines_building.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/pipelines_running.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/projects_configure_images.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/projects_image_ordering.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/projects_image_sequences.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/projects_introduction.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/projects_selecting_images.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/help/why_use_cellprofiler.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon-120.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon-128.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon-144.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon-152.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon-195.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon-228.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon-32.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon-57.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon-72.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon-96.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler-favicon.ico +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler.ai +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler.icns +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler.ico +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler.svg +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/icons/CellProfiler_square.svg +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Align.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/ApplyThreshold.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/CollapseTree.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/ColorToGray.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/CorrectIlluminationApply.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/CorrectIlluminationCalculate.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Crop.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/ExpandOrShrinkObjects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/ExpandTree.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/GrayToColor.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Groups_ExampleDisplayTable.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_ANALYZED.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_ANALYZE_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_ANALYZE_24.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_CLOSED_EYE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_DISABLED.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_ERROR.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_EYE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_GO.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_GO_DIM.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_IMAGE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_MEASURE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_OK.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_PAUSE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_RUN.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_SLIDER.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_SLIDER_ACTIVE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_STOP.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_TEST.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_UNAVAILABLE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_UPDATE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_USE_INPUT.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_USE_OUTPUT.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_USE_SOURCE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IMG_WARN.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IdentifyPrimaryObjects_IntensityDeclumping.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IdentifyPrimaryObjects_ShapeDeclumping.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IdentifySecondaryObjects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/IdentifyTertiaryObjects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Images_FilelistPanel.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Images_FilelistPanel_Blank.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Images_FilelistPanel_Filled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Images_UsingRules.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/MeasureGranularity_example.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/MeasureImageAreaOccupied.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/MeasureObjectIntensityDistribution_Edges_Centers.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/MeasureObjectIntensityDistribution_Magnitude_Phase.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/MeasureObjectSizeShape_Eccentricity.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/MeasureTexture.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Measure_texture_3D_correspondences_1.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Measure_texture_3D_correspondences_1_highres.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Measure_texture_3D_correspondences_2.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Measure_texture_3D_correspondences_2_highres.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Metadata_ExampleDisplayTable.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/NamesAndTypes_ExampleDisplayTable.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/Tile.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/UnmixColors.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/check.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/color.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/cp_panel_schematic.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/dapi.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/delete.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/downarrow.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/eye-close.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/eye-open.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/ffwd.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/ffwddisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/filter.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/folder_browse.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/folder_create.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/gear.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/gfp.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/icon_copyrights.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/illumination_function.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/image_to_object_dataflow.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/image_to_object_dataflow.psd +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/mask.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/microscope-color_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/microscope-icon_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/microscope-icon_32.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/microscopes_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/module_add.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/module_help.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/module_movedown.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/module_moveup.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/module_remove.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/monochrome.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/movie_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/next.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/objects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/pause.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/pausedisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/play.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/playdisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/previous.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/remove-sign.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/rewind.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/rewinddisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/splash-black-text-alpha.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/splash-white-text-alpha.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/splash.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/status_pause.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/status_save.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/status_stop.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/stop.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/stopdisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/structuringelement.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/thumb-down.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/thumb-up.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/unchecked.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/wantpony.wav +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcome_examples.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcome_forum.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcome_help.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcome_manual.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcome_new.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcome_pipeline.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcome_screen_help.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcome_start.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcome_tutorial.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcomescreen_forum.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcomescreen_manual.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/welcomescreen_tutorials.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/window_back.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/window_filesave.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/window_forward.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/window_home.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/window_pan.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/data/images/window_zoom_to_rect.png +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/_tree_checkbox_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/_welcome_frame.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/_workspace_model.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/addmoduleframe.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/app.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/artist.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/checkupdate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/constants/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/constants/figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/constants/module_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/constants/preferences_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/constants/preferences_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/constants/workspace_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/cpframe.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/editobjectsdlg.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/errordialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/figure/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/figure/_figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/figure/_navigation_toolbar.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/figure/_outline_artist.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/gridrenderers.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/help/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/help/content.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/help/menu.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/help/search.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/configure_images_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/exporting_results_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/getting_started.html +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/htmlwindow.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/identify_features_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/in_app_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/making_measurements_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/running_pipeline_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/selecting_images_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/test_mode_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/utils.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/html/welcome.html +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/htmldialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/imagesetctrl.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/menu.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/metadatactrl.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/_binary_matrix_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/_data_type_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/_file_collection_display_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/_filter_panel_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/_joiner_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/_module_sizer.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/_module_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/_setting_edited_event.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/_table_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/module_view/_validation_request_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/moduleview.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/namesubscriber.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/omerologin.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/parametersampleframe.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/pathlist.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/pipeline.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/pipelinecontroller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/pipelinelistview.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/plateviewer.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/plugins_menu.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/preferences_dialog/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/preferences_dialog/_integer_preference.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/preferences_dialog/_preferences_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/preferences_view/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/preferences_view/_preferences_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/preferences_view/_progress_watcher.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/readers_dialog/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/readers_dialog/_readers_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/regexp_editor.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/tools.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/utilities/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/utilities/figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/utilities/icon.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/utilities/module_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/utilities/preferences_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/utilities/preferences_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/utilities/workspace_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/workspace_view/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/workspace_view/_workspace_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/workspace_view/_workspace_view_figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/workspace_view/_workspace_view_image_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/workspace_view/_workspace_view_mask_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/workspace_view/_workspace_view_measurement_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/workspace_view/_workspace_view_objects_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/gui/workspace_view/_workspace_view_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/icons/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/knime_bridge.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/misc.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/UntangleWorms.xsd +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/_help.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/calculatemath.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/calculatestatistics.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/classifyobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/closing.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/colortogray.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/combineobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/convertimagetoobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/convertobjectstoimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/correctilluminationapply.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/correctilluminationcalculate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/createbatchfiles.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/crop.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/definegrid.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/dilateimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/dilateobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/displaydataonimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/displaydensityplot.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/displayhistogram.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/displayplatemap.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/displayscatterplot.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/editobjectsmanually.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/enhanceorsuppressfeatures.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/erodeimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/erodeobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/expandorshrinkobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/exporttodatabase.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/exporttospreadsheet.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/fillobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/filterobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/findmaxima.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/flagimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/gaussianfilter.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/graytocolor.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/identifydeadworms.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/identifyobjectsingrid.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/identifyobjectsmanually.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/identifyprimaryobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/identifysecondaryobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/identifytertiaryobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/imagemath.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/invertforprinting.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/labelimages.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/makeprojection.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/maskimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/maskobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/matchtemplate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureimageareaoccupied.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureimageintensity.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureimageoverlap.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureimagequality.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureimageskeleton.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureobjectintensity.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureobjectintensitydistribution.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureobjectneighbors.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureobjectoverlap.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureobjectsizeshape.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measureobjectskeleton.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/measuretexture.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/medialaxis.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/medianfilter.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/morph.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/morphologicalskeleton.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/opening.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/overlayobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/overlayoutlines.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/plugins/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/plugins/imagetemplate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/plugins/measurementtemplate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/plugins/segmentationtemplatewithdependencies.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/reducenoise.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/relateobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/removeholes.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/rescaleintensity.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/resize.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/resizeobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/runimagejmacro.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/savecroppedobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/saveimages.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/shrinktoobjectcenters.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/splitormergeobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/straightenworms.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/threshold.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/tile.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/trackobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/unmixcolors.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/untangleworms.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/modules/watershed.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/utilities/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/utilities/morphology.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/utilities/rules.py +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/environment.yml +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/pyproject.toml +0 -0
- {cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: CellProfiler-nightly
|
|
3
|
-
Version: 5.0.0.
|
|
3
|
+
Version: 5.0.0.dev509
|
|
4
4
|
Summary: CellProfiler is a free open-source software designed to enable biologists without training in computer vision or programming to quantitatively measure phenotypes from thousands of images automatically.
|
|
5
5
|
Author: Anne Carpenter, Thouis (Ray) Jones, Lee Kamentsky, Vebjorn Ljosa, David Logan, Mark Bray, Madison Swain-Bowden, Allen Goodman, Claire McQuinn, Alice Lucas, Callum Tromans-Coia
|
|
6
6
|
Author-email: Beth Cimini <bcimini@broadinstitute.org>, David Stirling <dstirling@glencoesoftware.com>, Nodar Gogoberidze <ngogober@broadinstitute.org>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: CellProfiler-nightly
|
|
3
|
-
Version: 5.0.0.
|
|
3
|
+
Version: 5.0.0.dev509
|
|
4
4
|
Summary: CellProfiler is a free open-source software designed to enable biologists without training in computer vision or programming to quantitatively measure phenotypes from thousands of images automatically.
|
|
5
5
|
Author: Anne Carpenter, Thouis (Ray) Jones, Lee Kamentsky, Vebjorn Ljosa, David Logan, Mark Bray, Madison Swain-Bowden, Allen Goodman, Claire McQuinn, Alice Lucas, Callum Tromans-Coia
|
|
6
6
|
Author-email: Beth Cimini <bcimini@broadinstitute.org>, David Stirling <dstirling@glencoesoftware.com>, Nodar Gogoberidze <ngogober@broadinstitute.org>
|
{cellprofiler_nightly-5.0.0.dev466 → cellprofiler_nightly-5.0.0.dev509}/cellprofiler/_version.py
RENAMED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '5.0.0.
|
|
32
|
-
__version_tuple__ = version_tuple = (5, 0, 0, '
|
|
31
|
+
__version__ = version = '5.0.0.dev509'
|
|
32
|
+
__version_tuple__ = version_tuple = (5, 0, 0, 'dev509')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'gc5c07ce88'
|
|
@@ -23,9 +23,6 @@ YES NO YES
|
|
|
23
23
|
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
import centrosome.filter
|
|
27
|
-
import centrosome.kirsch
|
|
28
|
-
import centrosome.otsu
|
|
29
26
|
import numpy
|
|
30
27
|
from cellprofiler_core.image import Image
|
|
31
28
|
from cellprofiler_core.module import Module
|
|
@@ -35,21 +32,8 @@ from cellprofiler_core.setting.subscriber import ImageSubscriber
|
|
|
35
32
|
from cellprofiler_core.setting.text import Float
|
|
36
33
|
from cellprofiler_core.setting.text import ImageName
|
|
37
34
|
from cellprofiler_library.modules import enhanceedges
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
M_PREWITT = "Prewitt"
|
|
41
|
-
M_ROBERTS = "Roberts"
|
|
42
|
-
M_LOG = "LoG"
|
|
43
|
-
M_CANNY = "Canny"
|
|
44
|
-
M_KIRSCH = "Kirsch"
|
|
45
|
-
|
|
46
|
-
O_BINARY = "Binary"
|
|
47
|
-
O_GRAYSCALE = "Grayscale"
|
|
48
|
-
|
|
49
|
-
E_ALL = "All"
|
|
50
|
-
E_HORIZONTAL = "Horizontal"
|
|
51
|
-
E_VERTICAL = "Vertical"
|
|
52
|
-
|
|
35
|
+
from cellprofiler_library.opts.enhanceedges import EdgeFindingMethod, EdgeDirection
|
|
36
|
+
from cellprofiler_library.functions.image_processing import stretched_rgb_from_components
|
|
53
37
|
|
|
54
38
|
class EnhanceEdges(Module):
|
|
55
39
|
module_name = "EnhanceEdges"
|
|
@@ -71,52 +55,63 @@ class EnhanceEdges(Module):
|
|
|
71
55
|
|
|
72
56
|
self.method = Choice(
|
|
73
57
|
"Select an edge-finding method",
|
|
74
|
-
[
|
|
58
|
+
[EdgeFindingMethod.SOBEL, EdgeFindingMethod.PREWITT, EdgeFindingMethod.ROBERTS, EdgeFindingMethod.LOG, EdgeFindingMethod.CANNY, EdgeFindingMethod.KIRSCH],
|
|
75
59
|
doc="""\
|
|
76
60
|
There are several methods that can be used to enhance edges. Often, it
|
|
77
61
|
is best to test them against each other empirically:
|
|
78
62
|
|
|
79
|
-
-
|
|
80
|
-
the derivative. The
|
|
63
|
+
- *{M_SOBEL}:* Finds edges using the {M_SOBEL} approximation to
|
|
64
|
+
the derivative. The {M_SOBEL} method derives a horizontal and
|
|
81
65
|
vertical gradient measure and returns the square-root of the sum of
|
|
82
66
|
the two squared signals.
|
|
83
|
-
-
|
|
67
|
+
- *{M_PREWITT}:* Finds edges using the {M_PREWITT} approximation
|
|
84
68
|
to the derivative. It returns edges at those points where the
|
|
85
69
|
gradient of the image is maximum.
|
|
86
|
-
-
|
|
87
|
-
derivative. The
|
|
70
|
+
- *{M_ROBERTS}:* Finds edges using the Roberts approximation to the
|
|
71
|
+
derivative. The {M_ROBERTS} method looks for gradients in the
|
|
88
72
|
diagonal and anti-diagonal directions and returns the square-root of
|
|
89
73
|
the sum of the two squared signals. This method is fast, but it
|
|
90
74
|
creates diagonal artifacts that may need to be removed by smoothing.
|
|
91
|
-
-
|
|
75
|
+
- *{M_LOG}:* Applies a Laplacian of Gaussian filter to the image and
|
|
92
76
|
finds zero crossings.
|
|
93
|
-
-
|
|
77
|
+
- *{M_CANNY}:* Finds edges by looking for local maxima of the
|
|
94
78
|
gradient of the image. The gradient is calculated using the
|
|
95
79
|
derivative of a Gaussian filter. The method uses two thresholds to
|
|
96
80
|
detect strong and weak edges, and includes the weak edges in the
|
|
97
81
|
output only if they are connected to strong edges. This method is
|
|
98
82
|
therefore less likely than the others to be fooled by noise, and more
|
|
99
83
|
likely to detect true weak edges.
|
|
100
|
-
-
|
|
84
|
+
- *{M_KIRSCH}:* Finds edges by calculating the gradient among the 8
|
|
101
85
|
compass points (North, North-east, etc.) and selecting the maximum as
|
|
102
86
|
the pixel’s value.
|
|
103
|
-
"""
|
|
104
|
-
|
|
87
|
+
""".format(
|
|
88
|
+
**{
|
|
89
|
+
"M_SOBEL": EdgeFindingMethod.SOBEL.value,
|
|
90
|
+
"M_PREWITT": EdgeFindingMethod.PREWITT.value,
|
|
91
|
+
"M_ROBERTS": EdgeFindingMethod.ROBERTS.value,
|
|
92
|
+
"M_LOG": EdgeFindingMethod.LOG.value,
|
|
93
|
+
"M_CANNY": EdgeFindingMethod.CANNY.value,
|
|
94
|
+
"M_KIRSCH": EdgeFindingMethod.KIRSCH.value,
|
|
95
|
+
}
|
|
96
|
+
),
|
|
105
97
|
)
|
|
106
98
|
|
|
107
99
|
self.wants_automatic_threshold = Binary(
|
|
108
100
|
"Automatically calculate the threshold?",
|
|
109
101
|
True,
|
|
110
102
|
doc="""\
|
|
111
|
-
*(Used only with the "
|
|
103
|
+
*(Used only with the "{M_CANNY}" option and automatic thresholding)*
|
|
112
104
|
|
|
113
105
|
Select *Yes* to automatically calculate the threshold using a
|
|
114
106
|
three-category Otsu algorithm performed on the Sobel transform of the
|
|
115
107
|
image.
|
|
116
108
|
|
|
117
109
|
Select *No* to manually enter the threshold value.
|
|
118
|
-
"""
|
|
119
|
-
|
|
110
|
+
""".format(
|
|
111
|
+
**{
|
|
112
|
+
"M_CANNY": EdgeFindingMethod.CANNY.value,
|
|
113
|
+
}
|
|
114
|
+
),
|
|
120
115
|
)
|
|
121
116
|
|
|
122
117
|
self.manual_threshold = Float(
|
|
@@ -125,39 +120,49 @@ Select *No* to manually enter the threshold value.
|
|
|
125
120
|
0,
|
|
126
121
|
1,
|
|
127
122
|
doc="""\
|
|
128
|
-
*(Used only with the "
|
|
123
|
+
*(Used only with the "{M_CANNY}" option and manual thresholding)*
|
|
129
124
|
|
|
130
125
|
The upper cutoff for Canny edges. All Sobel-transformed pixels with this
|
|
131
126
|
value or higher will be marked as an edge. You can enter a threshold
|
|
132
127
|
between 0 and 1.
|
|
133
|
-
"""
|
|
134
|
-
|
|
128
|
+
""".format(
|
|
129
|
+
**{
|
|
130
|
+
"M_CANNY": EdgeFindingMethod.CANNY.value,
|
|
131
|
+
}
|
|
132
|
+
),
|
|
135
133
|
)
|
|
136
134
|
|
|
137
135
|
self.threshold_adjustment_factor = Float(
|
|
138
136
|
"Threshold adjustment factor",
|
|
139
137
|
1,
|
|
140
138
|
doc="""\
|
|
141
|
-
*(Used only with the "
|
|
139
|
+
*(Used only with the "{M_CANNY}" option and automatic thresholding)*
|
|
142
140
|
|
|
143
141
|
This threshold adjustment factor is a multiplier that is applied to both
|
|
144
142
|
the lower and upper Canny thresholds if they are calculated
|
|
145
143
|
automatically. An adjustment factor of 1 indicates no adjustment. The
|
|
146
144
|
adjustment factor has no effect on any threshold entered manually.
|
|
147
|
-
"""
|
|
148
|
-
|
|
145
|
+
""".format(
|
|
146
|
+
**{
|
|
147
|
+
"M_CANNY": EdgeFindingMethod.CANNY.value,
|
|
148
|
+
}
|
|
149
|
+
),
|
|
149
150
|
)
|
|
150
151
|
|
|
151
152
|
self.direction = Choice(
|
|
152
153
|
"Select edge direction to enhance",
|
|
153
|
-
[
|
|
154
|
+
[EdgeDirection.ALL, EdgeDirection.HORIZONTAL, EdgeDirection.VERTICAL],
|
|
154
155
|
doc="""\
|
|
155
|
-
*(Used only with "
|
|
156
|
+
*(Used only with "{M_PREWITT}" and "{M_SOBEL}" methods)*
|
|
156
157
|
|
|
157
158
|
Select the direction of the edges you aim to identify in the image
|
|
158
159
|
(predominantly horizontal, predominantly vertical, or both).
|
|
159
|
-
"""
|
|
160
|
-
|
|
160
|
+
""".format(
|
|
161
|
+
**{
|
|
162
|
+
"M_PREWITT": EdgeFindingMethod.PREWITT.value,
|
|
163
|
+
"M_SOBEL": EdgeFindingMethod.SOBEL.value,
|
|
164
|
+
}
|
|
165
|
+
),
|
|
161
166
|
)
|
|
162
167
|
|
|
163
168
|
self.wants_automatic_sigma = Binary(
|
|
@@ -179,14 +184,17 @@ Select *No* to manually enter the value.
|
|
|
179
184
|
"Calculate value for low threshold automatically?",
|
|
180
185
|
True,
|
|
181
186
|
doc="""\
|
|
182
|
-
*(Used only with the "
|
|
187
|
+
*(Used only with the "{M_CANNY}" option and automatic thresholding)*
|
|
183
188
|
|
|
184
189
|
Select *Yes* to automatically calculate the low / soft threshold
|
|
185
|
-
cutoff for the
|
|
190
|
+
cutoff for the {M_CANNY} method.
|
|
186
191
|
|
|
187
192
|
Select *No* to manually enter the low threshold value.
|
|
188
|
-
"""
|
|
189
|
-
|
|
193
|
+
""".format(
|
|
194
|
+
**{
|
|
195
|
+
"M_CANNY": EdgeFindingMethod.CANNY.value,
|
|
196
|
+
}
|
|
197
|
+
),
|
|
190
198
|
)
|
|
191
199
|
|
|
192
200
|
self.low_threshold = Float(
|
|
@@ -195,13 +203,17 @@ Select *No* to manually enter the low threshold value.
|
|
|
195
203
|
0,
|
|
196
204
|
1,
|
|
197
205
|
doc="""\
|
|
198
|
-
*(Used only with the "
|
|
206
|
+
*(Used only with the "{M_CANNY}" option and manual thresholding)*
|
|
199
207
|
|
|
200
|
-
Enter the soft threshold cutoff for the
|
|
201
|
-
|
|
208
|
+
Enter the soft threshold cutoff for the {M_CANNY} method. The
|
|
209
|
+
{M_CANNY} method will mark all {M_SOBEL}-transformed pixels with
|
|
202
210
|
values below this threshold as not being edges.
|
|
203
|
-
"""
|
|
204
|
-
|
|
211
|
+
""".format(
|
|
212
|
+
**{
|
|
213
|
+
"M_CANNY": EdgeFindingMethod.CANNY.value,
|
|
214
|
+
"M_SOBEL": EdgeFindingMethod.SOBEL.value,
|
|
215
|
+
}
|
|
216
|
+
),
|
|
205
217
|
)
|
|
206
218
|
|
|
207
219
|
def settings(self):
|
|
@@ -237,13 +249,13 @@ values below this threshold as not being edges.
|
|
|
237
249
|
def visible_settings(self):
|
|
238
250
|
settings = [self.image_name, self.output_image_name]
|
|
239
251
|
settings += [self.method]
|
|
240
|
-
if self.method in (
|
|
252
|
+
if self.method in (EdgeFindingMethod.SOBEL, EdgeFindingMethod.PREWITT):
|
|
241
253
|
settings += [self.direction]
|
|
242
|
-
if self.method in (
|
|
254
|
+
if self.method in (EdgeFindingMethod.LOG, EdgeFindingMethod.CANNY):
|
|
243
255
|
settings += [self.wants_automatic_sigma]
|
|
244
256
|
if not self.wants_automatic_sigma.value:
|
|
245
257
|
settings += [self.sigma]
|
|
246
|
-
if self.method ==
|
|
258
|
+
if self.method == EdgeFindingMethod.CANNY:
|
|
247
259
|
settings += [self.wants_automatic_threshold]
|
|
248
260
|
if not self.wants_automatic_threshold.value:
|
|
249
261
|
settings += [self.manual_threshold]
|
|
@@ -287,7 +299,7 @@ values below this threshold as not being edges.
|
|
|
287
299
|
figure.subplot_imshow_grayscale(
|
|
288
300
|
0, 0, orig_pixels, "Original: %s" % self.image_name.value
|
|
289
301
|
)
|
|
290
|
-
if self.method ==
|
|
302
|
+
if self.method == EdgeFindingMethod.CANNY:
|
|
291
303
|
# Canny is binary
|
|
292
304
|
figure.subplot_imshow_bw(
|
|
293
305
|
0,
|
|
@@ -304,18 +316,17 @@ values below this threshold as not being edges.
|
|
|
304
316
|
self.output_image_name.value,
|
|
305
317
|
sharexy=figure.subplot(0, 0),
|
|
306
318
|
)
|
|
307
|
-
|
|
308
|
-
color_image
|
|
309
|
-
color_image[:, :, 1] = centrosome.filter.stretch(output_pixels)
|
|
319
|
+
|
|
320
|
+
color_image = stretched_rgb_from_components(r=orig_pixels, g=output_pixels)
|
|
310
321
|
figure.subplot_imshow(
|
|
311
322
|
1, 0, color_image, "Composite image", sharexy=figure.subplot(0, 0)
|
|
312
323
|
)
|
|
313
324
|
|
|
314
325
|
def get_sigma(self):
|
|
315
326
|
"""'Automatic' sigma is only available for Cany and Log methods"""
|
|
316
|
-
if self.wants_automatic_sigma.value and self.method ==
|
|
327
|
+
if self.wants_automatic_sigma.value and self.method == EdgeFindingMethod.CANNY:
|
|
317
328
|
return 1.0
|
|
318
|
-
elif self.wants_automatic_sigma.value and self.method ==
|
|
329
|
+
elif self.wants_automatic_sigma.value and self.method == EdgeFindingMethod.LOG:
|
|
319
330
|
return 2.0
|
|
320
331
|
else:
|
|
321
332
|
return self.sigma.value
|
|
@@ -20,6 +20,7 @@ Measurements made by this module
|
|
|
20
20
|
|
|
21
21
|
import numpy
|
|
22
22
|
import scipy.ndimage
|
|
23
|
+
from enum import Enum
|
|
23
24
|
from cellprofiler_core.constants.measurement import IMAGE, COLTYPE_FLOAT
|
|
24
25
|
from cellprofiler_core.image import Image
|
|
25
26
|
from cellprofiler_core.module import Module
|
|
@@ -28,34 +29,20 @@ from cellprofiler_core.setting import Coordinates
|
|
|
28
29
|
from cellprofiler_core.setting.choice import Choice
|
|
29
30
|
from cellprofiler_core.setting.subscriber import ImageSubscriber
|
|
30
31
|
from cellprofiler_core.setting.text import ImageName, Float
|
|
32
|
+
from cellprofiler_library.modules._flipandrotate import flip_and_rotate, flip_image, rotate_image
|
|
33
|
+
from cellprofiler_library.opts.flipandrotate import RotateMethod, D_ANGLE, M_ROTATION_CATEGORY, M_ROTATION_F, FLIP_ALL, ROTATE_ALL, C_ALL
|
|
31
34
|
|
|
32
|
-
FLIP_NONE = "Do not flip"
|
|
33
|
-
FLIP_LEFT_TO_RIGHT = "Left to right"
|
|
34
|
-
FLIP_TOP_TO_BOTTOM = "Top to bottom"
|
|
35
|
-
FLIP_BOTH = "Left to right and top to bottom"
|
|
36
|
-
FLIP_ALL = [FLIP_NONE, FLIP_LEFT_TO_RIGHT, FLIP_TOP_TO_BOTTOM, FLIP_BOTH]
|
|
37
35
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
ROTATE_COORDINATES = "Enter coordinates"
|
|
41
|
-
ROTATE_MOUSE = "Use mouse"
|
|
42
|
-
ROTATE_ALL = [ROTATE_NONE, ROTATE_ANGLE, ROTATE_COORDINATES, ROTATE_MOUSE]
|
|
36
|
+
class GUIRotateMethod(str, Enum):
|
|
37
|
+
MOUSE = "Use mouse"
|
|
43
38
|
|
|
44
|
-
|
|
45
|
-
IO_ONCE = "Only Once"
|
|
46
|
-
IO_ALL = [IO_INDIVIDUALLY, IO_ONCE]
|
|
39
|
+
GUI_ROTATE_ALL = ROTATE_ALL + [GUIRotateMethod.MOUSE]
|
|
47
40
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
D_ANGLE = "angle"
|
|
53
|
-
|
|
54
|
-
"""Rotation measurement category"""
|
|
55
|
-
M_ROTATION_CATEGORY = "Rotation"
|
|
56
|
-
"""Rotation measurement format (+ image name)"""
|
|
57
|
-
M_ROTATION_F = "%s_%%s" % M_ROTATION_CATEGORY
|
|
41
|
+
class RotationCycle(str, Enum):
|
|
42
|
+
INDIVIDUALLY = "Individually"
|
|
43
|
+
ONCE = "Only Once"
|
|
58
44
|
|
|
45
|
+
IO_ALL = [RotationCycle.INDIVIDUALLY, RotationCycle.ONCE]
|
|
59
46
|
|
|
60
47
|
class FlipAndRotate(Module):
|
|
61
48
|
category = "Image Processing"
|
|
@@ -84,22 +71,28 @@ Select how the image is to be flipped.""",
|
|
|
84
71
|
|
|
85
72
|
self.rotate_choice = Choice(
|
|
86
73
|
"Select method to rotate image",
|
|
87
|
-
|
|
74
|
+
GUI_ROTATE_ALL,
|
|
88
75
|
doc="""\
|
|
89
|
-
-
|
|
76
|
+
- *{ROTATE_NONE}:* Leave the image unrotated. This should be used if
|
|
90
77
|
you want to flip the image only.
|
|
91
|
-
-
|
|
78
|
+
- *{ROTATE_ANGLE}:* Provide the numerical angle by which the image
|
|
92
79
|
should be rotated.
|
|
93
|
-
-
|
|
80
|
+
- *{ROTATE_COORDINATES}:* Provide the X,Y pixel locations of two
|
|
94
81
|
points in the image that should be aligned horizontally or
|
|
95
82
|
vertically.
|
|
96
|
-
-
|
|
83
|
+
- *{ROTATE_MOUSE}:* CellProfiler will pause so you can select the
|
|
97
84
|
rotation interactively. When prompted during the analysis run, grab
|
|
98
85
|
the image by clicking the left mouse button, rotate the image by
|
|
99
86
|
dragging with the mouse, then release the mouse button. Press the
|
|
100
87
|
*Done* button on the image after rotating the image appropriately.
|
|
101
|
-
"""
|
|
102
|
-
|
|
88
|
+
""".format(
|
|
89
|
+
**{
|
|
90
|
+
"ROTATE_NONE": RotateMethod.NONE.value,
|
|
91
|
+
"ROTATE_ANGLE": RotateMethod.ANGLE.value,
|
|
92
|
+
"ROTATE_COORDINATES": RotateMethod.COORDINATES.value,
|
|
93
|
+
"ROTATE_MOUSE": GUIRotateMethod.MOUSE.value,
|
|
94
|
+
}
|
|
95
|
+
),
|
|
103
96
|
)
|
|
104
97
|
|
|
105
98
|
self.wants_crop = Binary(
|
|
@@ -122,14 +115,19 @@ the original, which may affect downstream modules.
|
|
|
122
115
|
"Calculate rotation",
|
|
123
116
|
IO_ALL,
|
|
124
117
|
doc="""\
|
|
125
|
-
*(Used only when using
|
|
118
|
+
*(Used only when using “{ROTATE_MOUSE}” to rotate images)*
|
|
126
119
|
|
|
127
120
|
Select the cycle(s) at which the calculation is requested and
|
|
128
121
|
calculated.
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
"""
|
|
132
|
-
|
|
122
|
+
- *{IO_INDIVIDUALLY}:* Determine the amount of rotation for each image individually, e.g., for each cycle.
|
|
123
|
+
- *{IO_ONCE}:* Define the rotation only once (on the first image), then apply it to all images.
|
|
124
|
+
""".format(
|
|
125
|
+
**{
|
|
126
|
+
"ROTATE_MOUSE": GUIRotateMethod.MOUSE.value,
|
|
127
|
+
"IO_INDIVIDUALLY": RotationCycle.INDIVIDUALLY.value,
|
|
128
|
+
"IO_ONCE": RotationCycle.ONCE.value,
|
|
129
|
+
}
|
|
130
|
+
),
|
|
133
131
|
)
|
|
134
132
|
|
|
135
133
|
self.first_pixel = Coordinates(
|
|
@@ -142,7 +140,7 @@ After rotation, if the specified points are aligned horizontally, this point on
|
|
|
142
140
|
left of the other point. If the specified points are aligned vertically, this point of the image will be positioned
|
|
143
141
|
above the other point.
|
|
144
142
|
""".format(
|
|
145
|
-
**{"ROTATE_COORDINATES":
|
|
143
|
+
**{"ROTATE_COORDINATES": RotateMethod.COORDINATES.value}
|
|
146
144
|
),
|
|
147
145
|
)
|
|
148
146
|
|
|
@@ -156,7 +154,7 @@ After rotation, if the specified points are aligned horizontally, this point on
|
|
|
156
154
|
right of the other point. If the specified points are aligned vertically, this point of the image will be positioned
|
|
157
155
|
below the other point.
|
|
158
156
|
""".format(
|
|
159
|
-
**{"ROTATE_COORDINATES":
|
|
157
|
+
**{"ROTATE_COORDINATES": RotateMethod.COORDINATES.value}
|
|
160
158
|
),
|
|
161
159
|
)
|
|
162
160
|
|
|
@@ -164,23 +162,25 @@ below the other point.
|
|
|
164
162
|
"Select how the specified points should be aligned",
|
|
165
163
|
C_ALL,
|
|
166
164
|
doc="""\
|
|
167
|
-
*(Used only when using
|
|
165
|
+
*(Used only when using “{ROTATE_COORDINATES}” to rotate images)*
|
|
168
166
|
|
|
169
167
|
Specify whether you would like the coordinate points that you entered to
|
|
170
|
-
be horizontally or vertically aligned after the rotation is complete."""
|
|
171
|
-
|
|
168
|
+
be horizontally or vertically aligned after the rotation is complete.""".format(
|
|
169
|
+
**{"ROTATE_COORDINATES": RotateMethod.COORDINATES.value}
|
|
170
|
+
),
|
|
172
171
|
)
|
|
173
172
|
|
|
174
173
|
self.angle = Float(
|
|
175
174
|
"Enter angle of rotation",
|
|
176
175
|
0,
|
|
177
176
|
doc="""\
|
|
178
|
-
*(Used only when using
|
|
177
|
+
*(Used only when using “{ROTATE_ANGLE}” to rotate images)*
|
|
179
178
|
|
|
180
179
|
Enter the angle you would like to rotate the image. This setting is in
|
|
181
180
|
degrees, with positive angles corresponding to counterclockwise and
|
|
182
|
-
negative as clockwise."""
|
|
183
|
-
|
|
181
|
+
negative as clockwise.""".format(
|
|
182
|
+
**{"ROTATE_ANGLE": RotateMethod.ANGLE.value}
|
|
183
|
+
),
|
|
184
184
|
)
|
|
185
185
|
|
|
186
186
|
def settings(self):
|
|
@@ -204,18 +204,18 @@ negative as clockwise."""
|
|
|
204
204
|
self.flip_choice,
|
|
205
205
|
self.rotate_choice,
|
|
206
206
|
]
|
|
207
|
-
if self.rotate_choice ==
|
|
207
|
+
if self.rotate_choice == RotateMethod.NONE:
|
|
208
208
|
pass
|
|
209
|
-
elif self.rotate_choice ==
|
|
209
|
+
elif self.rotate_choice == RotateMethod.ANGLE:
|
|
210
210
|
result += [self.wants_crop, self.angle]
|
|
211
|
-
elif self.rotate_choice ==
|
|
211
|
+
elif self.rotate_choice == RotateMethod.COORDINATES:
|
|
212
212
|
result += [
|
|
213
213
|
self.wants_crop,
|
|
214
214
|
self.first_pixel,
|
|
215
215
|
self.second_pixel,
|
|
216
216
|
self.horiz_or_vert,
|
|
217
217
|
]
|
|
218
|
-
elif self.rotate_choice ==
|
|
218
|
+
elif self.rotate_choice == GUIRotateMethod.MOUSE:
|
|
219
219
|
result += [self.wants_crop, self.how_often]
|
|
220
220
|
else:
|
|
221
221
|
raise NotImplementedError(
|
|
@@ -225,7 +225,7 @@ negative as clockwise."""
|
|
|
225
225
|
|
|
226
226
|
def prepare_group(self, workspace, grouping, image_numbers):
|
|
227
227
|
"""Initialize the angle if appropriate"""
|
|
228
|
-
if self.rotate_choice ==
|
|
228
|
+
if self.rotate_choice == GUIRotateMethod.MOUSE and self.how_often == RotationCycle.ONCE:
|
|
229
229
|
self.get_dictionary(workspace.image_set_list)[D_ANGLE] = None
|
|
230
230
|
|
|
231
231
|
def run(self, workspace):
|
|
@@ -234,115 +234,53 @@ negative as clockwise."""
|
|
|
234
234
|
pixel_data = image.pixel_data.copy()
|
|
235
235
|
mask = image.mask
|
|
236
236
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
if pixel_data.ndim == 2:
|
|
256
|
-
pixel_data = pixel_data[i, j]
|
|
257
|
-
else:
|
|
258
|
-
pixel_data = pixel_data[i, j, :]
|
|
259
|
-
|
|
260
|
-
if self.rotate_choice != ROTATE_NONE:
|
|
261
|
-
if self.rotate_choice == ROTATE_ANGLE:
|
|
262
|
-
angle = self.angle.value
|
|
263
|
-
elif self.rotate_choice == ROTATE_COORDINATES:
|
|
264
|
-
xdiff = self.second_pixel.x - self.first_pixel.x
|
|
265
|
-
ydiff = self.second_pixel.y - self.first_pixel.y
|
|
266
|
-
if self.horiz_or_vert == C_VERTICALLY:
|
|
267
|
-
angle = -numpy.arctan2(ydiff, xdiff) * 180.0 / numpy.pi
|
|
268
|
-
elif self.horiz_or_vert == C_HORIZONTALLY:
|
|
269
|
-
angle = numpy.arctan2(xdiff, ydiff) * 180.0 / numpy.pi
|
|
270
|
-
else:
|
|
271
|
-
raise NotImplementedError(
|
|
272
|
-
"Unknown axis: %s" % self.horiz_or_vert.value
|
|
273
|
-
)
|
|
274
|
-
elif self.rotate_choice == ROTATE_MOUSE:
|
|
275
|
-
d = self.get_dictionary()
|
|
276
|
-
if (
|
|
277
|
-
self.how_often == IO_ONCE
|
|
278
|
-
and D_ANGLE in d
|
|
279
|
-
and d[D_ANGLE] is not None
|
|
280
|
-
):
|
|
281
|
-
angle = d[D_ANGLE]
|
|
282
|
-
else:
|
|
283
|
-
angle = workspace.interaction_request(
|
|
284
|
-
self, pixel_data, workspace.measurements.image_set_number
|
|
285
|
-
)
|
|
286
|
-
if self.how_often == IO_ONCE:
|
|
287
|
-
d[D_ANGLE] = angle
|
|
237
|
+
|
|
238
|
+
######
|
|
239
|
+
rotate_angle = self.angle.value
|
|
240
|
+
state_dict_for_mouse_mode = self.get_dictionary()
|
|
241
|
+
mouse_mode_cycle = self.how_often.value
|
|
242
|
+
|
|
243
|
+
if self.rotate_choice == GUIRotateMethod.MOUSE:
|
|
244
|
+
# perform flip and rotate separately
|
|
245
|
+
pixel_data, mask = flip_image(pixel_data, mask, self.flip_choice.value)
|
|
246
|
+
# state_dict_for_mouse_mode = self.get_dictionary()
|
|
247
|
+
assert state_dict_for_mouse_mode is not None, "state_dict_for_mouse_mode must be provided for rotate_choice == GUIRotateMethod.MOUSE"
|
|
248
|
+
assert mouse_mode_cycle is not None, "mouse_mode_cycle must be provided for rotate_choice == GUIRotateMethod.MOUSE"
|
|
249
|
+
if (
|
|
250
|
+
mouse_mode_cycle == RotationCycle.ONCE
|
|
251
|
+
and D_ANGLE in state_dict_for_mouse_mode
|
|
252
|
+
and state_dict_for_mouse_mode[D_ANGLE] is not None
|
|
253
|
+
):
|
|
254
|
+
angle = state_dict_for_mouse_mode[D_ANGLE]
|
|
288
255
|
else:
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
)
|
|
292
|
-
rangle = angle * numpy.pi / 180.0
|
|
293
|
-
mask = scipy.ndimage.rotate(mask.astype(float), angle, reshape=True) > 0.50
|
|
294
|
-
crop = (
|
|
295
|
-
scipy.ndimage.rotate(
|
|
296
|
-
numpy.ones(pixel_data.shape[:2]), angle, reshape=True
|
|
297
|
-
)
|
|
298
|
-
> 0.50
|
|
256
|
+
angle = workspace.interaction_request(
|
|
257
|
+
self, pixel_data, workspace.measurements.image_set_number
|
|
299
258
|
)
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
#
|
|
314
|
-
# Operate on the lower right
|
|
315
|
-
#
|
|
316
|
-
quartercrop = crop[half[0] :, half[1] :]
|
|
317
|
-
ci = numpy.cumsum(quartercrop, 0)
|
|
318
|
-
cj = numpy.cumsum(quartercrop, 1)
|
|
319
|
-
carea_d = ci * cj
|
|
320
|
-
carea_d[quartercrop == 0] = 0
|
|
321
|
-
#
|
|
322
|
-
# Operate on the upper right by flipping I
|
|
323
|
-
#
|
|
324
|
-
quartercrop = crop[crop.shape[0] - half[0] - 1 :: -1, half[1] :]
|
|
325
|
-
ci = numpy.cumsum(quartercrop, 0)
|
|
326
|
-
cj = numpy.cumsum(quartercrop, 1)
|
|
327
|
-
carea_u = ci * cj
|
|
328
|
-
carea_u[quartercrop == 0] = 0
|
|
329
|
-
carea = carea_d + carea_u
|
|
330
|
-
max_carea = numpy.max(carea)
|
|
331
|
-
max_area = numpy.argwhere(carea == max_carea)[0] + half
|
|
332
|
-
min_i = max(crop.shape[0] - max_area[0] - 1, 0)
|
|
333
|
-
max_i = max_area[0] + 1
|
|
334
|
-
min_j = max(crop.shape[1] - max_area[1] - 1, 0)
|
|
335
|
-
max_j = max_area[1] + 1
|
|
336
|
-
ii = numpy.index_exp[min_i:max_i, min_j:max_j]
|
|
337
|
-
crop = numpy.zeros(pixel_data.shape, bool)
|
|
338
|
-
crop[ii] = True
|
|
339
|
-
mask = mask[ii]
|
|
340
|
-
pixel_data = pixel_data[ii]
|
|
341
|
-
else:
|
|
342
|
-
crop = None
|
|
259
|
+
if mouse_mode_cycle == RotationCycle.ONCE:
|
|
260
|
+
state_dict_for_mouse_mode[D_ANGLE] = angle
|
|
261
|
+
pixel_data, mask, crop, angle = rotate_image(
|
|
262
|
+
pixel_data,
|
|
263
|
+
mask,
|
|
264
|
+
RotateMethod.ANGLE,
|
|
265
|
+
angle,
|
|
266
|
+
None,
|
|
267
|
+
None,
|
|
268
|
+
None,
|
|
269
|
+
wants_crop=self.wants_crop.value,
|
|
270
|
+
)
|
|
271
|
+
|
|
343
272
|
else:
|
|
344
|
-
crop =
|
|
345
|
-
|
|
273
|
+
pixel_data, mask, crop, angle = flip_and_rotate(
|
|
274
|
+
pixel_data,
|
|
275
|
+
mask,
|
|
276
|
+
self.flip_choice.value,
|
|
277
|
+
self.rotate_choice.value,
|
|
278
|
+
rotate_angle,
|
|
279
|
+
(self.first_pixel.x, self.first_pixel.y),
|
|
280
|
+
(self.second_pixel.x, self.second_pixel.y),
|
|
281
|
+
self.horiz_or_vert,
|
|
282
|
+
wants_crop=self.wants_crop.value,
|
|
283
|
+
)
|
|
346
284
|
output_image = Image(pixel_data, mask, crop, image)
|
|
347
285
|
image_set.add(self.output_name.value, output_image)
|
|
348
286
|
workspace.measurements.add_image_measurement(
|
|
@@ -567,13 +505,13 @@ negative as clockwise."""
|
|
|
567
505
|
if variable_revision_number == 1:
|
|
568
506
|
# Text for ROTATE_MOUSE changed from "mouse" to "Use mouse"
|
|
569
507
|
if setting_values[3] == "Mouse":
|
|
570
|
-
setting_values[3] =
|
|
508
|
+
setting_values[3] = GUIRotateMethod.MOUSE
|
|
571
509
|
elif setting_values[3] == "None":
|
|
572
|
-
setting_values[3] =
|
|
510
|
+
setting_values[3] = RotateMethod.NONE
|
|
573
511
|
elif setting_values[3] == "Coordinates":
|
|
574
|
-
setting_values[3] =
|
|
512
|
+
setting_values[3] = RotateMethod.COORDINATES
|
|
575
513
|
elif setting_values[3] == "Angle":
|
|
576
|
-
setting_values[3] =
|
|
514
|
+
setting_values[3] = RotateMethod.ANGLE
|
|
577
515
|
variable_revision_number = 2
|
|
578
516
|
return setting_values, variable_revision_number
|
|
579
517
|
|