Skip to content

Commit

Permalink
Add all descriptions and CellProfiler suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
bethac07 committed Jun 10, 2023
1 parent 0ae29f5 commit 3c4140e
Show file tree
Hide file tree
Showing 23 changed files with 161 additions and 111 deletions.
10 changes: 4 additions & 6 deletions Home.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
This schema is currently under development; stay tuned for more updates.
Previous versions of this schema are currently best found on [Zenodo](https://doi.org/10.5281/zenodo.7654937)
Last updated - April 25, 2023
Last updated - June 10, 2023
App made by Beth Cimini, Broad Institute, 2023, as part of the Center for Open Bioimage Analysis
Expand All @@ -34,13 +34,11 @@
import json
import streamlit as st

from utils import load_schema,make_fig
from utils import load_schema

load_schema(from_master=False,rewrite_master=True)
load_schema(from_master=True,rewrite_master=False)

st.write(json.load(open('bioimage_object_analysis_questions.json')))

st.download_button('Download these questions and answers as a json file',open('bioimage_object_analysis_questions.json'),'bioimage_object_analysis_questions.json')
st.download_button('Download these questions and answers as a csv file',open('bioimage_object_analysis_questions.csv'),'bioimage_object_analysis_questions.csv')

make_fig()
st.download_button('Download these questions and answers as a csv file',open('bioimage_object_analysis_questions.csv'),'bioimage_object_analysis_questions.csv')
Binary file modified figure.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 5 additions & 5 deletions jsons/align_register.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"full_name":"Does alignment and/or registration need to be applied before proceeding?",
"select_all":false,
"slider":false,
"long_description":"",
"long_description":"Whether an image needs to be aligned or registered (to other channels, other XY positions, other time points, to a reference atlas, etc) before analysis",
"section":"image",
"changes_based_on_3d":true,
"options":{
Expand All @@ -18,15 +18,15 @@
"Need to align images to other images":{
"cellprofiler_suggester":
{
"3D_False":false,
"3D_True":false
"3D_False":"You said your image needs to be aligned to another image. If the other image is another channel, this can be easily done with the Align module; if you want to align all images to a master template, this can be done by providing a 'Single image' in NamesAndTypes (see broad.io/CellProfilerInput for more information). Aligning timelapse images to the directly previous frame is not possible without advanced scripting; this is more easily done in another program (such as Fiji) before import into CellProfiler. Aligning tiled images with no tile overlap can be done using the Tile module, though note that this should be performed in a separate pipeline consisting of only one Tile and one SaveImages module per channel, and the resulting tiled image(s) then used in a new pipeline. Aligning or registerig images with overlap is not currently possible and should be done in another program (ie Fiji) before bringing registered images into CellProfiler.",
"3D_True":"3D alignment is not currently enabled in CellProfiler; perform alignment in another appropriate tool (such as Fiji) before bringing aligned images into CellProfiler."
}
},
"Need to align images to a reference atlas":{
"cellprofiler_suggester":
{
"3D_False":false,
"3D_True":false
"3D_False":"You said your image needs to be aligned to a reference atlas. This can be done by providing the reference as a 'Single image' in NamesAndTypes (see broad.io/CellProfilerInput for more information).",
"3D_True":"3D alignment is not currently enabled in CellProfiler; perform alignment in another appropriate tool (such as Fiji) before bringing aligned images into CellProfiler."
}
}
},
Expand Down
6 changes: 3 additions & 3 deletions jsons/bleedthrough.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"full_name":"Is fluorescent bleedthrough present in these images?",
"select_all":false,
"slider":false,
"long_description":"",
"long_description":"Whether bleedthrough of fluorescent channels is present in the images; this typically occurs when using multiple dyes with very close spectral signatures",
"section":"image",
"changes_based_on_3d":false,
"options":{
Expand All @@ -15,10 +15,10 @@
"cellprofiler_suggester":false
},
"Yes, but we don't need to apply a correction in this workflow":{
"cellprofiler_suggester":false
"cellprofiler_suggester":"You said you expect bleedthrough but do not wish to attempt to correct it. This is appropriate in some circumstances (such as when the spectrally overlapping dyes are very well spatially separated), but be sure to keep this in mind for any downstream data processing you may do."
},
"Yes, and we do need to apply a correction in this workflow":{
"cellprofiler_suggester":false
"cellprofiler_suggester":"You said you expect bleedthrough in these images and wish to correct it; for rough correction, you may find operations in ImageMath (such as the ability to divide or subtract images) helpful in this. For a more sophisticated option, you may find the CompensateColors CellProfiler plugin helpful; it is available at https://github.com/CellProfiler/CellProfiler-plugins"
}
},
"default_option_index":1
Expand Down
10 changes: 5 additions & 5 deletions jsons/crowdedness.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"full_name":"How close will each object typically be to its nearest neighbors of the same object type?",
"select_all":false,
"slider":true,
"long_description":"",
"long_description":"Whether each object will typically be spatially full separated from neighbors, entirely touching neighbors, or something in between",
"section":"object",
"changes_based_on_3d":true,
"options":{
Expand All @@ -25,15 +25,15 @@
"Some touching of neighbors":{
"cellprofiler_suggester":
{
"3D_False":false,
"3D_True":false
"3D_False":"You said that your objects will be typically be touching their neighbors. If possible, you might consider thresholding your segmentation image with the Threshold module and then running the Opening and/or ErodeImages modules on the thresholded image to try to create a mask that contains only well-separated object centers. You can use this centers image to create an 'ObjectCenter' object in IdentifyPrimaryObjects, then use IdentifySecondaryObjects to expand to the true object boundaries. Otherwise, segmentation of crowded objects may be challenging; if your objects have a one-to-one relationship with an enclosed or semi-enclosed more-easily-separable object (like cells and nuclei), you should consider identifying the ecnlosed object first with IdentifyPrimaryObjects and this object with IdentifySecondaryObjects. Otherwise, you might consider a non-classical segmentation module, such as RunCellpose or RunStarDist (if your object is star-convex)",
"3D_True":"You said that your objects will be typically be touching their neighbors. If possible, you might consider thresholding your segmentation image with the Threshold module and then running the Opening and/or ErodeImages modules on the thresholded image to try to create a mask that contains only well-separated object centers. You can use this centers image to create an 'ObjectCenter' object in Watershed, then use the ObjectCenter as a marker in Watershed to expand to the true object boundaries. Otherwise, segmentation of crowded objects may be challenging; if your objects have a one-to-one relationship with an enclosed or semi-enclosed more-easily-separable object (like cells and nuclei), you should consider identifying the enclosed object first with Threshold and Watershed and then using these objects as seeds for a second round of Threshold followed by marker-based Watershed. Otherwise, you might consider a non-classical segmentation module, such as RunCellpose or RunStarDist (if your object is star-convex)"
}
},
"Entirely touching neighbors":{
"cellprofiler_suggester":
{
"3D_False":false,
"3D_True":false
"3D_False":"You said that your objects will be typically entirely touching their neighbors. Segmentation of such crowded objects may be challenging; if your objects have a one-to-one relationship with an enclosed or semi-enclosed more-easily-separable object (like cells and nuclei), you should consider identifying the ecnlosed object first with IdentifyPrimaryObjects and this object with IdentifySecondaryObjects. Otherwise, you might consider a non-classical segmentation module, such as RunCellpose or RunStarDist (if your object is star-convex)",
"3D_True":"You said that your objects will be typically entirely touching their neighbors. Segmentation of such crowded objects may be challenging; if your objects have a one-to-one relationship with an enclosed or semi-enclosed more-easily-separable object (like cells and nuclei), you should consider identifying the enclosed object first with Threshold and Watershed and then using these objects as seeds for a second round of Threshold followed by marker-based Watershed. Otherwise, you might consider a non-classical segmentation module, such as RunCellpose or RunStarDist (if your object is star-convex)"
}
}
},
Expand Down
4 changes: 2 additions & 2 deletions jsons/edge_marker.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
"full_name":"Is there a marker for the desired object that specifically highlights its edges?",
"select_all":false,
"slider":false,
"long_description":"",
"long_description":"Whether or not there is a marker specifically for the edge of the objects",
"section":"image",
"changes_based_on_3d":false,
"options":{
"Yes":{
"cellprofiler_suggester":false
"cellprofiler_suggester":"You said you have an image that has an edge marker for the objects in question. If segmentation proves otherwise challenging, you could consider thresholding the edge marker image with the Threshold module, then running MaskImage with 'Invert the Mask?' set to 'Yes' to remove any boundary-positive areas from the image you planned to use for segmentation. This can sometimes help when objects are very crowded. An inverted edge image can also sometimes be used as an image to find the objects, if ways can be found to identify and mask out any areas of the image that are background."
},
"No":{
"cellprofiler_suggester":false
Expand Down
40 changes: 32 additions & 8 deletions jsons/image_qc_issues.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,51 @@
"full_name":"Which if any of the following image quality issues are present? Select all that apply.",
"select_all":true,
"slider":false,
"long_description":"",
"long_description":"Whether any of several quality issues and/or artifacts are present in the images.",
"section":"image",
"changes_based_on_3d":false,
"changes_based_on_3d":true,
"options":{
"Overconfluence":{
"cellprofiler_suggester":false
"cellprofiler_suggester":
{
"3D_False":"You said your images may contain overconfluence. Crowded and/or overlapping objects may be difficult to directly identify: if your objects have a one-to-one relationship with an enclosed or semi-enclosed more-easily-separable object (like cells and nuclei), you should consider identifying the enclosed object first with IdentifyPrimaryObjects and this object with IdentifySecondaryObjects. Otherwise, you might consider a non-classical segmentation module, such as RunCellpose or RunStarDist (if your object is star-convex)",
"3D_True":"You said your images may contain overconfluence. Crowded and/or overlapping objects may be difficult to directly identify: if your objects have a one-to-one relationship with an enclosed or semi-enclosed more-easily-separable object (like cells and nuclei), you should consider identifying the enclosed object first (with Threshold and Watershed) and then using these objects as seeds for a second round of Threshold followed by marker-based Watershed. Otherwise, you might consider a non-classical segmentation module, such as RunCellpose or RunStarDist (if your object is star-convex)"
}
},
"Debris":{
"cellprofiler_suggester":false
"cellprofiler_suggester":
{
"3D_False":"You said your images may contain debris. You may wish to run IdentifyPrimaryObjects first to identify the debris, expand the debris objects slightly (typically 2-3 pixels) with ExpandOrShrinkObjects, then use MaskImage to mask your identification image with the expanded debris objects. You can then identify your objects as you typically would.",
"3D_True":"You said your images may contain debris. You may wish to to run Threshold and Watershed first to identify the debris, expand the debris objects slightly (typically 2-3 voxels) with DilateObjects, then use MaskImage to mask your identification image with the expanded debris objects. You can then identify your objects as you typically would."
}
},
"Inconsistent focus":{
"cellprofiler_suggester":false
"cellprofiler_suggester":
{
"3D_False":"You said your images may contain focus issues; while CellProfiler does have a MeasureImageQuality module that can detect some blur metrics, determining the right metric and/or the exact cutoff can sometimes be challenging. If a varied enough group of bad images can be gathered, it may be possible to measure the affected images, then create a classifier in CellProfiler Analyst to detect errors. That classifier can then be brought back into CellProfiler using the FlagImage module.",
"3D_True":"You said your images may contain focus issues; while CellProfiler does have a MeasureImageQuality module that can detect some blur metrics, determining the right metric and/or the exact cutoff can sometimes be challenging. If a varied enough group of bad images can be gathered, it may be possible to measure the affected images, then create a classifier in CellProfiler Analyst to detect errors. That classifier can then be brought back into CellProfiler using the FlagImage module."
}
},
"Variable background":{
"cellprofiler_suggester":false
"cellprofiler_suggester":
{
"3D_False":"You said your images may have variable background. Using Adaptive thresholding methods may help with correctly thresholding object areas in such cases, though this may not perform well when objects are croweded and thus some areas contain very little background. You can also try using the CorrectIlluminationCalculate module (with 'Select how the illumination function is calculated' set to 'Background' and 'Rescale the illumination function?' set to 'No') and the CorrectIlluminationApply module (with 'Select how the illumination function is applied' set to 'Subtract'); smaller settings in 'Block size' will subtract background more aggressively, but ensure your block size is not so small that blocks contain no background.",
"3D_True":"You said your images may have variable background. Using Adaptive thresholding methods may help with correctly thresholding object areas in such cases, though this may not perform well when objects are croweded and thus some areas contain very little background."
}
},
"Artifacts from tile stitching":{
"cellprofiler_suggester":false
"cellprofiler_suggester":
{
"3D_False":"You said your images may contain artifacts from tile stitching; unfortunately CellProfiler does not have any easy way to detect or avoid these. If it is not possible to remove such artifacts, and a varied enough group of them can be gathered, it may be possible to measure the affected images and/or objects, then create a classifier in CellProfiler Analyst to detect errors. That classifier can then be brought back into CellProfiler (using the FlagImage module for image classifiers and the FilterObjects module for object classifiers.",
"3D_True":"You said your images may contain artifacts from tile stitching; unfortunately CellProfiler does not have any easy way to detect or avoid these. If it is not possible to remove such artifacts, and a varied enough group of them can be gathered, it may be possible to measure the affected images and/or objects, then create a classifier in CellProfiler Analyst to detect errors. That classifier can then be brought back into CellProfiler (using the FlagImage module for image classifiers and the FilterObjects module for object classifiers."
}
},
"Artifacts from multi-view integration":{
"cellprofiler_suggester":false
"cellprofiler_suggester":
{
"3D_False":"You said your images may contain artifacts from multi-view integrattion; unfortunately CellProfiler does not have any easy way to detect or avoid these. If it is not possible to remove such artifacts, and a varied enough group of them can be gathered, it may be possible to measure the affected images and/or objects, then create a classifier in CellProfiler Analyst to detect errors. That classifier can then be brought back into CellProfiler (using the FlagImage module for image classifiers and the FilterObjects module for object classifiers.",
"3D_True":"You said your images may contain artifacts from multi-view integrattion; unfortunately CellProfiler does not have any easy way to detect or avoid these. If it is not possible to remove such artifacts, and a varied enough group of them can be gathered, it may be possible to measure the affected images and/or objects, then create a classifier in CellProfiler Analyst to detect errors. That classifier can then be brought back into CellProfiler (using the FlagImage module for image classifiers and the FilterObjects module for object classifiers."
}
}
},
"default_option_index":0
Expand Down
2 changes: 1 addition & 1 deletion jsons/master_schema.json

Large diffs are not rendered by default.

Loading

0 comments on commit 3c4140e

Please sign in to comment.