CellProfiler-nightly 5.0.0.dev318__tar.gz → 5.0.0.dev321__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.dev318 → cellprofiler_nightly-5.0.0.dev321}/CellProfiler_nightly.egg-info/PKG-INFO +1 -1
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/PKG-INFO +1 -1
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/_version.py +3 -3
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/crop.py +129 -228
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/CellProfiler_nightly.egg-info/SOURCES.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/CellProfiler_nightly.egg-info/dependency_links.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/CellProfiler_nightly.egg-info/entry_points.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/CellProfiler_nightly.egg-info/requires.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/CellProfiler_nightly.egg-info/top_level.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/LICENSE +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/README.md +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/__main__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/examples/ExampleFly/ExampleFly.cppipe +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/examples/ExampleFly/images/01_POS002_D.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/examples/ExampleFly/images/01_POS002_F.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/examples/ExampleFly/images/01_POS002_R.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/examples/ExampleFly/images/01_POS076_D.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/examples/ExampleFly/images/01_POS076_F.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/examples/ExampleFly/images/01_POS076_R.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/examples/ExampleFly/images/01_POS218_D.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/examples/ExampleFly/images/01_POS218_F.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/examples/ExampleFly/images/01_POS218_R.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/display_image_tools.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/display_interactive_navigation.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/display_menu_bar.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/legacy_matlab_image.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/navigation_edit_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/navigation_file_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/navigation_test_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/navigation_window_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/other_3d_identify.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/other_batch.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/other_logging.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/other_omero.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/other_plugins.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/other_shell.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/other_troubleshooting.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/other_widget_inspector.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/output_measurements.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/output_plateviewer.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/output_spreadsheets.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/pipelines_building.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/pipelines_running.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/projects_configure_images.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/projects_image_ordering.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/projects_image_sequences.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/projects_introduction.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/projects_selecting_images.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/help/why_use_cellprofiler.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon-120.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon-128.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon-144.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon-152.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon-195.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon-228.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon-32.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon-57.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon-72.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon-96.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler-favicon.ico +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler.ai +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler.icns +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler.ico +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/icons/CellProfiler.svg +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Align.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/ApplyThreshold.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/CollapseTree.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/ColorToGray.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/CorrectIlluminationApply.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/CorrectIlluminationCalculate.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Crop.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/ExpandOrShrinkObjects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/ExpandTree.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/GrayToColor.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Groups_ExampleDisplayTable.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_ANALYZED.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_ANALYZE_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_ANALYZE_24.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_CLOSED_EYE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_DISABLED.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_ERROR.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_EYE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_GO.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_GO_DIM.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_IMAGE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_MEASURE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_OK.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_PAUSE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_RUN.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_SLIDER.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_SLIDER_ACTIVE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_STOP.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_TEST.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_UNAVAILABLE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_UPDATE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_USE_INPUT.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_USE_OUTPUT.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_USE_SOURCE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IMG_WARN.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IdentifyPrimaryObjects_IntensityDeclumping.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IdentifyPrimaryObjects_ShapeDeclumping.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IdentifySecondaryObjects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/IdentifyTertiaryObjects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Images_FilelistPanel.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Images_FilelistPanel_Blank.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Images_FilelistPanel_Filled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Images_UsingRules.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/MeasureGranularity_example.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/MeasureImageAreaOccupied.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/MeasureObjectIntensityDistribution_Edges_Centers.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/MeasureObjectIntensityDistribution_Magnitude_Phase.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/MeasureObjectSizeShape_Eccentricity.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/MeasureTexture.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Measure_texture_3D_correspondences_1.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Measure_texture_3D_correspondences_1_highres.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Measure_texture_3D_correspondences_2.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Measure_texture_3D_correspondences_2_highres.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Metadata_ExampleDisplayTable.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/NamesAndTypes_ExampleDisplayTable.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/Tile.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/UnmixColors.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/check.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/color.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/cp_panel_schematic.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/dapi.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/delete.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/downarrow.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/eye-close.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/eye-open.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/ffwd.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/ffwddisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/filter.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/folder_browse.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/folder_create.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/gear.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/gfp.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/icon_copyrights.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/illumination_function.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/image_to_object_dataflow.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/image_to_object_dataflow.psd +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/mask.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/microscope-color_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/microscope-icon_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/microscope-icon_32.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/microscopes_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/module_add.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/module_help.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/module_movedown.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/module_moveup.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/module_remove.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/monochrome.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/movie_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/next.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/objects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/pause.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/pausedisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/play.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/playdisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/previous.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/remove-sign.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/rewind.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/rewinddisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/splash-black-text-alpha.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/splash-white-text-alpha.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/splash.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/status_pause.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/status_save.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/status_stop.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/stop.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/stopdisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/structuringelement.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/thumb-down.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/thumb-up.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/unchecked.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/wantpony.wav +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcome_examples.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcome_forum.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcome_help.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcome_manual.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcome_new.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcome_pipeline.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcome_screen_help.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcome_start.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcome_tutorial.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcomescreen_forum.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcomescreen_manual.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/welcomescreen_tutorials.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/window_back.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/window_filesave.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/window_forward.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/window_home.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/window_pan.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/data/images/window_zoom_to_rect.png +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/_tree_checkbox_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/_welcome_frame.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/_workspace_model.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/addmoduleframe.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/app.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/artist.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/checkupdate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/constants/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/constants/figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/constants/module_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/constants/preferences_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/constants/preferences_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/constants/workspace_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/cpframe.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/editobjectsdlg.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/errordialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/figure/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/figure/_figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/figure/_navigation_toolbar.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/figure/_outline_artist.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/gridrenderers.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/help/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/help/content.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/help/menu.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/help/search.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/configure_images_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/exporting_results_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/getting_started.html +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/htmlwindow.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/identify_features_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/in_app_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/making_measurements_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/running_pipeline_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/selecting_images_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/test_mode_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/utils.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/html/welcome.html +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/htmldialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/imagesetctrl.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/menu.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/metadatactrl.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/_binary_matrix_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/_data_type_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/_file_collection_display_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/_filter_panel_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/_joiner_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/_module_sizer.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/_module_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/_setting_edited_event.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/_table_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/module_view/_validation_request_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/moduleview.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/namesubscriber.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/omerologin.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/parametersampleframe.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/pathlist.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/pipeline.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/pipelinecontroller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/pipelinelistview.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/plateviewer.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/plugins_menu.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/preferences_dialog/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/preferences_dialog/_integer_preference.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/preferences_dialog/_preferences_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/preferences_view/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/preferences_view/_preferences_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/preferences_view/_progress_watcher.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/readers_dialog/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/readers_dialog/_readers_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/regexp_editor.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/tools.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/utilities/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/utilities/figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/utilities/icon.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/utilities/module_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/utilities/preferences_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/utilities/preferences_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/utilities/workspace_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/workspace_view/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/workspace_view/_workspace_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/workspace_view/_workspace_view_figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/workspace_view/_workspace_view_image_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/workspace_view/_workspace_view_mask_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/workspace_view/_workspace_view_measurement_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/workspace_view/_workspace_view_objects_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/gui/workspace_view/_workspace_view_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/icons/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/knime_bridge.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/misc.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/UntangleWorms.xsd +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/_help.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/calculatemath.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/calculatestatistics.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/classifyobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/closing.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/colortogray.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/combineobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/convertimagetoobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/convertobjectstoimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/correctilluminationapply.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/correctilluminationcalculate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/createbatchfiles.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/definegrid.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/dilateimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/dilateobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/displaydataonimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/displaydensityplot.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/displayhistogram.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/displayplatemap.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/displayscatterplot.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/editobjectsmanually.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/enhanceedges.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/enhanceorsuppressfeatures.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/erodeimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/erodeobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/expandorshrinkobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/exporttodatabase.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/exporttospreadsheet.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/fillobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/filterobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/findmaxima.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/flagimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/flipandrotate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/gaussianfilter.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/graytocolor.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/identifydeadworms.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/identifyobjectsingrid.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/identifyobjectsmanually.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/identifyprimaryobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/identifysecondaryobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/identifytertiaryobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/imagemath.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/invertforprinting.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/labelimages.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/makeprojection.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/maskimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/maskobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/matchtemplate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measurecolocalization.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measuregranularity.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureimageareaoccupied.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureimageintensity.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureimageoverlap.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureimagequality.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureimageskeleton.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureobjectintensity.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureobjectintensitydistribution.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureobjectneighbors.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureobjectoverlap.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureobjectsizeshape.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measureobjectskeleton.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/measuretexture.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/medialaxis.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/medianfilter.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/morph.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/morphologicalskeleton.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/opening.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/overlayobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/overlayoutlines.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/plugins/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/plugins/imagetemplate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/plugins/measurementtemplate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/plugins/segmentationtemplatewithdependencies.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/reducenoise.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/relateobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/removeholes.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/rescaleintensity.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/resize.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/resizeobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/runimagejmacro.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/savecroppedobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/saveimages.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/shrinktoobjectcenters.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/smooth.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/splitormergeobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/straightenworms.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/threshold.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/tile.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/trackobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/unmixcolors.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/untangleworms.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/watershed.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/utilities/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/utilities/morphology.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/utilities/rules.py +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/environment.yml +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/pyproject.toml +0 -0
- {cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/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.dev321
|
|
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.dev321
|
|
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.dev318 → cellprofiler_nightly-5.0.0.dev321}/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.dev321'
|
|
32
|
+
__version_tuple__ = version_tuple = (5, 0, 0, 'dev321')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'gbfdebd3d5'
|
{cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/modules/crop.py
RENAMED
|
@@ -38,14 +38,13 @@ help for more information on saving cropping shapes.
|
|
|
38
38
|
"""
|
|
39
39
|
|
|
40
40
|
import logging
|
|
41
|
-
import math
|
|
42
|
-
|
|
43
41
|
import centrosome.filter
|
|
44
42
|
import matplotlib.axes
|
|
45
43
|
import matplotlib.cm
|
|
46
44
|
import matplotlib.figure
|
|
47
45
|
import matplotlib.patches
|
|
48
46
|
import numpy
|
|
47
|
+
from cellprofiler_core.constants.measurement import GROUP_INDEX
|
|
49
48
|
from cellprofiler_core.image import Image
|
|
50
49
|
from cellprofiler_core.module import Module
|
|
51
50
|
from cellprofiler_core.preferences import get_primary_outline_color
|
|
@@ -57,39 +56,11 @@ from cellprofiler_core.setting.subscriber import ImageSubscriber
|
|
|
57
56
|
from cellprofiler_core.setting.subscriber import LabelSubscriber
|
|
58
57
|
from cellprofiler_core.setting.text import CropImageName
|
|
59
58
|
from cellprofiler_core.setting.text import Integer
|
|
60
|
-
from
|
|
61
|
-
|
|
59
|
+
from cellprofiler_library.functions.image_processing import get_ellipse_cropping, get_rectangle_cropping
|
|
60
|
+
from cellprofiler_library.modules._crop import crop, get_measurements
|
|
61
|
+
from cellprofiler_library.opts.crop import RemovalMethod, Measurement, Shape, CroppingMethod, CroppingPattern, Limits, Ellipse, Rectangle
|
|
62
62
|
LOGGER = logging.getLogger(__name__)
|
|
63
63
|
|
|
64
|
-
SH_RECTANGLE = "Rectangle"
|
|
65
|
-
SH_ELLIPSE = "Ellipse"
|
|
66
|
-
SH_IMAGE = "Image"
|
|
67
|
-
SH_OBJECTS = "Objects"
|
|
68
|
-
SH_CROPPING = "Previous cropping"
|
|
69
|
-
CM_COORDINATES = "Coordinates"
|
|
70
|
-
CM_MOUSE = "Mouse"
|
|
71
|
-
IO_INDIVIDUALLY = "Every"
|
|
72
|
-
IO_FIRST = "First"
|
|
73
|
-
RM_NO = "No"
|
|
74
|
-
RM_EDGES = "Edges"
|
|
75
|
-
RM_ALL = "All"
|
|
76
|
-
|
|
77
|
-
# Doesn't seem to like importing defs from cellprofiler.gui.moduleview so define here
|
|
78
|
-
ABSOLUTE = "Absolute"
|
|
79
|
-
FROM_EDGE = "From edge"
|
|
80
|
-
|
|
81
|
-
EL_XCENTER = "xcenter"
|
|
82
|
-
EL_YCENTER = "ycenter"
|
|
83
|
-
EL_XRADIUS = "xradius"
|
|
84
|
-
EL_YRADIUS = "yradius"
|
|
85
|
-
|
|
86
|
-
RE_LEFT = "left"
|
|
87
|
-
RE_TOP = "top"
|
|
88
|
-
RE_RIGHT = "right"
|
|
89
|
-
RE_BOTTOM = "bottom"
|
|
90
|
-
|
|
91
|
-
FF_AREA_RETAINED = "Crop_AreaRetainedAfterCropping_%s"
|
|
92
|
-
FF_ORIGINAL_AREA = "Crop_OriginalImageArea_%s"
|
|
93
64
|
|
|
94
65
|
OFF_IMAGE_NAME = 0
|
|
95
66
|
OFF_CROPPED_IMAGE_NAME = 1
|
|
@@ -130,8 +101,8 @@ class Crop(Module):
|
|
|
130
101
|
|
|
131
102
|
self.shape = Choice(
|
|
132
103
|
text="Select the cropping shape",
|
|
133
|
-
choices=[
|
|
134
|
-
value=
|
|
104
|
+
choices=[Shape.RECTANGLE.value, Shape.ELLIPSE.value, Shape.IMAGE.value, Shape.OBJECTS.value, Shape.CROPPING.value],
|
|
105
|
+
value=Shape.RECTANGLE.value,
|
|
135
106
|
doc="""\
|
|
136
107
|
Choose the shape into which you would like to crop:
|
|
137
108
|
|
|
@@ -161,19 +132,19 @@ Choose the shape into which you would like to crop:
|
|
|
161
132
|
cropping that was used to generate whichever image you choose.
|
|
162
133
|
""".format(
|
|
163
134
|
**{
|
|
164
|
-
"SH_RECTANGLE":
|
|
165
|
-
"SH_ELLIPSE":
|
|
166
|
-
"SH_IMAGE":
|
|
167
|
-
"SH_OBJECTS":
|
|
168
|
-
"SH_CROPPING":
|
|
135
|
+
"SH_RECTANGLE": Shape.RECTANGLE.value,
|
|
136
|
+
"SH_ELLIPSE": Shape.ELLIPSE.value,
|
|
137
|
+
"SH_IMAGE": Shape.IMAGE.value,
|
|
138
|
+
"SH_OBJECTS": Shape.OBJECTS.value,
|
|
139
|
+
"SH_CROPPING": Shape.CROPPING.value,
|
|
169
140
|
}
|
|
170
141
|
),
|
|
171
142
|
)
|
|
172
143
|
|
|
173
144
|
self.crop_method = Choice(
|
|
174
145
|
text="Select the cropping method",
|
|
175
|
-
choices=[
|
|
176
|
-
value=
|
|
146
|
+
choices=[CroppingMethod.COORDINATES.value, CroppingMethod.MOUSE.value],
|
|
147
|
+
value=CroppingMethod.COORDINATES.value,
|
|
177
148
|
doc="""\
|
|
178
149
|
Choose whether you would like to crop by typing in pixel coordinates or
|
|
179
150
|
clicking with the mouse.
|
|
@@ -190,18 +161,18 @@ clicking with the mouse.
|
|
|
190
161
|
are in the interior of the region you wish to retain.
|
|
191
162
|
""".format(
|
|
192
163
|
**{
|
|
193
|
-
"CM_COORDINATES":
|
|
194
|
-
"SH_ELLIPSE":
|
|
195
|
-
"SH_RECTANGLE":
|
|
196
|
-
"CM_MOUSE":
|
|
164
|
+
"CM_COORDINATES": CroppingMethod.COORDINATES.value,
|
|
165
|
+
"SH_ELLIPSE": Shape.ELLIPSE.value,
|
|
166
|
+
"SH_RECTANGLE": Shape.RECTANGLE.value,
|
|
167
|
+
"CM_MOUSE": CroppingMethod.MOUSE.value,
|
|
197
168
|
}
|
|
198
169
|
),
|
|
199
170
|
)
|
|
200
171
|
|
|
201
172
|
self.individual_or_once = Choice(
|
|
202
173
|
text="Apply which cycle's cropping pattern?",
|
|
203
|
-
choices=[
|
|
204
|
-
value=
|
|
174
|
+
choices=[CroppingPattern.INDIVIDUALLY.value, CroppingPattern.FIRST.value],
|
|
175
|
+
value=CroppingPattern.INDIVIDUALLY.value,
|
|
205
176
|
doc="""\
|
|
206
177
|
Specify how a given cropping pattern should be applied to other image cycles:
|
|
207
178
|
|
|
@@ -210,7 +181,7 @@ Specify how a given cropping pattern should be applied to other image cycles:
|
|
|
210
181
|
intended to function as a template in some fashion.
|
|
211
182
|
- *{IO_INDIVIDUALLY}:* Every image cycle is cropped individually.
|
|
212
183
|
""".format(
|
|
213
|
-
**{"IO_FIRST":
|
|
184
|
+
**{"IO_FIRST": CroppingPattern.FIRST.value, "IO_INDIVIDUALLY": CroppingPattern.INDIVIDUALLY.value}
|
|
214
185
|
),
|
|
215
186
|
)
|
|
216
187
|
|
|
@@ -232,9 +203,9 @@ Specify the left and right positions for the bounding rectangle by selecting one
|
|
|
232
203
|
of the image’s original size.
|
|
233
204
|
""".format(
|
|
234
205
|
**{
|
|
235
|
-
"SH_RECTANGLE":
|
|
236
|
-
"ABSOLUTE": ABSOLUTE,
|
|
237
|
-
"FROM_EDGE": FROM_EDGE,
|
|
206
|
+
"SH_RECTANGLE": Shape.RECTANGLE.value,
|
|
207
|
+
"ABSOLUTE": Limits.ABSOLUTE.value,
|
|
208
|
+
"FROM_EDGE": Limits.FROM_EDGE.value,
|
|
238
209
|
}
|
|
239
210
|
),
|
|
240
211
|
)
|
|
@@ -255,9 +226,9 @@ Specify the top and bottom positions for the bounding rectangle by selecting one
|
|
|
255
226
|
from the edges of your images irrespective of their size.
|
|
256
227
|
""".format(
|
|
257
228
|
**{
|
|
258
|
-
"SH_RECTANGLE":
|
|
259
|
-
"ABSOLUTE": ABSOLUTE,
|
|
260
|
-
"FROM_EDGE": FROM_EDGE,
|
|
229
|
+
"SH_RECTANGLE": Shape.RECTANGLE.value,
|
|
230
|
+
"ABSOLUTE": Limits.ABSOLUTE.value,
|
|
231
|
+
"FROM_EDGE": Limits.FROM_EDGE.value,
|
|
261
232
|
}
|
|
262
233
|
),
|
|
263
234
|
)
|
|
@@ -270,7 +241,7 @@ Specify the top and bottom positions for the bounding rectangle by selecting one
|
|
|
270
241
|
|
|
271
242
|
Specify the center pixel position of the ellipse.
|
|
272
243
|
""".format(
|
|
273
|
-
**{"SH_ELLIPSE":
|
|
244
|
+
**{"SH_ELLIPSE": Shape.ELLIPSE.value}
|
|
274
245
|
),
|
|
275
246
|
)
|
|
276
247
|
|
|
@@ -282,7 +253,7 @@ Specify the center pixel position of the ellipse.
|
|
|
282
253
|
|
|
283
254
|
Specify the radius of the ellipse in the X direction.
|
|
284
255
|
""".format(
|
|
285
|
-
**{"SH_ELLIPSE":
|
|
256
|
+
**{"SH_ELLIPSE": Shape.ELLIPSE.value}
|
|
286
257
|
),
|
|
287
258
|
)
|
|
288
259
|
|
|
@@ -294,7 +265,7 @@ Specify the radius of the ellipse in the X direction.
|
|
|
294
265
|
|
|
295
266
|
Specify the radius of the ellipse in the Y direction.
|
|
296
267
|
""".format(
|
|
297
|
-
**{"SH_ELLIPSE":
|
|
268
|
+
**{"SH_ELLIPSE": Shape.ELLIPSE.value}
|
|
298
269
|
),
|
|
299
270
|
)
|
|
300
271
|
|
|
@@ -306,7 +277,7 @@ Specify the radius of the ellipse in the Y direction.
|
|
|
306
277
|
|
|
307
278
|
Select the image to be use as a cropping mask.
|
|
308
279
|
""".format(
|
|
309
|
-
**{"SH_IMAGE":
|
|
280
|
+
**{"SH_IMAGE": Shape.IMAGE.value}
|
|
310
281
|
),
|
|
311
282
|
)
|
|
312
283
|
|
|
@@ -318,7 +289,7 @@ Select the image to be use as a cropping mask.
|
|
|
318
289
|
|
|
319
290
|
Select the image associated with the cropping mask that you want to use.
|
|
320
291
|
""".format(
|
|
321
|
-
**{"SH_CROPPING":
|
|
292
|
+
**{"SH_CROPPING": Shape.CROPPING.value}
|
|
322
293
|
),
|
|
323
294
|
)
|
|
324
295
|
|
|
@@ -330,14 +301,14 @@ Select the image associated with the cropping mask that you want to use.
|
|
|
330
301
|
|
|
331
302
|
Select the objects that are to be used as a cropping mask.
|
|
332
303
|
""".format(
|
|
333
|
-
**{"SH_OBJECTS":
|
|
304
|
+
**{"SH_OBJECTS": Shape.OBJECTS.value}
|
|
334
305
|
),
|
|
335
306
|
)
|
|
336
307
|
|
|
337
308
|
self.remove_rows_and_columns = Choice(
|
|
338
309
|
text="Remove empty rows and columns?",
|
|
339
|
-
choices=[
|
|
340
|
-
value=
|
|
310
|
+
choices=[RemovalMethod.NO.value, RemovalMethod.EDGES.value, RemovalMethod.ALL.value],
|
|
311
|
+
value=RemovalMethod.ALL.value,
|
|
341
312
|
doc="""\
|
|
342
313
|
Use this option to choose whether to remove rows and columns that lack
|
|
343
314
|
objects:
|
|
@@ -349,7 +320,7 @@ objects:
|
|
|
349
320
|
- *{RM_ALL}:* Remove any row or column of all-blank pixels, even
|
|
350
321
|
from the internal portion of the image.
|
|
351
322
|
""".format(
|
|
352
|
-
**{"RM_NO":
|
|
323
|
+
**{"RM_NO": RemovalMethod.NO.value, "RM_EDGES": RemovalMethod.EDGES.value, "RM_ALL": RemovalMethod.ALL.value}
|
|
353
324
|
),
|
|
354
325
|
)
|
|
355
326
|
|
|
@@ -373,22 +344,22 @@ objects:
|
|
|
373
344
|
|
|
374
345
|
def visible_settings(self):
|
|
375
346
|
result = [self.image_name, self.cropped_image_name, self.shape]
|
|
376
|
-
if self.shape.value in (
|
|
347
|
+
if self.shape.value in (Shape.RECTANGLE, Shape.ELLIPSE):
|
|
377
348
|
result += [self.crop_method, self.individual_or_once]
|
|
378
|
-
if self.crop_method ==
|
|
379
|
-
if self.shape ==
|
|
349
|
+
if self.crop_method.value == CroppingMethod.COORDINATES:
|
|
350
|
+
if self.shape.value == Shape.RECTANGLE:
|
|
380
351
|
result += [self.horizontal_limits, self.vertical_limits]
|
|
381
|
-
elif self.shape ==
|
|
352
|
+
elif self.shape.value == Shape.ELLIPSE:
|
|
382
353
|
result += [
|
|
383
354
|
self.ellipse_center,
|
|
384
355
|
self.ellipse_x_radius,
|
|
385
356
|
self.ellipse_y_radius,
|
|
386
357
|
]
|
|
387
|
-
elif self.shape ==
|
|
358
|
+
elif self.shape.value == Shape.IMAGE:
|
|
388
359
|
result += [self.image_mask_source]
|
|
389
|
-
elif self.shape ==
|
|
360
|
+
elif self.shape.value == Shape.CROPPING:
|
|
390
361
|
result.append(self.cropping_mask_source)
|
|
391
|
-
elif self.shape ==
|
|
362
|
+
elif self.shape.value == Shape.OBJECTS:
|
|
392
363
|
result.append(self.objects_source)
|
|
393
364
|
else:
|
|
394
365
|
raise NotImplementedError("Unimplemented shape type: %s" % self.shape.value)
|
|
@@ -397,25 +368,25 @@ objects:
|
|
|
397
368
|
|
|
398
369
|
def run(self, workspace):
|
|
399
370
|
first_image_set = (
|
|
400
|
-
workspace.measurements.get_current_image_measurement(
|
|
371
|
+
workspace.measurements.get_current_image_measurement(GROUP_INDEX) == 1
|
|
401
372
|
)
|
|
402
373
|
image_set_list = workspace.image_set_list
|
|
403
|
-
|
|
374
|
+
cache_dict = self.get_dictionary(image_set_list)
|
|
404
375
|
orig_image = workspace.image_set.get_image(self.image_name.value)
|
|
405
376
|
recalculate_flag = (
|
|
406
|
-
self.shape not in (
|
|
407
|
-
or self.individual_or_once ==
|
|
377
|
+
self.shape.value not in (Shape.ELLIPSE, Shape.RECTANGLE)
|
|
378
|
+
or self.individual_or_once.value == CroppingPattern.INDIVIDUALLY
|
|
408
379
|
or first_image_set
|
|
409
380
|
or workspace.pipeline.test_mode
|
|
410
381
|
)
|
|
411
|
-
save_flag = self.individual_or_once ==
|
|
382
|
+
save_flag = self.individual_or_once.value == CroppingPattern.FIRST and first_image_set
|
|
412
383
|
if not recalculate_flag:
|
|
413
|
-
if
|
|
384
|
+
if cache_dict[D_FIRST_CROPPING].shape != orig_image.pixel_data.shape[:2]:
|
|
414
385
|
recalculate_flag = True
|
|
415
386
|
LOGGER.warning(
|
|
416
387
|
"""Image, "%s", size changed from %s to %s during cycle %d, recalculating""",
|
|
417
388
|
self.image_name.value,
|
|
418
|
-
str(
|
|
389
|
+
str(cache_dict[D_FIRST_CROPPING].shape),
|
|
419
390
|
str(orig_image.pixel_data.shape[:2]),
|
|
420
391
|
workspace.image_set.image_number,
|
|
421
392
|
)
|
|
@@ -423,59 +394,54 @@ objects:
|
|
|
423
394
|
cropping = None
|
|
424
395
|
masking_objects = None
|
|
425
396
|
if not recalculate_flag:
|
|
426
|
-
cropping =
|
|
427
|
-
mask =
|
|
428
|
-
elif self.shape ==
|
|
397
|
+
cropping = cache_dict[D_FIRST_CROPPING]
|
|
398
|
+
mask = cache_dict[D_FIRST_CROPPING_MASK]
|
|
399
|
+
elif self.shape.value == Shape.CROPPING:
|
|
429
400
|
cropping_image = workspace.image_set.get_image(
|
|
430
401
|
self.cropping_mask_source.value
|
|
431
402
|
)
|
|
432
403
|
cropping = cropping_image.crop_mask
|
|
433
|
-
elif self.shape ==
|
|
404
|
+
elif self.shape.value == Shape.IMAGE:
|
|
434
405
|
source_image = workspace.image_set.get_image(
|
|
435
406
|
self.image_mask_source.value
|
|
436
407
|
).pixel_data
|
|
437
408
|
|
|
438
409
|
cropping = source_image > 0
|
|
439
|
-
elif self.shape ==
|
|
410
|
+
elif self.shape.value == Shape.OBJECTS:
|
|
440
411
|
masking_objects = workspace.get_objects(self.objects_source.value)
|
|
441
412
|
cropping = masking_objects.segmented > 0
|
|
442
|
-
elif self.crop_method ==
|
|
413
|
+
elif self.crop_method.value == CroppingMethod.MOUSE:
|
|
443
414
|
cropping = self.ui_crop(workspace, orig_image)
|
|
444
|
-
elif self.shape ==
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
if orig_image.has_mask:
|
|
457
|
-
image_mask = mask & orig_image.mask
|
|
458
|
-
else:
|
|
459
|
-
image_mask = mask
|
|
460
|
-
else:
|
|
461
|
-
internal_cropping = self.remove_rows_and_columns == RM_ALL
|
|
462
|
-
cropped_pixel_data = crop_image(
|
|
463
|
-
orig_image.pixel_data, cropping, internal_cropping
|
|
415
|
+
elif self.shape.value == Shape.ELLIPSE:
|
|
416
|
+
cache_dict[Shape.ELLIPSE] = {
|
|
417
|
+
Ellipse.XCENTER: self.ellipse_center.x,
|
|
418
|
+
Ellipse.YCENTER: self.ellipse_center.y,
|
|
419
|
+
Ellipse.XRADIUS: self.ellipse_x_radius.value,
|
|
420
|
+
Ellipse.YRADIUS: self.ellipse_y_radius.value,
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
cropping = get_ellipse_cropping(
|
|
424
|
+
orig_image.pixel_data,
|
|
425
|
+
(self.ellipse_center.x, self.ellipse_center.y),
|
|
426
|
+
(self.ellipse_x_radius.value, self.ellipse_y_radius.value)
|
|
464
427
|
)
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
if
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
428
|
+
|
|
429
|
+
elif self.shape.value == Shape.RECTANGLE:
|
|
430
|
+
h_min = self.horizontal_limits.min if not self.horizontal_limits.unbounded_min else None
|
|
431
|
+
h_max = self.horizontal_limits.max if not self.horizontal_limits.unbounded_max else None
|
|
432
|
+
v_min = self.vertical_limits.min if not self.vertical_limits.unbounded_min else None
|
|
433
|
+
v_max = self.vertical_limits.max if not self.vertical_limits.unbounded_max else None
|
|
434
|
+
|
|
435
|
+
cropping = get_rectangle_cropping(orig_image.pixel_data, (h_min, h_max, v_min, v_max), validate_boundaries=True)
|
|
436
|
+
else:
|
|
437
|
+
raise NotImplementedError(f"Cropping shape {self.shape.value} or crop method {self.crop_method} not supported.")
|
|
438
|
+
|
|
439
|
+
assert(cropping is not None)
|
|
440
|
+
assert(cropping.dtype == bool)
|
|
441
|
+
|
|
442
|
+
cropped_pixel_data, mask, image_mask = crop(orig_image.pixel_data, cropping, mask, orig_image.mask, self.remove_rows_and_columns.value)
|
|
443
|
+
|
|
444
|
+
if self.shape.value == Shape.OBJECTS:
|
|
479
445
|
# Special handling for objects - masked objects instead of
|
|
480
446
|
# mask and crop mask
|
|
481
447
|
output_image = Image(
|
|
@@ -501,8 +467,8 @@ objects:
|
|
|
501
467
|
)
|
|
502
468
|
|
|
503
469
|
if save_flag:
|
|
504
|
-
|
|
505
|
-
|
|
470
|
+
cache_dict[D_FIRST_CROPPING_MASK] = mask
|
|
471
|
+
cache_dict[D_FIRST_CROPPING] = cropping
|
|
506
472
|
#
|
|
507
473
|
# Save the image / cropping / mask
|
|
508
474
|
#
|
|
@@ -510,13 +476,10 @@ objects:
|
|
|
510
476
|
#
|
|
511
477
|
# Save the old and new image sizes
|
|
512
478
|
#
|
|
513
|
-
original_image_area = numpy.product(orig_image.pixel_data.shape[:2])
|
|
514
|
-
area_retained_after_cropping = numpy.sum(cropping)
|
|
515
|
-
feature = FF_AREA_RETAINED % self.cropped_image_name.value
|
|
516
479
|
m = workspace.measurements
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
480
|
+
for measurement in get_measurements(cropping, orig_image.pixel_data, self.cropped_image_name.value):
|
|
481
|
+
m.add_measurement("Image", measurement[1], numpy.array([measurement[2]]))
|
|
482
|
+
|
|
520
483
|
|
|
521
484
|
def display(self, workspace, figure):
|
|
522
485
|
orig_image_pixel_data = workspace.display_data.orig_image_pixel_data
|
|
@@ -536,20 +499,28 @@ objects:
|
|
|
536
499
|
"""Return information on the measurements made during cropping"""
|
|
537
500
|
return [
|
|
538
501
|
("Image", x % self.cropped_image_name.value, "integer",)
|
|
539
|
-
for x in (
|
|
502
|
+
for x in (Measurement.AREA_RETAINED, Measurement.ORIGINAL_AREA)
|
|
540
503
|
]
|
|
541
504
|
|
|
542
505
|
def ui_crop(self, workspace, orig_image):
|
|
543
506
|
"""Crop into a rectangle or ellipse, guided by UI"""
|
|
544
|
-
|
|
545
|
-
if (self.shape.value not in
|
|
546
|
-
|
|
547
|
-
self,
|
|
507
|
+
cache_dict = self.get_dictionary(workspace.image_set_list)
|
|
508
|
+
if (self.shape.value not in cache_dict) or self.individual_or_once.value == CroppingPattern.INDIVIDUALLY:
|
|
509
|
+
cache_dict[self.shape.value] = workspace.interaction_request(
|
|
510
|
+
self, cache_dict.get(self.shape.value, None), orig_image.pixel_data
|
|
548
511
|
)
|
|
549
|
-
if self.shape ==
|
|
550
|
-
|
|
512
|
+
if self.shape.value == Shape.ELLIPSE:
|
|
513
|
+
center = cache_dict[Shape.ELLIPSE][Ellipse.XCENTER], cache_dict[Shape.ELLIPSE][Ellipse.YCENTER]
|
|
514
|
+
radius = cache_dict[Shape.ELLIPSE][Ellipse.XRADIUS], cache_dict[Shape.ELLIPSE][Ellipse.YRADIUS]
|
|
515
|
+
return get_ellipse_cropping(orig_image.pixel_data, center, radius)
|
|
551
516
|
else:
|
|
552
|
-
|
|
517
|
+
bounding_box = (
|
|
518
|
+
int(numpy.round(cache_dict[Shape.RECTANGLE][Rectangle.LEFT])),
|
|
519
|
+
int(numpy.round(cache_dict[Shape.RECTANGLE][Rectangle.RIGHT])),
|
|
520
|
+
int(numpy.round(cache_dict[Shape.RECTANGLE][Rectangle.TOP])),
|
|
521
|
+
int(numpy.round(cache_dict[Shape.RECTANGLE][Rectangle.BOTTOM])),
|
|
522
|
+
)
|
|
523
|
+
return get_rectangle_cropping(orig_image.pixel_data, bounding_box, validate_boundaries=True)
|
|
553
524
|
|
|
554
525
|
def handle_interaction(self, current_shape, orig_image):
|
|
555
526
|
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
|
|
@@ -788,31 +759,31 @@ objects:
|
|
|
788
759
|
def handles(self):
|
|
789
760
|
return [self.center_handle, self.radius_handle]
|
|
790
761
|
|
|
791
|
-
if self.shape ==
|
|
762
|
+
if self.shape.value == Shape.ELLIPSE:
|
|
792
763
|
if current_shape is None:
|
|
793
764
|
current_shape = {
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
765
|
+
Ellipse.XCENTER: pixel_data.shape[1] / 2,
|
|
766
|
+
Ellipse.YCENTER: pixel_data.shape[0] / 2,
|
|
767
|
+
Ellipse.XRADIUS: pixel_data.shape[1] / 2,
|
|
768
|
+
Ellipse.YRADIUS: pixel_data.shape[0] / 2,
|
|
798
769
|
}
|
|
799
770
|
ellipse = current_shape
|
|
800
771
|
shape = CropEllipse(
|
|
801
|
-
(ellipse[
|
|
802
|
-
(ellipse[
|
|
772
|
+
(ellipse[Ellipse.XCENTER], ellipse[Ellipse.YCENTER]),
|
|
773
|
+
(ellipse[Ellipse.XRADIUS], ellipse[Ellipse.YRADIUS]),
|
|
803
774
|
)
|
|
804
775
|
else:
|
|
805
776
|
if current_shape is None:
|
|
806
777
|
current_shape = {
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
778
|
+
Rectangle.LEFT: pixel_data.shape[1] / 4,
|
|
779
|
+
Rectangle.TOP: pixel_data.shape[0] / 4,
|
|
780
|
+
Rectangle.RIGHT: pixel_data.shape[1] * 3 / 4,
|
|
781
|
+
Rectangle.BOTTOM: pixel_data.shape[0] * 3 / 4,
|
|
811
782
|
}
|
|
812
783
|
rectangle = current_shape
|
|
813
784
|
shape = CropRectangle(
|
|
814
|
-
(rectangle[
|
|
815
|
-
(rectangle[
|
|
785
|
+
(rectangle[Rectangle.LEFT], rectangle[Rectangle.TOP]),
|
|
786
|
+
(rectangle[Rectangle.RIGHT], rectangle[Rectangle.BOTTOM]),
|
|
816
787
|
)
|
|
817
788
|
for patch in shape.patches:
|
|
818
789
|
axes.add_artist(patch)
|
|
@@ -843,91 +814,21 @@ objects:
|
|
|
843
814
|
raise ValueError("Cancelled by user")
|
|
844
815
|
finally:
|
|
845
816
|
dialog_box.Destroy()
|
|
846
|
-
if self.shape ==
|
|
817
|
+
if self.shape.value == Shape.RECTANGLE:
|
|
847
818
|
return {
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
819
|
+
Rectangle.LEFT: shape.left,
|
|
820
|
+
Rectangle.TOP: shape.top,
|
|
821
|
+
Rectangle.RIGHT: shape.right,
|
|
822
|
+
Rectangle.BOTTOM: shape.bottom,
|
|
852
823
|
}
|
|
853
824
|
else:
|
|
854
825
|
return {
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
826
|
+
Ellipse.XCENTER: shape.center_x,
|
|
827
|
+
Ellipse.YCENTER: shape.center_y,
|
|
828
|
+
Ellipse.XRADIUS: shape.width / 2,
|
|
829
|
+
Ellipse.YRADIUS: shape.height / 2,
|
|
859
830
|
}
|
|
860
831
|
|
|
861
|
-
def get_ellipse_cropping(self, workspace, orig_image):
|
|
862
|
-
"""Crop into an ellipse using user-specified coordinates"""
|
|
863
|
-
x_center = self.ellipse_center.x
|
|
864
|
-
y_center = self.ellipse_center.y
|
|
865
|
-
x_radius = self.ellipse_x_radius.value
|
|
866
|
-
y_radius = self.ellipse_y_radius.value
|
|
867
|
-
d = self.get_dictionary(workspace.image_set_list)
|
|
868
|
-
d[SH_ELLIPSE] = {
|
|
869
|
-
EL_XCENTER: x_center,
|
|
870
|
-
EL_YCENTER: y_center,
|
|
871
|
-
EL_XRADIUS: x_radius,
|
|
872
|
-
EL_YRADIUS: y_radius,
|
|
873
|
-
}
|
|
874
|
-
return self.apply_ellipse_cropping(workspace, orig_image)
|
|
875
|
-
|
|
876
|
-
def apply_ellipse_cropping(self, workspace, orig_image):
|
|
877
|
-
d = self.get_dictionary(workspace.image_set_list)
|
|
878
|
-
ellipse = d[SH_ELLIPSE]
|
|
879
|
-
x_center, y_center, x_radius, y_radius = [
|
|
880
|
-
ellipse[x] for x in (EL_XCENTER, EL_YCENTER, EL_XRADIUS, EL_YRADIUS)
|
|
881
|
-
]
|
|
882
|
-
pixel_data = orig_image.pixel_data
|
|
883
|
-
x_max = pixel_data.shape[1]
|
|
884
|
-
y_max = pixel_data.shape[0]
|
|
885
|
-
if x_radius > y_radius:
|
|
886
|
-
dist_x = math.sqrt(x_radius ** 2 - y_radius ** 2)
|
|
887
|
-
dist_y = 0
|
|
888
|
-
major_radius = x_radius
|
|
889
|
-
else:
|
|
890
|
-
dist_x = 0
|
|
891
|
-
dist_y = math.sqrt(y_radius ** 2 - x_radius ** 2)
|
|
892
|
-
major_radius = y_radius
|
|
893
|
-
|
|
894
|
-
focus_1_x, focus_1_y = (x_center - dist_x, y_center - dist_y)
|
|
895
|
-
focus_2_x, focus_2_y = (x_center + dist_x, y_center + dist_y)
|
|
896
|
-
y, x = numpy.mgrid[0:y_max, 0:x_max]
|
|
897
|
-
d1 = numpy.sqrt((x - focus_1_x) ** 2 + (y - focus_1_y) ** 2)
|
|
898
|
-
d2 = numpy.sqrt((x - focus_2_x) ** 2 + (y - focus_2_y) ** 2)
|
|
899
|
-
cropping = d1 + d2 <= major_radius * 2
|
|
900
|
-
return cropping
|
|
901
|
-
|
|
902
|
-
def get_rectangle_cropping(self, workspace, orig_image):
|
|
903
|
-
"""Crop into a rectangle using user-specified coordinates"""
|
|
904
|
-
cropping = numpy.ones(orig_image.pixel_data.shape[:2], bool)
|
|
905
|
-
if not self.horizontal_limits.unbounded_min:
|
|
906
|
-
cropping[:, : self.horizontal_limits.min] = False
|
|
907
|
-
if not self.horizontal_limits.unbounded_max:
|
|
908
|
-
cropping[:, self.horizontal_limits.max :] = False
|
|
909
|
-
if not self.vertical_limits.unbounded_min:
|
|
910
|
-
cropping[: self.vertical_limits.min, :] = False
|
|
911
|
-
if not self.vertical_limits.unbounded_max:
|
|
912
|
-
cropping[self.vertical_limits.max :, :] = False
|
|
913
|
-
return cropping
|
|
914
|
-
|
|
915
|
-
def apply_rectangle_cropping(self, workspace, orig_image):
|
|
916
|
-
cropping = numpy.ones(orig_image.pixel_data.shape[:2], bool)
|
|
917
|
-
d = self.get_dictionary(workspace.image_set_list)
|
|
918
|
-
r = d[SH_RECTANGLE]
|
|
919
|
-
left, top, right, bottom = [
|
|
920
|
-
int(numpy.round(r[x])) for x in (RE_LEFT, RE_TOP, RE_RIGHT, RE_BOTTOM)
|
|
921
|
-
]
|
|
922
|
-
if left > 0:
|
|
923
|
-
cropping[:, :left] = False
|
|
924
|
-
if right < cropping.shape[1]:
|
|
925
|
-
cropping[:, right:] = False
|
|
926
|
-
if top > 0:
|
|
927
|
-
cropping[:top, :] = False
|
|
928
|
-
if bottom < cropping.shape[0]:
|
|
929
|
-
cropping[bottom:, :] = False
|
|
930
|
-
return cropping
|
|
931
832
|
|
|
932
833
|
def upgrade_settings(self, setting_values, variable_revision_number, module_name):
|
|
933
834
|
if variable_revision_number == 1:
|
|
@@ -940,12 +841,12 @@ objects:
|
|
|
940
841
|
# minor - "Cropping" changed to "Previous cropping"
|
|
941
842
|
setting_values = list(setting_values)
|
|
942
843
|
if setting_values[OFF_SHAPE] == "Cropping":
|
|
943
|
-
setting_values[OFF_SHAPE] =
|
|
844
|
+
setting_values[OFF_SHAPE] = Shape.CROPPING
|
|
944
845
|
#
|
|
945
846
|
# Individually changed to "every"
|
|
946
847
|
#
|
|
947
848
|
if setting_values[OFF_INDIVIDUAL_OR_ONCE] == "Individually":
|
|
948
|
-
setting_values[OFF_INDIVIDUAL_OR_ONCE] =
|
|
849
|
+
setting_values[OFF_INDIVIDUAL_OR_ONCE] = CroppingPattern.INDIVIDUALLY
|
|
949
850
|
|
|
950
851
|
setting_values = setting_values[:10] + setting_values[11:]
|
|
951
852
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/__init__.py
RENAMED
|
File without changes
|
{cellprofiler_nightly-5.0.0.dev318 → cellprofiler_nightly-5.0.0.dev321}/cellprofiler/__main__.py
RENAMED
|
File without changes
|