CellProfiler-nightly 5.0.0.dev562__tar.gz → 5.0.0.dev592__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.dev562 → cellprofiler_nightly-5.0.0.dev592}/CellProfiler_nightly.egg-info/PKG-INFO +1 -1
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/PKG-INFO +1 -1
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/_version.py +3 -3
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measureimageintensity.py +4 -4
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measureobjectintensity.py +7 -5
- cellprofiler_nightly-5.0.0.dev592/cellprofiler/modules/measureobjectneighbors.py +596 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measureobjectsizeshape.py +32 -56
- cellprofiler_nightly-5.0.0.dev562/cellprofiler/modules/measureobjectneighbors.py +0 -958
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/CellProfiler_nightly.egg-info/SOURCES.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/CellProfiler_nightly.egg-info/dependency_links.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/CellProfiler_nightly.egg-info/entry_points.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/CellProfiler_nightly.egg-info/requires.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/CellProfiler_nightly.egg-info/top_level.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/LICENSE +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/README.md +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/__main__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/examples/ExampleFly/ExampleFly.cppipe +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/examples/ExampleFly/images/01_POS002_D.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/examples/ExampleFly/images/01_POS002_F.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/examples/ExampleFly/images/01_POS002_R.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/examples/ExampleFly/images/01_POS076_D.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/examples/ExampleFly/images/01_POS076_F.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/examples/ExampleFly/images/01_POS076_R.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/examples/ExampleFly/images/01_POS218_D.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/examples/ExampleFly/images/01_POS218_F.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/examples/ExampleFly/images/01_POS218_R.TIF +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/display_image_tools.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/display_interactive_navigation.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/display_menu_bar.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/legacy_matlab_image.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/navigation_edit_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/navigation_file_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/navigation_test_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/navigation_window_menu.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/other_3d_identify.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/other_batch.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/other_logging.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/other_omero.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/other_plugins.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/other_shell.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/other_troubleshooting.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/other_widget_inspector.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/output_measurements.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/output_plateviewer.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/output_spreadsheets.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/pipelines_building.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/pipelines_running.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/projects_configure_images.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/projects_image_ordering.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/projects_image_sequences.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/projects_introduction.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/projects_selecting_images.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/help/why_use_cellprofiler.rst +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon-120.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon-128.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon-144.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon-152.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon-195.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon-228.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon-32.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon-57.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon-72.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon-96.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler-favicon.ico +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler.ai +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler.icns +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler.ico +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler.svg +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/icons/CellProfiler_square.svg +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Align.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/ApplyThreshold.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/CollapseTree.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/ColorToGray.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/CorrectIlluminationApply.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/CorrectIlluminationCalculate.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Crop.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/ExpandOrShrinkObjects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/ExpandTree.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/GrayToColor.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Groups_ExampleDisplayTable.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_ANALYZED.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_ANALYZE_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_ANALYZE_24.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_CLOSED_EYE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_DISABLED.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_ERROR.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_EYE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_GO.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_GO_DIM.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_IMAGE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_MEASURE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_OK.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_PAUSE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_RUN.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_SLIDER.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_SLIDER_ACTIVE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_STOP.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_TEST.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_UNAVAILABLE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_UPDATE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_USE_INPUT.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_USE_OUTPUT.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_USE_SOURCE.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IMG_WARN.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IdentifyPrimaryObjects_IntensityDeclumping.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IdentifyPrimaryObjects_ShapeDeclumping.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IdentifySecondaryObjects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/IdentifyTertiaryObjects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Images_FilelistPanel.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Images_FilelistPanel_Blank.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Images_FilelistPanel_Filled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Images_UsingRules.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/MeasureGranularity_example.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/MeasureImageAreaOccupied.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/MeasureObjectIntensityDistribution_Edges_Centers.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/MeasureObjectIntensityDistribution_Magnitude_Phase.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/MeasureObjectSizeShape_Eccentricity.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/MeasureTexture.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Measure_texture_3D_correspondences_1.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Measure_texture_3D_correspondences_1_highres.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Measure_texture_3D_correspondences_2.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Measure_texture_3D_correspondences_2_highres.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Metadata_ExampleDisplayTable.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/NamesAndTypes_ExampleDisplayTable.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/Tile.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/UnmixColors.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/check.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/color.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/cp_panel_schematic.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/dapi.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/delete.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/downarrow.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/eye-close.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/eye-open.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/ffwd.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/ffwddisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/filter.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/folder_browse.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/folder_create.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/gear.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/gfp.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/icon_copyrights.txt +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/illumination_function.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/image_to_object_dataflow.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/image_to_object_dataflow.psd +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/mask.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/microscope-color_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/microscope-icon_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/microscope-icon_32.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/microscopes_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/module_add.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/module_help.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/module_movedown.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/module_moveup.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/module_remove.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/monochrome.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/movie_16.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/next.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/objects.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/pause.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/pausedisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/play.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/playdisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/previous.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/remove-sign.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/rewind.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/rewinddisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/splash-black-text-alpha.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/splash-white-text-alpha.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/splash.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/status_pause.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/status_save.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/status_stop.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/stop.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/stopdisabled.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/structuringelement.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/thumb-down.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/thumb-up.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/unchecked.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/wantpony.wav +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcome_examples.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcome_forum.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcome_help.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcome_manual.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcome_new.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcome_pipeline.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcome_screen_help.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcome_start.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcome_tutorial.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcomescreen_forum.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcomescreen_manual.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/welcomescreen_tutorials.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/window_back.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/window_filesave.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/window_forward.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/window_home.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/window_pan.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/data/images/window_zoom_to_rect.png +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/_tree_checkbox_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/_welcome_frame.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/_workspace_model.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/addmoduleframe.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/app.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/artist.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/checkupdate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/constants/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/constants/figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/constants/module_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/constants/preferences_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/constants/preferences_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/constants/workspace_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/cpframe.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/editobjectsdlg.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/errordialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/figure/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/figure/_figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/figure/_navigation_toolbar.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/figure/_outline_artist.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/gridrenderers.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/help/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/help/content.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/help/menu.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/help/search.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/configure_images_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/exporting_results_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/getting_started.html +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/htmlwindow.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/identify_features_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/in_app_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/making_measurements_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/running_pipeline_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/selecting_images_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/test_mode_help.html +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/utils.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/html/welcome.html +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/htmldialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/imagesetctrl.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/menu.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/metadatactrl.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/_binary_matrix_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/_data_type_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/_file_collection_display_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/_filter_panel_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/_joiner_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/_module_sizer.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/_module_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/_setting_edited_event.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/_table_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/module_view/_validation_request_controller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/moduleview.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/namesubscriber.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/omerologin.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/parametersampleframe.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/pathlist.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/pipeline.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/pipelinecontroller.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/pipelinelistview.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/plateviewer.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/plugins_menu.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/preferences_dialog/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/preferences_dialog/_integer_preference.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/preferences_dialog/_preferences_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/preferences_view/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/preferences_view/_preferences_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/preferences_view/_progress_watcher.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/readers_dialog/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/readers_dialog/_readers_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/regexp_editor.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/tools.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/utilities/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/utilities/figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/utilities/icon.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/utilities/module_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/utilities/preferences_dialog.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/utilities/preferences_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/utilities/workspace_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/workspace_view/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/workspace_view/_workspace_view.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/workspace_view/_workspace_view_figure.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/workspace_view/_workspace_view_image_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/workspace_view/_workspace_view_mask_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/workspace_view/_workspace_view_measurement_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/workspace_view/_workspace_view_objects_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/gui/workspace_view/_workspace_view_row.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/icons/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/knime_bridge.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/misc.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/UntangleWorms.xsd +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/_help.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/calculatemath.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/calculatestatistics.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/classifyobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/closing.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/colortogray.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/combineobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/convertimagetoobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/convertobjectstoimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/correctilluminationapply.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/correctilluminationcalculate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/createbatchfiles.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/crop.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/definegrid.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/dilateimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/dilateobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/displaydataonimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/displaydensityplot.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/displayhistogram.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/displayplatemap.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/displayscatterplot.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/editobjectsmanually.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/enhanceedges.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/enhanceorsuppressfeatures.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/erodeimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/erodeobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/expandorshrinkobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/exporttodatabase.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/exporttospreadsheet.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/fillobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/filterobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/findmaxima.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/flagimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/flipandrotate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/gaussianfilter.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/graytocolor.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/identifydeadworms.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/identifyobjectsingrid.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/identifyobjectsmanually.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/identifyprimaryobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/identifysecondaryobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/identifytertiaryobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/imagemath.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/invertforprinting.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/labelimages.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/makeprojection.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/maskimage.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/maskobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/matchtemplate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measurecolocalization.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measuregranularity.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measureimageareaoccupied.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measureimageoverlap.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measureimagequality.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measureimageskeleton.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measureobjectintensitydistribution.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measureobjectoverlap.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measureobjectskeleton.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/measuretexture.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/medialaxis.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/medianfilter.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/morph.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/morphologicalskeleton.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/opening.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/overlayobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/overlayoutlines.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/plugins/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/plugins/imagetemplate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/plugins/measurementtemplate.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/plugins/segmentationtemplatewithdependencies.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/reducenoise.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/relateobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/removeholes.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/rescaleintensity.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/resize.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/resizeobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/runimagejmacro.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/savecroppedobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/saveimages.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/shrinktoobjectcenters.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/smooth.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/splitormergeobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/straightenworms.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/threshold.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/tile.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/trackobjects.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/unmixcolors.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/untangleworms.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/modules/watershed.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/utilities/__init__.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/utilities/morphology.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/cellprofiler/utilities/rules.py +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/environment.yml +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/pyproject.toml +0 -0
- {cellprofiler_nightly-5.0.0.dev562 → cellprofiler_nightly-5.0.0.dev592}/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.dev592
|
|
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.dev592
|
|
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.dev562 → cellprofiler_nightly-5.0.0.dev592}/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.dev592'
|
|
32
|
+
__version_tuple__ = version_tuple = (5, 0, 0, 'dev592')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g9880bd09c'
|
|
@@ -238,10 +238,10 @@ class MeasureImageIntensity(Module):
|
|
|
238
238
|
self._add_library_measurements_to_core(lib_measurements, workspace)
|
|
239
239
|
statistics += lib_display.statistics
|
|
240
240
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
241
|
+
if self.show_window:
|
|
242
|
+
col_labels = ["Image", "Masking object", "Feature", "Value"]
|
|
243
|
+
workspace.display_data.statistics = statistics
|
|
244
|
+
workspace.display_data.col_labels = col_labels
|
|
245
245
|
|
|
246
246
|
def display(self, workspace, figure):
|
|
247
247
|
figure.set_subplots((1, 1))
|
|
@@ -237,7 +237,7 @@ class MeasureObjectIntensity(Module):
|
|
|
237
237
|
objects = workspace.object_set.get_objects(object_name)
|
|
238
238
|
nobjects = objects.count
|
|
239
239
|
|
|
240
|
-
lib_measurements,
|
|
240
|
+
lib_measurements, lib_display = measure_object_intensity(
|
|
241
241
|
img=img,
|
|
242
242
|
image_name=image_name,
|
|
243
243
|
object_name=object_name,
|
|
@@ -245,8 +245,8 @@ class MeasureObjectIntensity(Module):
|
|
|
245
245
|
object_labels=objects.get_labels(),
|
|
246
246
|
nobjects=nobjects,
|
|
247
247
|
image_dimensions=image.dimensions,
|
|
248
|
+
return_visualization_data=True,
|
|
248
249
|
)
|
|
249
|
-
|
|
250
250
|
m = workspace.measurements
|
|
251
251
|
|
|
252
252
|
# Feature Name -> Template String
|
|
@@ -255,7 +255,11 @@ class MeasureObjectIntensity(Module):
|
|
|
255
255
|
for val in (getattr(TemplateMeasurementFormat, x.name) for x in IntensityFeature)
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
|
|
258
|
+
if self.show_window:
|
|
259
|
+
workspace.display_data.statistics += lib_display.statistics
|
|
260
|
+
|
|
261
|
+
# TODO: library cleanup - should just iterate on measurements not stats
|
|
262
|
+
for stat in lib_display.statistics:
|
|
259
263
|
image_name = stat[0]
|
|
260
264
|
object_name = stat[1]
|
|
261
265
|
feature_name = stat[2]
|
|
@@ -265,8 +269,6 @@ class MeasureObjectIntensity(Module):
|
|
|
265
269
|
if lib_measurements.has_feature(object_name, measurement_name):
|
|
266
270
|
measurement = lib_measurements.get_measurement(object_name, measurement_name)
|
|
267
271
|
m.add_measurement(object_name, measurement_name, measurement)
|
|
268
|
-
if self.show_window and len(measurement) > 0:
|
|
269
|
-
workspace.display_data.statistics.append(stat)
|
|
270
272
|
|
|
271
273
|
def display(self, workspace, figure):
|
|
272
274
|
figure.set_subplots((1, 1))
|
|
@@ -0,0 +1,596 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MeasureObjectNeighbors
|
|
3
|
+
======================
|
|
4
|
+
|
|
5
|
+
**MeasureObjectNeighbors** calculates how many neighbors each object
|
|
6
|
+
has and records various properties about the neighbors’ relationships,
|
|
7
|
+
including the percentage of an object’s edge pixels that touch a
|
|
8
|
+
neighbor. Please note that the distances reported for object
|
|
9
|
+
measurements are center-to-center distances, not edge-to-edge distances.
|
|
10
|
+
|
|
11
|
+
Given an image with objects identified (e.g., nuclei or cells), this
|
|
12
|
+
module determines how many neighbors each object has. You can specify
|
|
13
|
+
the distance within which objects should be considered neighbors, or
|
|
14
|
+
that objects are only considered neighbors if they are directly
|
|
15
|
+
touching.
|
|
16
|
+
|
|
17
|
+
|
|
|
18
|
+
|
|
19
|
+
============ ============ ===============
|
|
20
|
+
Supports 2D? Supports 3D? Respects masks?
|
|
21
|
+
============ ============ ===============
|
|
22
|
+
YES YES NO
|
|
23
|
+
============ ============ ===============
|
|
24
|
+
|
|
25
|
+
See also
|
|
26
|
+
^^^^^^^^
|
|
27
|
+
|
|
28
|
+
See also the **Identify** modules.
|
|
29
|
+
|
|
30
|
+
Measurements made by this module
|
|
31
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
32
|
+
|
|
33
|
+
**Object measurements**
|
|
34
|
+
|
|
35
|
+
- *NumberOfNeighbors:* Number of neighbor objects.
|
|
36
|
+
- *PercentTouching:* Percent of the object’s boundary pixels that touch
|
|
37
|
+
neighbors, after the objects have been expanded to the specified
|
|
38
|
+
distance.
|
|
39
|
+
- *FirstClosestObjectNumber:* The index of the closest object.
|
|
40
|
+
- *FirstClosestDistance:* The distance to the closest object (in units
|
|
41
|
+
of pixels), measured between object centers.
|
|
42
|
+
- *SecondClosestObjectNumber:* The index of the second closest object.
|
|
43
|
+
- *SecondClosestDistance:* The distance to the second closest object (in units
|
|
44
|
+
of pixels), measured between object centers.
|
|
45
|
+
- *AngleBetweenNeighbors:* The angle formed with the object center as
|
|
46
|
+
the vertex and the first and second closest object centers along the
|
|
47
|
+
vectors.
|
|
48
|
+
|
|
49
|
+
**Object relationships:** The identity of the neighboring objects, for
|
|
50
|
+
each object. Since per-object output is one-to-one and neighbors
|
|
51
|
+
relationships are often many-to-one, they may be saved as a separate
|
|
52
|
+
file in **ExportToSpreadsheet** by selecting *Object relationships* from
|
|
53
|
+
the list of objects to export.
|
|
54
|
+
|
|
55
|
+
Technical notes
|
|
56
|
+
^^^^^^^^^^^^^^^
|
|
57
|
+
|
|
58
|
+
Objects discarded via modules such as **IdentifyPrimaryObjects** or
|
|
59
|
+
**IdentifySecondaryObjects** will still register as neighbors for the
|
|
60
|
+
purposes of accurate measurement. For instance, if an object touches a
|
|
61
|
+
single object and that object had been discarded, *NumberOfNeighbors*
|
|
62
|
+
will be positive, but there may not be a corresponding
|
|
63
|
+
*ClosestObjectNumber*. This can be disabled in module settings.
|
|
64
|
+
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
import matplotlib.cm
|
|
68
|
+
import numpy
|
|
69
|
+
from cellprofiler_core.constants.measurement import COLTYPE_FLOAT
|
|
70
|
+
from cellprofiler_core.constants.measurement import COLTYPE_INTEGER
|
|
71
|
+
from cellprofiler_core.constants.measurement import MCA_AVAILABLE_EACH_CYCLE
|
|
72
|
+
from cellprofiler_core.constants.measurement import NEIGHBORS
|
|
73
|
+
from cellprofiler_core.image import Image
|
|
74
|
+
from cellprofiler_core.measurement import Measurements
|
|
75
|
+
from cellprofiler_core.module import Module
|
|
76
|
+
from cellprofiler_core.object import Objects
|
|
77
|
+
from cellprofiler_core.preferences import get_default_colormap
|
|
78
|
+
from cellprofiler_core.setting import Binary
|
|
79
|
+
from cellprofiler_core.setting.choice import Choice, Colormap
|
|
80
|
+
from cellprofiler_core.setting.subscriber import LabelSubscriber
|
|
81
|
+
from cellprofiler_core.setting.text import ImageName
|
|
82
|
+
from cellprofiler_core.setting.text import Integer
|
|
83
|
+
from cellprofiler_core.workspace import Workspace
|
|
84
|
+
from cellprofiler_library.opts.measureobjectneighbors import DistanceMethod, Measurement, MeasurementScale, C_NEIGHBORS, M_ALL, D_ALL
|
|
85
|
+
from cellprofiler_library.types import ObjectSegmentation
|
|
86
|
+
from cellprofiler_library.modules._measureobjectneighbors import measure_object_neighbors
|
|
87
|
+
from cellprofiler_library.measurement_model import (
|
|
88
|
+
R_FIRST_OBJECT_NUMBER,
|
|
89
|
+
R_SECOND_OBJECT_NUMBER,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
class MeasureObjectNeighbors(Module):
|
|
93
|
+
module_name = "MeasureObjectNeighbors"
|
|
94
|
+
category = "Measurement"
|
|
95
|
+
variable_revision_number = 3
|
|
96
|
+
|
|
97
|
+
def create_settings(self):
|
|
98
|
+
self.object_name = LabelSubscriber(
|
|
99
|
+
"Select objects to measure",
|
|
100
|
+
"None",
|
|
101
|
+
doc="""\
|
|
102
|
+
Select the objects whose neighbors you want to measure.""",
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
self.neighbors_name = LabelSubscriber(
|
|
106
|
+
"Select neighboring objects to measure",
|
|
107
|
+
"None",
|
|
108
|
+
doc="""\
|
|
109
|
+
This is the name of the objects that are potential
|
|
110
|
+
neighbors of the above objects. You can find the neighbors
|
|
111
|
+
within the same set of objects by selecting the same objects
|
|
112
|
+
as above.""",
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
self.distance_method = Choice(
|
|
116
|
+
"Method to determine neighbors",
|
|
117
|
+
D_ALL,
|
|
118
|
+
DistanceMethod.EXPAND.value,
|
|
119
|
+
doc="""\
|
|
120
|
+
There are several methods by which to determine whether objects are
|
|
121
|
+
neighbors:
|
|
122
|
+
|
|
123
|
+
- *{D_ADJACENT}:* In this mode, two objects must have adjacent
|
|
124
|
+
boundary pixels to be neighbors.
|
|
125
|
+
- *{D_EXPAND}:* The objects are expanded until all pixels on the
|
|
126
|
+
object boundaries are touching another. Two objects are neighbors if
|
|
127
|
+
any of their boundary pixels are adjacent after expansion.
|
|
128
|
+
- *{D_WITHIN}:* Each object is expanded by the number of pixels you
|
|
129
|
+
specify. Two objects are neighbors if they have adjacent pixels after
|
|
130
|
+
expansion. Note that *all* objects are expanded by this amount (e.g.,
|
|
131
|
+
if this distance is set to 10, a pair of objects will count as
|
|
132
|
+
neighbors if their edges are 20 pixels apart or closer).
|
|
133
|
+
|
|
134
|
+
For *{D_ADJACENT}* and *{D_EXPAND}*, the
|
|
135
|
+
*{M_PERCENT_TOUCHING}* measurement is the percentage of pixels on
|
|
136
|
+
the boundary of an object that touch adjacent objects. For
|
|
137
|
+
*{D_WITHIN}*, two objects are touching if any of their boundary
|
|
138
|
+
pixels are adjacent after expansion and *{M_PERCENT_TOUCHING}*
|
|
139
|
+
measures the percentage of boundary pixels of an *expanded* object that
|
|
140
|
+
touch adjacent objects.
|
|
141
|
+
""".format(
|
|
142
|
+
**{
|
|
143
|
+
"D_ADJACENT": DistanceMethod.ADJACENT.value,
|
|
144
|
+
"D_EXPAND": DistanceMethod.EXPAND.value,
|
|
145
|
+
"D_WITHIN": DistanceMethod.WITHIN.value,
|
|
146
|
+
"M_PERCENT_TOUCHING": Measurement.PERCENT_TOUCHING.value,
|
|
147
|
+
}
|
|
148
|
+
),
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
self.distance = Integer(
|
|
152
|
+
"Neighbor distance",
|
|
153
|
+
5,
|
|
154
|
+
1,
|
|
155
|
+
doc="""\
|
|
156
|
+
*(Used only when “%(D_WITHIN)s” is selected)*
|
|
157
|
+
|
|
158
|
+
The Neighbor distance is the number of pixels that each object is
|
|
159
|
+
expanded for the neighbor calculation. Expanded objects that touch are
|
|
160
|
+
considered neighbors.
|
|
161
|
+
""".format(
|
|
162
|
+
**{
|
|
163
|
+
"D_WITHIN": DistanceMethod.WITHIN.value,
|
|
164
|
+
}
|
|
165
|
+
),
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
self.wants_count_image = Binary(
|
|
169
|
+
"Retain the image of objects colored by numbers of neighbors?",
|
|
170
|
+
False,
|
|
171
|
+
doc="""\
|
|
172
|
+
An output image showing the input objects colored by numbers of
|
|
173
|
+
neighbors may be retained. A colormap of your choice shows how many
|
|
174
|
+
neighbors each object has. The background is set to -1. Objects are
|
|
175
|
+
colored with an increasing color value corresponding to the number of
|
|
176
|
+
neighbors, such that objects with no neighbors are given a color
|
|
177
|
+
corresponding to 0. Use the **SaveImages** module to save this image to
|
|
178
|
+
a file.""",
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
self.count_image_name = ImageName(
|
|
182
|
+
"Name the output image",
|
|
183
|
+
"ObjectNeighborCount",
|
|
184
|
+
doc="""\
|
|
185
|
+
*(Used only if the image of objects colored by numbers of neighbors is
|
|
186
|
+
to be retained for later use in the pipeline)*
|
|
187
|
+
|
|
188
|
+
Specify a name that will allow the image of objects colored by numbers
|
|
189
|
+
of neighbors to be selected later in the pipeline.""",
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
self.count_colormap = Colormap(
|
|
193
|
+
"Select colormap",
|
|
194
|
+
value="Blues",
|
|
195
|
+
doc="""\
|
|
196
|
+
*(Used only if the image of objects colored by numbers of neighbors is
|
|
197
|
+
to be retained for later use in the pipeline)*
|
|
198
|
+
|
|
199
|
+
Select the colormap to use to color the neighbor number image. All
|
|
200
|
+
available colormaps can be seen `here`_.
|
|
201
|
+
|
|
202
|
+
.. _here: http://matplotlib.org/examples/color/colormaps_reference.html""",
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
self.wants_percent_touching_image = Binary(
|
|
206
|
+
"Retain the image of objects colored by percent of touching pixels?",
|
|
207
|
+
False,
|
|
208
|
+
doc="""\
|
|
209
|
+
Select *Yes* to keep an image of the input objects colored by the
|
|
210
|
+
percentage of the boundary touching their neighbors. A colormap of your
|
|
211
|
+
choice is used to show the touching percentage of each object. Use the
|
|
212
|
+
**SaveImages** module to save this image to a file.
|
|
213
|
+
"""
|
|
214
|
+
% globals(),
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
self.touching_image_name = ImageName(
|
|
218
|
+
"Name the output image",
|
|
219
|
+
"PercentTouching",
|
|
220
|
+
doc="""\
|
|
221
|
+
*(Used only if the image of objects colored by percent touching is to be
|
|
222
|
+
retained for later use in the pipeline)*
|
|
223
|
+
|
|
224
|
+
Specify a name that will allow the image of objects colored by percent
|
|
225
|
+
of touching pixels to be selected later in the pipeline.""",
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
self.touching_colormap = Colormap(
|
|
229
|
+
"Select colormap",
|
|
230
|
+
value="Oranges",
|
|
231
|
+
doc="""\
|
|
232
|
+
*(Used only if the image of objects colored by percent touching is to be
|
|
233
|
+
retained for later use in the pipeline)*
|
|
234
|
+
|
|
235
|
+
Select the colormap to use to color the percent touching image. All
|
|
236
|
+
available colormaps can be seen `here`_.
|
|
237
|
+
|
|
238
|
+
.. _here: http://matplotlib.org/examples/color/colormaps_reference.html""",
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
self.wants_excluded_objects = Binary(
|
|
242
|
+
"Consider objects discarded for touching image border?",
|
|
243
|
+
True,
|
|
244
|
+
doc="""\
|
|
245
|
+
When set to *{YES}*, objects which were previously discarded for touching
|
|
246
|
+
the image borders will be considered as potential object neighbours in this
|
|
247
|
+
analysis. You may want to disable this if using object sets which were
|
|
248
|
+
further filtered, since those filters won't have been applied to the
|
|
249
|
+
previously discarded objects.""".format(
|
|
250
|
+
**{"YES": "Yes"}
|
|
251
|
+
),
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
def settings(self):
|
|
255
|
+
return [
|
|
256
|
+
self.object_name,
|
|
257
|
+
self.neighbors_name,
|
|
258
|
+
self.distance_method,
|
|
259
|
+
self.distance,
|
|
260
|
+
self.wants_excluded_objects,
|
|
261
|
+
self.wants_count_image,
|
|
262
|
+
self.count_image_name,
|
|
263
|
+
self.count_colormap,
|
|
264
|
+
self.wants_percent_touching_image,
|
|
265
|
+
self.touching_image_name,
|
|
266
|
+
self.touching_colormap,
|
|
267
|
+
]
|
|
268
|
+
|
|
269
|
+
def visible_settings(self):
|
|
270
|
+
result = [self.object_name, self.neighbors_name, self.distance_method]
|
|
271
|
+
if self.distance_method == DistanceMethod.WITHIN.value:
|
|
272
|
+
result += [self.distance]
|
|
273
|
+
result += [self.wants_excluded_objects, self.wants_count_image]
|
|
274
|
+
if self.wants_count_image.value:
|
|
275
|
+
result += [self.count_image_name, self.count_colormap]
|
|
276
|
+
result += [self.wants_percent_touching_image]
|
|
277
|
+
if self.wants_percent_touching_image.value:
|
|
278
|
+
result += [self.touching_image_name, self.touching_colormap]
|
|
279
|
+
return result
|
|
280
|
+
|
|
281
|
+
@property
|
|
282
|
+
def neighbors_are_objects(self):
|
|
283
|
+
"""True if the neighbors are taken from the same object set as objects"""
|
|
284
|
+
return self.object_name.value == self.neighbors_name.value
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
def run(self, workspace):
|
|
289
|
+
objects = workspace.object_set.get_objects(self.object_name.value)
|
|
290
|
+
assert isinstance(objects, Objects)
|
|
291
|
+
|
|
292
|
+
objects_small_removed_segmented: ObjectSegmentation = objects.small_removed_segmented
|
|
293
|
+
kept_labels: ObjectSegmentation = objects.segmented
|
|
294
|
+
has_pixels = objects.areas > 0
|
|
295
|
+
|
|
296
|
+
neighbor_objects = workspace.object_set.get_objects(self.neighbors_name.value)
|
|
297
|
+
assert isinstance(neighbor_objects, Objects)
|
|
298
|
+
|
|
299
|
+
neighbor_small_removed_segmented: ObjectSegmentation = neighbor_objects.small_removed_segmented
|
|
300
|
+
neighbor_kept_labels: ObjectSegmentation = neighbor_objects.segmented
|
|
301
|
+
|
|
302
|
+
dimensions = len(objects.shape)
|
|
303
|
+
|
|
304
|
+
wants_lib_display = self.show_window or self.wants_count_image.value or self.wants_percent_touching_image.value
|
|
305
|
+
res = measure_object_neighbors(
|
|
306
|
+
objects_small_removed_segmented,
|
|
307
|
+
kept_labels,
|
|
308
|
+
neighbor_small_removed_segmented,
|
|
309
|
+
neighbor_kept_labels,
|
|
310
|
+
self.object_name.value,
|
|
311
|
+
self.neighbors_name.value,
|
|
312
|
+
self.neighbors_are_objects,
|
|
313
|
+
dimensions,
|
|
314
|
+
self.distance.value,
|
|
315
|
+
self.distance_method.value,
|
|
316
|
+
has_pixels,
|
|
317
|
+
len(objects.indices),
|
|
318
|
+
self.wants_excluded_objects.value,
|
|
319
|
+
wants_lib_display,
|
|
320
|
+
)
|
|
321
|
+
if wants_lib_display:
|
|
322
|
+
lib_measurements, lib_display = res
|
|
323
|
+
else:
|
|
324
|
+
lib_measurements = res
|
|
325
|
+
|
|
326
|
+
#
|
|
327
|
+
# Record the measurements
|
|
328
|
+
#
|
|
329
|
+
assert isinstance(workspace, Workspace)
|
|
330
|
+
m = workspace.measurements
|
|
331
|
+
assert isinstance(m, Measurements)
|
|
332
|
+
|
|
333
|
+
# TODO: 5122 - Replace the three loops below with a single call to `add_library_measurements_to_worksapce_measurements()`
|
|
334
|
+
# Record Image Measurements
|
|
335
|
+
for feature_name, value in lib_measurements.image.items():
|
|
336
|
+
m.add_image_measurement(feature_name, value)
|
|
337
|
+
|
|
338
|
+
# Record Object Measurements
|
|
339
|
+
for object_name, features in lib_measurements.objects.items():
|
|
340
|
+
for feature_name, data in features.items():
|
|
341
|
+
m.add_measurement(object_name, feature_name, data)
|
|
342
|
+
|
|
343
|
+
for relationship in lib_measurements.get_relationship_groups():
|
|
344
|
+
data = lib_measurements.get_relationships(
|
|
345
|
+
relationship.relationship,
|
|
346
|
+
relationship.object_name1,
|
|
347
|
+
relationship.object_name2
|
|
348
|
+
)
|
|
349
|
+
n_records = len(data)
|
|
350
|
+
img_nums = numpy.ones(n_records, int) * m.image_set_number
|
|
351
|
+
|
|
352
|
+
m.add_relate_measurement(
|
|
353
|
+
self.module_num,
|
|
354
|
+
relationship.relationship,
|
|
355
|
+
relationship.object_name1,
|
|
356
|
+
relationship.object_name2,
|
|
357
|
+
img_nums,
|
|
358
|
+
data[R_FIRST_OBJECT_NUMBER],
|
|
359
|
+
img_nums,
|
|
360
|
+
data[R_SECOND_OBJECT_NUMBER],
|
|
361
|
+
)
|
|
362
|
+
|
|
363
|
+
if self.wants_count_image.value:
|
|
364
|
+
neighbor_cm = get_colormap(self.count_colormap.value)
|
|
365
|
+
sm = matplotlib.cm.ScalarMappable(cmap=neighbor_cm)
|
|
366
|
+
img = sm.to_rgba(lib_display.neighbor_count_image)[:, :, :3]
|
|
367
|
+
img[:, :, 0][~lib_display.object_mask] = 0
|
|
368
|
+
img[:, :, 1][~lib_display.object_mask] = 0
|
|
369
|
+
img[:, :, 2][~lib_display.object_mask] = 0
|
|
370
|
+
count_image = Image(img, masking_objects=objects)
|
|
371
|
+
workspace.image_set.add(self.count_image_name.value, count_image)
|
|
372
|
+
|
|
373
|
+
if self.wants_percent_touching_image:
|
|
374
|
+
percent_touching_cm = get_colormap(self.touching_colormap.value)
|
|
375
|
+
sm = matplotlib.cm.ScalarMappable(cmap=percent_touching_cm)
|
|
376
|
+
img = sm.to_rgba(lib_display.percent_touching_image)[:, :, :3]
|
|
377
|
+
img[:, :, 0][~lib_display.object_mask] = 0
|
|
378
|
+
img[:, :, 1][~lib_display.object_mask] = 0
|
|
379
|
+
img[:, :, 2][~lib_display.object_mask] = 0
|
|
380
|
+
touching_image = Image(img, masking_objects=objects)
|
|
381
|
+
workspace.image_set.add(self.touching_image_name.value, touching_image)
|
|
382
|
+
|
|
383
|
+
if self.show_window:
|
|
384
|
+
workspace.display_data.neighbor_count_image = lib_display.neighbor_count_image
|
|
385
|
+
workspace.display_data.neighbor_cm_name = self.count_colormap.value
|
|
386
|
+
workspace.display_data.percent_touching_image = lib_display.percent_touching_image
|
|
387
|
+
workspace.display_data.percent_touching_cm_name = self.touching_colormap.value
|
|
388
|
+
workspace.display_data.orig_labels = kept_labels
|
|
389
|
+
workspace.display_data.neighbor_labels = neighbor_kept_labels
|
|
390
|
+
workspace.display_data.expanded_labels = lib_display.expanded_labels
|
|
391
|
+
workspace.display_data.object_mask = lib_display.object_mask
|
|
392
|
+
workspace.display_data.dimensions = dimensions
|
|
393
|
+
|
|
394
|
+
def display(self, workspace, figure):
|
|
395
|
+
dimensions = workspace.display_data.dimensions
|
|
396
|
+
figure.set_subplots((2, 2), dimensions=dimensions)
|
|
397
|
+
figure.subplot_imshow_labels(
|
|
398
|
+
0,
|
|
399
|
+
0,
|
|
400
|
+
workspace.display_data.orig_labels,
|
|
401
|
+
"Original: %s" % self.object_name.value,
|
|
402
|
+
)
|
|
403
|
+
|
|
404
|
+
object_mask = workspace.display_data.object_mask
|
|
405
|
+
expanded_labels = workspace.display_data.expanded_labels
|
|
406
|
+
neighbor_count_image = workspace.display_data.neighbor_count_image
|
|
407
|
+
neighbor_count_image[~object_mask] = -1
|
|
408
|
+
neighbor_cm = get_colormap(workspace.display_data.neighbor_cm_name)
|
|
409
|
+
neighbor_cm.set_under((0, 0, 0))
|
|
410
|
+
neighbor_cm = matplotlib.cm.ScalarMappable(cmap=neighbor_cm)
|
|
411
|
+
percent_touching_cm = get_colormap(
|
|
412
|
+
workspace.display_data.percent_touching_cm_name
|
|
413
|
+
)
|
|
414
|
+
percent_touching_cm.set_under((0, 0, 0))
|
|
415
|
+
percent_touching_image = workspace.display_data.percent_touching_image
|
|
416
|
+
percent_touching_image[~object_mask] = -1
|
|
417
|
+
percent_touching_cm = matplotlib.cm.ScalarMappable(cmap=percent_touching_cm)
|
|
418
|
+
expandplot_position = 0
|
|
419
|
+
if not self.neighbors_are_objects:
|
|
420
|
+
# Display the neighbor object set, move expanded objects plot out of the way
|
|
421
|
+
expandplot_position = 1
|
|
422
|
+
figure.subplot_imshow_labels(
|
|
423
|
+
1,
|
|
424
|
+
0,
|
|
425
|
+
workspace.display_data.neighbor_labels,
|
|
426
|
+
"Neighbors: %s" % self.neighbors_name.value,
|
|
427
|
+
sharexy=figure.subplot(0, 0),
|
|
428
|
+
)
|
|
429
|
+
if numpy.any(object_mask):
|
|
430
|
+
figure.subplot_imshow(
|
|
431
|
+
0,
|
|
432
|
+
1,
|
|
433
|
+
neighbor_count_image,
|
|
434
|
+
"%s colored by # of neighbors" % self.object_name.value,
|
|
435
|
+
colormap=neighbor_cm,
|
|
436
|
+
colorbar=True,
|
|
437
|
+
vmin=0,
|
|
438
|
+
vmax=max(neighbor_count_image.max(), 1),
|
|
439
|
+
normalize=False,
|
|
440
|
+
sharexy=figure.subplot(0, 0),
|
|
441
|
+
)
|
|
442
|
+
if self.neighbors_are_objects:
|
|
443
|
+
figure.subplot_imshow(
|
|
444
|
+
1,
|
|
445
|
+
1,
|
|
446
|
+
percent_touching_image,
|
|
447
|
+
"%s colored by pct touching" % self.object_name.value,
|
|
448
|
+
colormap=percent_touching_cm,
|
|
449
|
+
colorbar=True,
|
|
450
|
+
vmin=0,
|
|
451
|
+
vmax=max(percent_touching_image.max(), 1),
|
|
452
|
+
normalize=False,
|
|
453
|
+
sharexy=figure.subplot(0, 0),
|
|
454
|
+
)
|
|
455
|
+
else:
|
|
456
|
+
# No objects - colorbar blows up.
|
|
457
|
+
figure.subplot_imshow(
|
|
458
|
+
0,
|
|
459
|
+
1,
|
|
460
|
+
neighbor_count_image,
|
|
461
|
+
"%s colored by # of neighbors" % self.object_name.value,
|
|
462
|
+
colormap=neighbor_cm,
|
|
463
|
+
vmin=0,
|
|
464
|
+
vmax=max(neighbor_count_image.max(), 1),
|
|
465
|
+
sharexy=figure.subplot(0, 0),
|
|
466
|
+
)
|
|
467
|
+
if self.neighbors_are_objects:
|
|
468
|
+
figure.subplot_imshow(
|
|
469
|
+
1,
|
|
470
|
+
1,
|
|
471
|
+
percent_touching_image,
|
|
472
|
+
"%s colored by pct touching" % self.object_name.value,
|
|
473
|
+
colormap=percent_touching_cm,
|
|
474
|
+
vmin=0,
|
|
475
|
+
vmax=max(neighbor_count_image.max(), 1),
|
|
476
|
+
sharexy=figure.subplot(0, 0),
|
|
477
|
+
)
|
|
478
|
+
|
|
479
|
+
if self.distance_method == DistanceMethod.EXPAND.value:
|
|
480
|
+
figure.subplot_imshow_labels(
|
|
481
|
+
1,
|
|
482
|
+
expandplot_position,
|
|
483
|
+
expanded_labels,
|
|
484
|
+
"Expanded %s" % self.object_name.value,
|
|
485
|
+
sharexy=figure.subplot(0, 0),
|
|
486
|
+
)
|
|
487
|
+
|
|
488
|
+
@property
|
|
489
|
+
def all_features(self):
|
|
490
|
+
return M_ALL
|
|
491
|
+
|
|
492
|
+
def get_measurement_name(self, feature):
|
|
493
|
+
if self.distance_method == DistanceMethod.EXPAND.value:
|
|
494
|
+
scale = MeasurementScale.EXPANDED
|
|
495
|
+
elif self.distance_method == DistanceMethod.WITHIN.value:
|
|
496
|
+
scale = str(self.distance.value)
|
|
497
|
+
elif self.distance_method == DistanceMethod.ADJACENT.value:
|
|
498
|
+
scale = MeasurementScale.ADJACENT
|
|
499
|
+
else:
|
|
500
|
+
raise ValueError(f"Unknown distance method: {self.distance_method}. Should be one of {D_ALL}")
|
|
501
|
+
if self.neighbors_are_objects:
|
|
502
|
+
return "_".join((C_NEIGHBORS, feature, scale))
|
|
503
|
+
else:
|
|
504
|
+
return "_".join((C_NEIGHBORS, feature, self.neighbors_name.value, scale))
|
|
505
|
+
|
|
506
|
+
def get_measurement_columns(self, pipeline):
|
|
507
|
+
"""Return column definitions for measurements made by this module"""
|
|
508
|
+
coltypes = dict(
|
|
509
|
+
[
|
|
510
|
+
(
|
|
511
|
+
feature,
|
|
512
|
+
COLTYPE_INTEGER
|
|
513
|
+
if feature
|
|
514
|
+
in (
|
|
515
|
+
Measurement.NUMBER_OF_NEIGHBORS,
|
|
516
|
+
Measurement.FIRST_CLOSEST_OBJECT_NUMBER,
|
|
517
|
+
Measurement.SECOND_CLOSEST_OBJECT_NUMBER,
|
|
518
|
+
)
|
|
519
|
+
else COLTYPE_FLOAT,
|
|
520
|
+
)
|
|
521
|
+
for feature in self.all_features
|
|
522
|
+
]
|
|
523
|
+
)
|
|
524
|
+
return [
|
|
525
|
+
(
|
|
526
|
+
self.object_name.value,
|
|
527
|
+
self.get_measurement_name(feature_name),
|
|
528
|
+
coltypes[feature_name],
|
|
529
|
+
)
|
|
530
|
+
for feature_name in self.all_features
|
|
531
|
+
]
|
|
532
|
+
|
|
533
|
+
def get_object_relationships(self, pipeline):
|
|
534
|
+
"""Return column definitions for object relationships output by module"""
|
|
535
|
+
objects_name = self.object_name.value
|
|
536
|
+
if self.neighbors_are_objects:
|
|
537
|
+
neighbors_name = objects_name
|
|
538
|
+
else:
|
|
539
|
+
neighbors_name = self.neighbors_name.value
|
|
540
|
+
return [(NEIGHBORS, objects_name, neighbors_name, MCA_AVAILABLE_EACH_CYCLE,)]
|
|
541
|
+
|
|
542
|
+
def get_categories(self, pipeline, object_name):
|
|
543
|
+
if object_name == self.object_name:
|
|
544
|
+
return [C_NEIGHBORS]
|
|
545
|
+
return []
|
|
546
|
+
|
|
547
|
+
def get_measurements(self, pipeline, object_name, category):
|
|
548
|
+
if object_name == self.object_name and category == C_NEIGHBORS:
|
|
549
|
+
return list(M_ALL)
|
|
550
|
+
return []
|
|
551
|
+
|
|
552
|
+
def get_measurement_objects(self, pipeline, object_name, category, measurement):
|
|
553
|
+
if self.neighbors_are_objects or measurement not in self.get_measurements(
|
|
554
|
+
pipeline, object_name, category
|
|
555
|
+
):
|
|
556
|
+
return []
|
|
557
|
+
return [self.neighbors_name.value]
|
|
558
|
+
|
|
559
|
+
def get_measurement_scales(
|
|
560
|
+
self, pipeline, object_name, category, measurement, image_name
|
|
561
|
+
):
|
|
562
|
+
if measurement in self.get_measurements(pipeline, object_name, category):
|
|
563
|
+
if self.distance_method == DistanceMethod.EXPAND.value:
|
|
564
|
+
return [MeasurementScale.EXPANDED]
|
|
565
|
+
elif self.distance_method == DistanceMethod.ADJACENT.value:
|
|
566
|
+
return [MeasurementScale.ADJACENT]
|
|
567
|
+
elif self.distance_method == DistanceMethod.WITHIN.value:
|
|
568
|
+
return [str(self.distance.value)]
|
|
569
|
+
else:
|
|
570
|
+
raise ValueError(
|
|
571
|
+
"Unknown distance method: %s" % self.distance_method.value
|
|
572
|
+
)
|
|
573
|
+
return []
|
|
574
|
+
|
|
575
|
+
def upgrade_settings(self, setting_values, variable_revision_number, module_name):
|
|
576
|
+
if variable_revision_number == 1:
|
|
577
|
+
# Added neighbor objects
|
|
578
|
+
# To upgrade, repeat object_name twice
|
|
579
|
+
#
|
|
580
|
+
setting_values = setting_values[:1] * 2 + setting_values[1:]
|
|
581
|
+
variable_revision_number = 2
|
|
582
|
+
if variable_revision_number == 2:
|
|
583
|
+
# Added border object exclusion
|
|
584
|
+
setting_values = setting_values[:4] + [True] + setting_values[4:]
|
|
585
|
+
variable_revision_number = 3
|
|
586
|
+
return setting_values, variable_revision_number
|
|
587
|
+
|
|
588
|
+
def volumetric(self):
|
|
589
|
+
return True
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
def get_colormap(name):
|
|
593
|
+
"""Get colormap, accounting for possible request for default"""
|
|
594
|
+
if name == "Default":
|
|
595
|
+
name = get_default_colormap()
|
|
596
|
+
return matplotlib.cm.get_cmap(name)
|