Skip to content

Commit 3c4140e

Browse files
committed
Add all descriptions and CellProfiler suggestions
1 parent 0ae29f5 commit 3c4140e

23 files changed

+161
-111
lines changed

Home.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
This schema is currently under development; stay tuned for more updates.
2222
Previous versions of this schema are currently best found on [Zenodo](https://doi.org/10.5281/zenodo.7654937)
2323
24-
Last updated - April 25, 2023
24+
Last updated - June 10, 2023
2525
2626
App made by Beth Cimini, Broad Institute, 2023, as part of the Center for Open Bioimage Analysis
2727
@@ -34,13 +34,11 @@
3434
import json
3535
import streamlit as st
3636

37-
from utils import load_schema,make_fig
37+
from utils import load_schema
3838

39-
load_schema(from_master=False,rewrite_master=True)
39+
load_schema(from_master=True,rewrite_master=False)
4040

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

4343
st.download_button('Download these questions and answers as a json file',open('bioimage_object_analysis_questions.json'),'bioimage_object_analysis_questions.json')
44-
st.download_button('Download these questions and answers as a csv file',open('bioimage_object_analysis_questions.csv'),'bioimage_object_analysis_questions.csv')
45-
46-
make_fig()
44+
st.download_button('Download these questions and answers as a csv file',open('bioimage_object_analysis_questions.csv'),'bioimage_object_analysis_questions.csv')

figure.png

-24.8 KB
Loading

jsons/align_register.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"full_name":"Does alignment and/or registration need to be applied before proceeding?",
55
"select_all":false,
66
"slider":false,
7-
"long_description":"",
7+
"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",
88
"section":"image",
99
"changes_based_on_3d":true,
1010
"options":{
@@ -18,15 +18,15 @@
1818
"Need to align images to other images":{
1919
"cellprofiler_suggester":
2020
{
21-
"3D_False":false,
22-
"3D_True":false
21+
"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.",
22+
"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."
2323
}
2424
},
2525
"Need to align images to a reference atlas":{
2626
"cellprofiler_suggester":
2727
{
28-
"3D_False":false,
29-
"3D_True":false
28+
"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).",
29+
"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."
3030
}
3131
}
3232
},

jsons/bleedthrough.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"full_name":"Is fluorescent bleedthrough present in these images?",
55
"select_all":false,
66
"slider":false,
7-
"long_description":"",
7+
"long_description":"Whether bleedthrough of fluorescent channels is present in the images; this typically occurs when using multiple dyes with very close spectral signatures",
88
"section":"image",
99
"changes_based_on_3d":false,
1010
"options":{
@@ -15,10 +15,10 @@
1515
"cellprofiler_suggester":false
1616
},
1717
"Yes, but we don't need to apply a correction in this workflow":{
18-
"cellprofiler_suggester":false
18+
"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."
1919
},
2020
"Yes, and we do need to apply a correction in this workflow":{
21-
"cellprofiler_suggester":false
21+
"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"
2222
}
2323
},
2424
"default_option_index":1

jsons/crowdedness.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"full_name":"How close will each object typically be to its nearest neighbors of the same object type?",
55
"select_all":false,
66
"slider":true,
7-
"long_description":"",
7+
"long_description":"Whether each object will typically be spatially full separated from neighbors, entirely touching neighbors, or something in between",
88
"section":"object",
99
"changes_based_on_3d":true,
1010
"options":{
@@ -25,15 +25,15 @@
2525
"Some touching of neighbors":{
2626
"cellprofiler_suggester":
2727
{
28-
"3D_False":false,
29-
"3D_True":false
28+
"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)",
29+
"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)"
3030
}
3131
},
3232
"Entirely touching neighbors":{
3333
"cellprofiler_suggester":
3434
{
35-
"3D_False":false,
36-
"3D_True":false
35+
"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)",
36+
"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)"
3737
}
3838
}
3939
},

jsons/edge_marker.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
"full_name":"Is there a marker for the desired object that specifically highlights its edges?",
55
"select_all":false,
66
"slider":false,
7-
"long_description":"",
7+
"long_description":"Whether or not there is a marker specifically for the edge of the objects",
88
"section":"image",
99
"changes_based_on_3d":false,
1010
"options":{
1111
"Yes":{
12-
"cellprofiler_suggester":false
12+
"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."
1313
},
1414
"No":{
1515
"cellprofiler_suggester":false

jsons/image_qc_issues.json

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,51 @@
44
"full_name":"Which if any of the following image quality issues are present? Select all that apply.",
55
"select_all":true,
66
"slider":false,
7-
"long_description":"",
7+
"long_description":"Whether any of several quality issues and/or artifacts are present in the images.",
88
"section":"image",
9-
"changes_based_on_3d":false,
9+
"changes_based_on_3d":true,
1010
"options":{
1111
"Overconfluence":{
12-
"cellprofiler_suggester":false
12+
"cellprofiler_suggester":
13+
{
14+
"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)",
15+
"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)"
16+
}
1317
},
1418
"Debris":{
15-
"cellprofiler_suggester":false
19+
"cellprofiler_suggester":
20+
{
21+
"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.",
22+
"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."
23+
}
1624
},
1725
"Inconsistent focus":{
18-
"cellprofiler_suggester":false
26+
"cellprofiler_suggester":
27+
{
28+
"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.",
29+
"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."
30+
}
1931
},
2032
"Variable background":{
21-
"cellprofiler_suggester":false
33+
"cellprofiler_suggester":
34+
{
35+
"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.",
36+
"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."
37+
}
2238
},
2339
"Artifacts from tile stitching":{
24-
"cellprofiler_suggester":false
40+
"cellprofiler_suggester":
41+
{
42+
"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.",
43+
"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."
44+
}
2545
},
2646
"Artifacts from multi-view integration":{
27-
"cellprofiler_suggester":false
47+
"cellprofiler_suggester":
48+
{
49+
"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.",
50+
"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."
51+
}
2852
}
2953
},
3054
"default_option_index":0

jsons/master_schema.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)