cellprofiler-core-nightly 5.0.0.dev643__tar.gz → 5.0.0.dev649__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_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/PKG-INFO +1 -1
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/_version.py +3 -3
- cellprofiler_core_nightly-5.0.0.dev649/cellprofiler_core/modules/align.py +439 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core_nightly.egg-info/PKG-INFO +1 -1
- cellprofiler_core_nightly-5.0.0.dev643/cellprofiler_core/modules/align.py +0 -833
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/LICENSE +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/README.md +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/__main__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/_analysis.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/_runner.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/event/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/event/_finished.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/event/_paused.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/event/_progress.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/event/_resumed.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/event/_started.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_ack.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_debug_cancel.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_dictionary_request.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_exception_please_debug.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_image_set_success.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_image_set_success_with_dictionary.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_interaction.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_no_work.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_omero_login.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_server_exited.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_shared_dictionary.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/reply/_work.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_analysis_cancel.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_debug_complete.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_debug_waiting.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_display.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_display_post_group.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_display_post_run.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_exception_report.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_initial_measurements.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_interaction.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_measurements_report.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_omero_login.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_pipeline_preferences.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_shared_dictionary.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/analysis/request/_work.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/bioformats/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/bioformats/formatreader.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/bioformats/formatwriter.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/bioformats/omexml.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/commands/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/commands/_pipeline_command.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/commands/_worker_command.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/measurement.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/module/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/module/_identify.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/modules/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/modules/images.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/modules/load_data.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/modules/metadata.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/modules/namesandtypes.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/object.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/pipeline.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/preferences.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/reader/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/setting.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/worker.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/constants/workspace.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/_grayscale_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/_image_set.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/_image_set_list.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/_rgb_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/_abstract_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/_callback_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/_vanilla_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/_file_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/_flex_frame_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/_movie_frame_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/_stk_frame_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/url/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/url/_color_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/url/_mask_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/url/_monochrome_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/url/_objects_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/image/abstract_image/file/url/_url_image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/measurement/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/measurement/_measurements.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/measurement/_metadata_group.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/measurement/_relationship_key.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/module/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/module/_identify.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/module/_image_processing.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/module/_module.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/module/_plugin_importer.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/module/image_segmentation/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/module/image_segmentation/_image_segmentation.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/module/image_segmentation/_object_processing.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/modules/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/modules/groups.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/modules/images.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/modules/inject_objects.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/modules/injectimage.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/modules/loaddata.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/modules/measurementfixture.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/modules/metadata.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/modules/namesandtypes.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/modules/setting_validation.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/object/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/object/_object_set.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/object/_objects.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/object/_segmentation.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/_image_file.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/_image_plane.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/_image_set_channel_descriptor.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/_listener.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/_pipeline.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/dependency/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/dependency/_dependency.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/dependency/_image_dependency.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/dependency/_measurement_dependency.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/dependency/_object_dependency.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_end_run.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_event.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_file_walk_ended.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_file_walk_started.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_ipd_load_exception.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_load_exception.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_module_added.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_module_disabled.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_module_edited.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_module_enabled.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_module_moved.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_module_removed.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_module_show_window.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_pipeline_cleared.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_pipeline_loaded.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_prepare_run_error.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_urls_added.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_urls_cleared.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/_urls_removed.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/run_exception/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/run_exception/_post_run_exception.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/run_exception/_prepare_run_exception.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/event/run_exception/_run_exception.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/io/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/io/_v5.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/pipeline/io/_v6.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/preferences/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/preferences/_headless_configuration.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/reader/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/reader/_reader.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/readers/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/readers/bioformats_reader.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/readers/gcs_reader.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/readers/imageio_reader.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/readers/imageio_reader_v3.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/readers/ngff_reader.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_binary.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_binary_matrix.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_color.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_coordinates.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_data_types.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_delete_setting_event.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_divider.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_do_things.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_figure_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_file_collection_display.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_hidden_count.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_html_text.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_image_plane.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_joiner.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_measurement.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_path_list_display.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_regexp_text.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_setting.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_settings_group.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_structuring_element.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_table.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_tree_choice.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/_validation_error.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/change_setting_event/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/change_setting_event/_after_change_setting_event.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/change_setting_event/_before_change_setting_event.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/change_setting_event/_change_setting_event.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/choice/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/choice/_choice.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/choice/_colormap.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/choice/_custom_choice.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/do_something/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/do_something/_do_something.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/do_something/_image_set_display.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/do_something/_path_list_extract_button.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/do_something/_path_list_refresh_button.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/do_something/_remove_setting_button.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_compound_filter_predicate.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_directory_predicate.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_does_not_predicate.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_does_predicate.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_extension_predicate.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_file_predicate.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_filter.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_filter_predicate.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_image_predicate.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_metadata_predicate.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/filter/_regexp_filter_predicate.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/multichoice/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/multichoice/_image_name_subscriber_multichoice.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/multichoice/_measurement_multichoice.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/multichoice/_multichoice.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/multichoice/_object_subscriber_multichoice.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/multichoice/_subdirectory_filter.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/multichoice/_subscriber_multichoice.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/range/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/range/_float_range.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/range/_range.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/range/integer_range/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/range/integer_range/_integer_or_unbounded_range.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/range/integer_range/_integer_range.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/_grid_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/_label_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/image_subscriber/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/image_subscriber/_crop_image_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/image_subscriber/_file_image_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/image_subscriber/_image_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/image_subscriber/_outline_image_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/list_subscriber/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/list_subscriber/_image_list_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/list_subscriber/_label_list_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/subscriber/list_subscriber/_list_subscriber.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/_directory.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/_filename.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/_text.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/_alphanumeric.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/_character.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/name/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/name/_grid_name.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/name/_label_name.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/name/_name.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/name/image_name/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/name/image_name/_crop_image_name.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/name/image_name/_external_image_name.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/name/image_name/_file_image_name.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/name/image_name/_image_name.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/alphanumeric/name/image_name/_outline_image_name.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/number/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/number/_float.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/number/_number.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/number/integer/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/number/integer/_integer.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/number/integer/_odd_integer.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/pathname/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/pathname/_pathname.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/setting/text/pathname/_url.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/analysis.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/channel_hasher.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/core/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/core/module/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/core/module/identify.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/core/modules/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/core/modules/load_data.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/core/modules.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/core/object.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/core/pipeline.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/core/plugins.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/core/workspace.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/grid.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/hdf5_dict.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/image.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/java.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/legacy.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/logging.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/measurement.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/pathname.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/utf16encode.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/_analysis_context.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/_boundary.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/_event.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/_communicable.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/reply/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/reply/_lock_status_reply.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/reply/_reply.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/reply/_upstream_exit.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/reply/upstream_exit/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/reply/upstream_exit/_boundary_exited.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/reply/upstream_exit/_upstream_exit.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/request/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/request/_analysis_request.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/request/_lock_status_request.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/utilities/zmq/communicable/request/_request.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/worker/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/worker/_pipeline_event_listener.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/worker/_worker.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/workspace/__init__.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/workspace/_disposition_changed_event.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core/workspace/_workspace.py +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core_nightly.egg-info/SOURCES.txt +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core_nightly.egg-info/dependency_links.txt +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core_nightly.egg-info/requires.txt +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/cellprofiler_core_nightly.egg-info/top_level.txt +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/environment.yml +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/pyproject.toml +0 -0
- {cellprofiler_core_nightly-5.0.0.dev643 → cellprofiler_core_nightly-5.0.0.dev649}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cellprofiler-core-nightly
|
|
3
|
-
Version: 5.0.0.
|
|
3
|
+
Version: 5.0.0.dev649
|
|
4
4
|
Summary: cellprofiler-core implements the bulk of CellProfiler's non-gui functionality
|
|
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>
|
|
@@ -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.dev649'
|
|
32
|
+
__version_tuple__ = version_tuple = (5, 0, 0, 'dev649')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g6fe7b0942'
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Align
|
|
5
|
+
=====
|
|
6
|
+
|
|
7
|
+
**Align** aligns images relative to each other, for example, to correct
|
|
8
|
+
shifts in the optical path of a microscope in each channel of a
|
|
9
|
+
multi-channel set of images.
|
|
10
|
+
|
|
11
|
+
For two or more input images, this module determines the optimal
|
|
12
|
+
alignment among them. Aligning images is useful to obtain proper
|
|
13
|
+
measurements of the intensities in one channel based on objects
|
|
14
|
+
identified in another channel, for example. Alignment is often needed
|
|
15
|
+
when the microscope is not perfectly calibrated. It can also be useful
|
|
16
|
+
to align images in a time-lapse series of images. The module stores the
|
|
17
|
+
amount of shift between images as a measurement, which can be useful for
|
|
18
|
+
quality control purposes.
|
|
19
|
+
|
|
20
|
+
Note that the second image (and others following) is always aligned with
|
|
21
|
+
respect to the first image. That is, the X/Y offsets indicate how much
|
|
22
|
+
the second image needs to be shifted by to match the first.
|
|
23
|
+
|
|
24
|
+
This module does not perform warping or rotation, it simply shifts images
|
|
25
|
+
in X and Y. For more complex registration tasks, you might preprocess
|
|
26
|
+
images using a plugin for that purpose in FIJI/ImageJ.
|
|
27
|
+
|
|
28
|
+
|
|
|
29
|
+
|
|
30
|
+
============ ============ ===============
|
|
31
|
+
Supports 2D? Supports 3D? Respects masks?
|
|
32
|
+
============ ============ ===============
|
|
33
|
+
YES NO YES
|
|
34
|
+
============ ============ ===============
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
Measurements made by this module
|
|
39
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
40
|
+
|
|
41
|
+
- *Xshift, Yshift:* The pixel shift in X and Y of the aligned image
|
|
42
|
+
with respect to the original image.
|
|
43
|
+
|
|
44
|
+
References
|
|
45
|
+
^^^^^^^^^^
|
|
46
|
+
|
|
47
|
+
- Lewis JP. (1995) “Fast normalized cross-correlation.” *Vision
|
|
48
|
+
Interface*, 1-7.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
import numpy as np
|
|
52
|
+
|
|
53
|
+
from ..constants.measurement import COLTYPE_INTEGER
|
|
54
|
+
from ..image import Image
|
|
55
|
+
from ..module import Module
|
|
56
|
+
from ..setting import Divider, SettingsGroup
|
|
57
|
+
from ..setting.choice import Choice
|
|
58
|
+
from ..setting.do_something import DoSomething, RemoveSettingButton
|
|
59
|
+
from ..setting.subscriber import ImageSubscriber
|
|
60
|
+
from ..setting.text import ImageName
|
|
61
|
+
|
|
62
|
+
from cellprofiler_library.opts.align import AlignmentMethod, CropMode, AdditionalAlignmentChoice, MEASUREMENT_FORMAT, M_ALL, C_ALIGN
|
|
63
|
+
from cellprofiler_library.modules._align import align_images
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class Align(Module):
|
|
67
|
+
module_name = "Align"
|
|
68
|
+
category = "Image Processing"
|
|
69
|
+
variable_revision_number = 3
|
|
70
|
+
|
|
71
|
+
def create_settings(self):
|
|
72
|
+
self.first_input_image = ImageSubscriber(
|
|
73
|
+
"Select the first input image",
|
|
74
|
+
"None",
|
|
75
|
+
doc="""\
|
|
76
|
+
Specify the name of the first image to align.""",
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
self.first_output_image = ImageName(
|
|
80
|
+
"Name the first output image",
|
|
81
|
+
"AlignedRed",
|
|
82
|
+
doc="""\
|
|
83
|
+
Enter the name of the first aligned image.""",
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
self.separator_1 = Divider(line=False)
|
|
87
|
+
self.second_input_image = ImageSubscriber(
|
|
88
|
+
"Select the second input image",
|
|
89
|
+
"None",
|
|
90
|
+
doc="""\
|
|
91
|
+
Specify the name of the second image to align.""",
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
self.second_output_image = ImageName(
|
|
95
|
+
"Name the second output image",
|
|
96
|
+
"AlignedGreen",
|
|
97
|
+
doc="""\
|
|
98
|
+
Enter the name of the second aligned image.""",
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
self.separator_2 = Divider(line=False)
|
|
102
|
+
self.additional_images = []
|
|
103
|
+
self.add_button = DoSomething("", "Add another image", self.add_image)
|
|
104
|
+
|
|
105
|
+
self.alignment_method = Choice(
|
|
106
|
+
"Select the alignment method",
|
|
107
|
+
M_ALL,
|
|
108
|
+
doc="""\
|
|
109
|
+
Two options for the alignment method are available:
|
|
110
|
+
|
|
111
|
+
- *%(M_MUTUAL_INFORMATION)s:* This more general method works well for
|
|
112
|
+
aligning images from different modalities that contain the same
|
|
113
|
+
information, but are expressed differently. However, this method
|
|
114
|
+
performs better than %(M_CROSS_CORRELATION)s, even in the same
|
|
115
|
+
modality, if the images are not highly correlated. It is iterative,
|
|
116
|
+
and thus tends to be slower than other methods, but is more likely to
|
|
117
|
+
be correct. Essentially, alignment is performed by measuring how well
|
|
118
|
+
one image “explains” the other. For example, a fluorescent image can
|
|
119
|
+
be aligned to a brightfield image by this method since the relevant
|
|
120
|
+
features are bright in one modality where they are dim in the other.
|
|
121
|
+
- *%(M_CROSS_CORRELATION)s:* This is a good means of alignment in the
|
|
122
|
+
case of images acquired with the same modality (e.g., all images to
|
|
123
|
+
be aligned are fluorescent). It is fast, however it can be highly
|
|
124
|
+
influenced by a particular, possibly spurious, feature and in turn
|
|
125
|
+
generate anomalously large shifts. It allows for a linear
|
|
126
|
+
relationship between the intensities of the two images, i.e., the
|
|
127
|
+
relevant features in the images to be aligned all have varying
|
|
128
|
+
degrees of brightness.
|
|
129
|
+
|
|
130
|
+
""".format(
|
|
131
|
+
**{
|
|
132
|
+
"M_MUTUAL_INFORMATION": AlignmentMethod.MUTUAL_INFORMATION.value,
|
|
133
|
+
"M_CROSS_CORRELATION": AlignmentMethod.CROSS_CORRELATION.value,
|
|
134
|
+
}
|
|
135
|
+
)
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
self.crop_mode = Choice(
|
|
139
|
+
"Crop mode",
|
|
140
|
+
[CropMode.CROP.value, CropMode.PAD.value, CropMode.SAME_SIZE.value],
|
|
141
|
+
doc="""\
|
|
142
|
+
The crop mode determines how the output images are either cropped or
|
|
143
|
+
padded after alignment. The alignment phase calculates the areas in each
|
|
144
|
+
image that are found to be overlapping. In almost all cases, there will
|
|
145
|
+
be portions of some or all of the images that don’t overlap with any
|
|
146
|
+
other aligned image. These portions have no counterpart and will be
|
|
147
|
+
excluded from analysis. There are three choices for cropping:
|
|
148
|
+
|
|
149
|
+
- *%(C_CROP)s:* Crop every image to the region that overlaps in all
|
|
150
|
+
images. This makes downstream analysis simpler because all of the
|
|
151
|
+
output images have authentic pixel data at all positions, however it
|
|
152
|
+
discards parts of images. Also, the output images may not be the same
|
|
153
|
+
size as the input images which may cause problems if downstream
|
|
154
|
+
modules use aligned and unaligned images (which may be of differing
|
|
155
|
+
sizes) in combination.
|
|
156
|
+
- *%(C_PAD)s:* Align every image and pad with masked black pixels to
|
|
157
|
+
make each image the same size. This results in larger images, but
|
|
158
|
+
preserves all information in each of the images. This may be the best
|
|
159
|
+
choice if images undergo an operation such as smoothing that could
|
|
160
|
+
use the information that would otherwise be cropped.
|
|
161
|
+
- *%(C_SAME_SIZE)s:* Maintain the sizes of the images but align them,
|
|
162
|
+
masking the unaligned portions with black pixels. **Align** aligns
|
|
163
|
+
all images relative to the first. This is a reasonable option for
|
|
164
|
+
alignments with small displacements since it maintains a consistent
|
|
165
|
+
image size which may be useful if output images from different image
|
|
166
|
+
sets will be compared against each other after processing. The
|
|
167
|
+
reference image can also be used across image sets. For example, the
|
|
168
|
+
reference image could be loaded for all image sets in a group to
|
|
169
|
+
align the entire group’s images similarly, then the aligned images
|
|
170
|
+
could be combined in a module such as **MakeProjection**.
|
|
171
|
+
""".format(
|
|
172
|
+
**{
|
|
173
|
+
"C_CROP": CropMode.CROP.value,
|
|
174
|
+
"C_PAD": CropMode.PAD.value,
|
|
175
|
+
"C_SAME_SIZE": CropMode.SAME_SIZE.value,
|
|
176
|
+
}
|
|
177
|
+
),
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def add_image(self, can_remove=True):
|
|
183
|
+
"""Add an image + associated questions and buttons"""
|
|
184
|
+
group = SettingsGroup()
|
|
185
|
+
if can_remove:
|
|
186
|
+
group.append("divider", Divider(line=False))
|
|
187
|
+
|
|
188
|
+
group.append(
|
|
189
|
+
"input_image_name",
|
|
190
|
+
ImageSubscriber(
|
|
191
|
+
"Select the additional image",
|
|
192
|
+
"None",
|
|
193
|
+
doc="""
|
|
194
|
+
Select the additional image to align?""",
|
|
195
|
+
),
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
group.append(
|
|
199
|
+
"output_image_name",
|
|
200
|
+
ImageName(
|
|
201
|
+
"Name the output image",
|
|
202
|
+
"AlignedBlue",
|
|
203
|
+
doc="""
|
|
204
|
+
Enter the name of the aligned image?""",
|
|
205
|
+
),
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
group.append(
|
|
209
|
+
"align_choice",
|
|
210
|
+
Choice(
|
|
211
|
+
"Select how the alignment is to be applied",
|
|
212
|
+
[AdditionalAlignmentChoice.SIMILARLY.value, AdditionalAlignmentChoice.SEPARATELY.value],
|
|
213
|
+
doc="""\
|
|
214
|
+
An additional image can either be aligned similarly to the second one or
|
|
215
|
+
a separate alignment to the first image can be calculated:
|
|
216
|
+
|
|
217
|
+
- *%(A_SIMILARLY)s:* The same alignment measurements obtained from the
|
|
218
|
+
first two input images are applied to this additional image.
|
|
219
|
+
- *%(A_SEPARATELY)s:* A new set of alignment measurements are
|
|
220
|
+
calculated for this additional image using the alignment method
|
|
221
|
+
specified with respect to the first input image.
|
|
222
|
+
""".format(
|
|
223
|
+
**{
|
|
224
|
+
"A_SIMILARLY": AdditionalAlignmentChoice.SIMILARLY.value,
|
|
225
|
+
"A_SEPARATELY": AdditionalAlignmentChoice.SEPARATELY.value,
|
|
226
|
+
}
|
|
227
|
+
),
|
|
228
|
+
),
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
if can_remove:
|
|
232
|
+
group.append(
|
|
233
|
+
"remover",
|
|
234
|
+
RemoveSettingButton(
|
|
235
|
+
"", "Remove above image", self.additional_images, group
|
|
236
|
+
),
|
|
237
|
+
)
|
|
238
|
+
self.additional_images.append(group)
|
|
239
|
+
|
|
240
|
+
def settings(self):
|
|
241
|
+
|
|
242
|
+
result = [self.alignment_method, self.crop_mode]
|
|
243
|
+
|
|
244
|
+
result += [
|
|
245
|
+
self.first_input_image,
|
|
246
|
+
self.first_output_image,
|
|
247
|
+
self.second_input_image,
|
|
248
|
+
self.second_output_image,
|
|
249
|
+
]
|
|
250
|
+
for additional in self.additional_images:
|
|
251
|
+
result += [
|
|
252
|
+
additional.input_image_name,
|
|
253
|
+
additional.output_image_name,
|
|
254
|
+
additional.align_choice,
|
|
255
|
+
]
|
|
256
|
+
return result
|
|
257
|
+
|
|
258
|
+
def prepare_settings(self, setting_values):
|
|
259
|
+
assert (len(setting_values) - 6) % 3 == 0
|
|
260
|
+
n_additional = (len(setting_values) - 6) / 3
|
|
261
|
+
del self.additional_images[:]
|
|
262
|
+
while len(self.additional_images) < n_additional:
|
|
263
|
+
self.add_image()
|
|
264
|
+
|
|
265
|
+
def visible_settings(self):
|
|
266
|
+
result = [self.alignment_method, self.crop_mode]
|
|
267
|
+
|
|
268
|
+
result += [
|
|
269
|
+
self.first_input_image,
|
|
270
|
+
self.first_output_image,
|
|
271
|
+
self.separator_1,
|
|
272
|
+
self.second_input_image,
|
|
273
|
+
self.second_output_image,
|
|
274
|
+
]
|
|
275
|
+
for additional in self.additional_images:
|
|
276
|
+
result += additional.visible_settings()
|
|
277
|
+
result += [self.add_button]
|
|
278
|
+
return result
|
|
279
|
+
|
|
280
|
+
def run(self, workspace):
|
|
281
|
+
input_image_names = [
|
|
282
|
+
self.first_input_image.value,
|
|
283
|
+
self.second_input_image.value,
|
|
284
|
+
]
|
|
285
|
+
output_image_names = [
|
|
286
|
+
self.first_output_image.value,
|
|
287
|
+
self.second_output_image.value,
|
|
288
|
+
]
|
|
289
|
+
align_choices = []
|
|
290
|
+
for additional in self.additional_images:
|
|
291
|
+
input_image_names.append(additional.input_image_name.value)
|
|
292
|
+
output_image_names.append(additional.output_image_name.value)
|
|
293
|
+
align_choices.append(additional.align_choice)
|
|
294
|
+
|
|
295
|
+
input_images = [workspace.image_set.get_image(im_name) for im_name in input_image_names]
|
|
296
|
+
# TODO: 5045 - is astype(float) necessary? why?
|
|
297
|
+
input_image_pixels = [img.pixel_data.astype(float) for img in input_images]
|
|
298
|
+
input_image_masks = [img.mask for img in input_images]
|
|
299
|
+
|
|
300
|
+
res = align_images(
|
|
301
|
+
input_image_pixels[0],
|
|
302
|
+
input_image_masks[0],
|
|
303
|
+
input_image_pixels[1],
|
|
304
|
+
input_image_masks[1],
|
|
305
|
+
self.alignment_method.value,
|
|
306
|
+
self.crop_mode.value,
|
|
307
|
+
input_image_pixels[2:],
|
|
308
|
+
input_image_masks[2:],
|
|
309
|
+
align_choices,
|
|
310
|
+
input_image_names,
|
|
311
|
+
output_image_names,
|
|
312
|
+
self.show_window
|
|
313
|
+
)
|
|
314
|
+
if self.show_window:
|
|
315
|
+
lib_data, lib_display = res
|
|
316
|
+
output_image_pixels, output_image_masks, crop_masks, lib_measurements = lib_data
|
|
317
|
+
else:
|
|
318
|
+
output_image_pixels, output_image_masks, crop_masks, lib_measurements = res
|
|
319
|
+
|
|
320
|
+
for i in range(len(output_image_pixels)):
|
|
321
|
+
output_image = Image(
|
|
322
|
+
output_image_pixels[i], mask=output_image_masks[i], crop_mask=crop_masks[i], parent_image=input_images[i]
|
|
323
|
+
)
|
|
324
|
+
workspace.image_set.add(output_image_names[i], output_image)
|
|
325
|
+
|
|
326
|
+
for feature_name, value in lib_measurements.image.items():
|
|
327
|
+
workspace.measurements.add_image_measurement(feature_name, value)
|
|
328
|
+
|
|
329
|
+
if self.show_window:
|
|
330
|
+
workspace.display_data.image_info = lib_display.image_info
|
|
331
|
+
|
|
332
|
+
def display(self, workspace, figure):
|
|
333
|
+
"""Display the overlaid images
|
|
334
|
+
|
|
335
|
+
workspace - the workspace being run, with display_data holding:
|
|
336
|
+
image_info - a list of lists:
|
|
337
|
+
input image name of image being aligned
|
|
338
|
+
input image data
|
|
339
|
+
output image name of image being aligned
|
|
340
|
+
output image data
|
|
341
|
+
x offset
|
|
342
|
+
y offset
|
|
343
|
+
"""
|
|
344
|
+
image_info = workspace.display_data.image_info
|
|
345
|
+
first_input_name = self.first_input_image.value
|
|
346
|
+
first_output_name = self.first_output_image.value
|
|
347
|
+
figure.set_subplots((2, len(image_info) - 1))
|
|
348
|
+
|
|
349
|
+
first_input_pixels = image_info[0][1]
|
|
350
|
+
first_output_pixels = image_info[0][3]
|
|
351
|
+
for (
|
|
352
|
+
j,
|
|
353
|
+
(input_name, input_pixels, output_name, output_pixels, off_x, off_y, shape),
|
|
354
|
+
) in enumerate(image_info[1:]):
|
|
355
|
+
unaligned_title = "Unaligned images: %s and %s" % (
|
|
356
|
+
first_input_name,
|
|
357
|
+
input_name,
|
|
358
|
+
)
|
|
359
|
+
#
|
|
360
|
+
# Make them grayscale if needed
|
|
361
|
+
#
|
|
362
|
+
first_pixels, other_pixels = [
|
|
363
|
+
img if img.ndim == 2 else np.mean(img, 2)
|
|
364
|
+
for img in (first_input_pixels, input_pixels)
|
|
365
|
+
]
|
|
366
|
+
max_shape = np.maximum(first_pixels.shape, other_pixels.shape)
|
|
367
|
+
img = np.zeros((max_shape[0], max_shape[1], 3))
|
|
368
|
+
img[: first_pixels.shape[0], : first_pixels.shape[1], 0] = first_pixels
|
|
369
|
+
img[: other_pixels.shape[0], : other_pixels.shape[1], 1] = other_pixels
|
|
370
|
+
figure.subplot_imshow(
|
|
371
|
+
0, j, img, unaligned_title, sharexy=figure.subplot(0, 0)
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
aligned_title = "Aligned images: %s and %s\nX offset: %d, Y offset: %d" % (
|
|
375
|
+
first_output_name,
|
|
376
|
+
output_name,
|
|
377
|
+
-off_x,
|
|
378
|
+
-off_y,
|
|
379
|
+
)
|
|
380
|
+
first_pixels, other_pixels = [
|
|
381
|
+
img if img.ndim == 2 else np.mean(img, 2)
|
|
382
|
+
for img in (first_output_pixels, output_pixels)
|
|
383
|
+
]
|
|
384
|
+
max_shape = np.maximum(first_pixels.shape, other_pixels.shape)
|
|
385
|
+
img = np.zeros((max_shape[0], max_shape[1], 3))
|
|
386
|
+
img[: first_pixels.shape[0], : first_pixels.shape[1], 0] = first_pixels
|
|
387
|
+
img[: other_pixels.shape[0], : other_pixels.shape[1], 1] = other_pixels
|
|
388
|
+
figure.subplot_imshow(
|
|
389
|
+
1, j, img, aligned_title, sharexy=figure.subplot(0, 0)
|
|
390
|
+
)
|
|
391
|
+
|
|
392
|
+
def get_categories(self, pipeline, object_name):
|
|
393
|
+
if object_name == "Image":
|
|
394
|
+
return [C_ALIGN]
|
|
395
|
+
return []
|
|
396
|
+
|
|
397
|
+
def get_measurements(self, pipeline, object_name, category):
|
|
398
|
+
if object_name == "Image" and category == C_ALIGN:
|
|
399
|
+
return ["Xshift", "Yshift"]
|
|
400
|
+
return []
|
|
401
|
+
|
|
402
|
+
def get_measurement_images(self, pipeline, object_name, category, measurement):
|
|
403
|
+
if measurement in self.get_measurements(pipeline, object_name, category):
|
|
404
|
+
return [self.first_output_image.value, self.second_output_image.value] + [
|
|
405
|
+
additional.output_image_name.value
|
|
406
|
+
for additional in self.additional_images
|
|
407
|
+
]
|
|
408
|
+
return []
|
|
409
|
+
|
|
410
|
+
def get_measurement_columns(self, pipeline):
|
|
411
|
+
"""return the offset measurements"""
|
|
412
|
+
|
|
413
|
+
targets = [self.first_output_image.value, self.second_output_image.value] + [
|
|
414
|
+
additional.output_image_name.value for additional in self.additional_images
|
|
415
|
+
]
|
|
416
|
+
columns = []
|
|
417
|
+
for axis in ("X", "Y"):
|
|
418
|
+
columns += [
|
|
419
|
+
("Image", MEASUREMENT_FORMAT % (axis, target), COLTYPE_INTEGER,)
|
|
420
|
+
for target in targets
|
|
421
|
+
]
|
|
422
|
+
return columns
|
|
423
|
+
|
|
424
|
+
def upgrade_settings(self, setting_values, variable_revision_number, module_name):
|
|
425
|
+
if variable_revision_number == 1:
|
|
426
|
+
# Moved final settings (alignment method, cropping) to the top
|
|
427
|
+
setting_values = setting_values[-2:] + setting_values[:-2]
|
|
428
|
+
variable_revision_number = 2
|
|
429
|
+
|
|
430
|
+
if variable_revision_number == 2:
|
|
431
|
+
# wants_cropping changed to crop_mode
|
|
432
|
+
setting_values = (
|
|
433
|
+
setting_values[:1]
|
|
434
|
+
+ [CropMode.CROP.value if setting_values[1] == "Yes" else CropMode.SAME_SIZE.value]
|
|
435
|
+
+ setting_values[2:]
|
|
436
|
+
)
|
|
437
|
+
variable_revision_number = 3
|
|
438
|
+
|
|
439
|
+
return setting_values, variable_revision_number
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cellprofiler-core-nightly
|
|
3
|
-
Version: 5.0.0.
|
|
3
|
+
Version: 5.0.0.dev649
|
|
4
4
|
Summary: cellprofiler-core implements the bulk of CellProfiler's non-gui functionality
|
|
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>
|