tooluniverse-image-analysis

Microscopy and quantitative imaging analysis — colony morphometry, fluorescence intensity quantification, cell-count statistics, dose-response curves, and ANOVA/Dunnett on image-derived measurements. Uses pandas/numpy/scipy/scikit-image. Use for analyzing tabular outputs from CellProfiler/ImageJ, im

By mims-harvard · 642 installs

npx skills add mims-harvard/tooluniverse --skill tooluniverse-image-analysis

Source repository · Upstream listing

Microscopy Image Analysis and Quantitative Imaging Data RULE ZERO — Check for pre computed results FIRST Before following any instruction below, scan the data folder for: executed.ipynb → read with tu run read executed notebook '{"data folder":"<path ","search":"<keyword "}' and cite its cell outputs as the authoritative answer Pre computed result files (CSV/TSV with names like results , deseq , enrich , stats , simplified.csv ) → read directly and report the requested value Canonical analysis scripts ( analysis.R , run .py , find .R , .Rmd ) → execute as is and read the output Only follow this skill's re analysis recipe below if none of the above exist. Re running from raw data produces different numbers than the published answer and is much slower (often 5 10× turn count). CRITICAL — "Relative proportion of A to B" defaults to PERCENTAGE When the question asks "What is the relative proportion of A to B" or "What percentage of A relative to B", report the value as a percentage (e.g., 29 for ratio 0.29), NOT a decimal ratio. Biology assay GTs use whole number percentage ranges like (25,30) , not (0.25,0.30) . Multiply your computed ratio by 100 before reporting: Only report as decimal/fraction if the question explicitly says "as a decimal", "between 0 and 1", or "as a fraction". Common error: reporting 0.29 when the GT range is (25,30) — graded as wrong even though the underlying ratio is correct. Production ready skill for analyzing microscopy derived measurement data using pandas, numpy, scipy, statsmodels, and scikit image. LOOK UP, DON'T GUESS When uncertain about any scientific fact, SEARCH databases first rather than reasoning from memory. When to Use Microscopy measurement data (area, circularity, intensity, cell counts) in CSV/TSV Colony morphometry, cell counting statistics, fluorescence quantification Statistical comparisons (t test, ANOVA, Dunnett's, Mann Whitney, Cohen's d, power analysis) Regression models (polynomial, spline) for dose response or ratio data Imaging software output (ImageJ, CellProfiler, QuPath) NOT for : Phylogenetics, RNA seq DEG, single cell scRNA seq, statistics without imaging context, radiology/DICOM/CT/MRI/PET series and cohort discovery (use tooluniverse medical imaging radiology ). Core Principles 1. Data first Load and inspect all CSV/TSV before analysis 2. Question driven Parse the exact statistic requested 3. Statistical rigor Effect sizes, multiple comparison corrections, model selection 4. Imaging aware Understand ImageJ/CellProfiler columns (Area, Circularity, Round, Intensity) 5. Precision Match expected answer format (integer, range, decimal places) Required Packages Workflow Decision Tree Analysis Workflow Phase 0: Question Parsing and Data Discovery Common columns: Area, Circularity, Round, Genotype/Strain, Ratio, NeuN/DAPI/GFP. Phase 1 3: Grouped Stats → Statistical Testing → Regression See references/statistical analysis.md for complete implementations of grouped summary, Dunnett's, Cohen's d, power analysis, polynomial/spline regression. Common Patterns Pattern Example Question Workflow Colony Morphometry "Mean circularity of genotype with largest area?" Group by Genotype → max mean Area → report Circularity Cell Counting "Cohen's d for NeuN counts?" Filter → split by Condition → pooled SD → Cohen's d Multi Group Comparison "How many ratios equivalent to control?" Dunnett's for Area AND Circularity → count non significant in BOTH Regression "Peak frequency from natural spline?" Ratio→frequency → spline(df=4) → grid search peak → CI Raw Image Processing Segmentation: Nuclei → Otsu+watershed; Colonies → Otsu; Phase contrast → adaptive threshold. See references/segmentation.md , references/cell counting.md , references/image processing.md . Deep learning segmentation (Cellpose) as an alternative to classical CV Cellpose segment image runs the Cellpose deep learning model locally on a real image file ( .tif / .tiff / .png / .jpg / .jpeg / .bmp ) and returns per object area/centroid plus an optional label mask image reach for it when Otsu/watershed under or over segments touching cells or irregular shapes that classical thresholding handles poorly. model type="cyto3" (default) segments whole cells/cytoplasm; model type="nuclei" segments nuclei. Requires the optional cellpose package ( pip install cellpose , pulls in torch ) if missing, the tool returns a clean "cellpose package is not available" error (verified live in this environment, no crash) rather than a traceback; the first real call also downloads and caches model weights (small for cellpose 3.x, ~1 GB for the unified 4.x CPSAM model), so expect a slow first run. Public Cell Painting screen data (Image Data Resource) For image based phenotypic screening questions ("what Cell Painting screens exist for compound X", "how many plates/wells in screen Y"), use the CellPainting tools against the Image Data Resource (IDR) rather than assuming a screen exists: CellPainting search screens(query=...) list/filter available screens. Verified live: an empty query returns only 26 screens, and none are named literally "JUMP" despite the tool's own description citing JUMP CP as an example dataset do not assume a screen exists by name; always list first ( {} ) and grep the real screen name list, or try substrings like a PI name (e.g. "wawer", "dahlin") instead of a project acronym. CellPainting get screen plates(screen id=...) plates in a screen (get screen id from the search step, e.g. idr0016 wawer bioactivecompoundprofiling/screenA ). CellPainting get well data(plate id=..., limit=...) well level metadata and image links for a plate (get plate id from the plates step). Public imaging study/dataset discovery (BioImage Archive) For "what imaging datasets exist for X" or "find a study I can reuse/benchmark against" (distinct from CellPainting above, which is specifically phenotypic screening plate data) — the BioImage Archive (EBI BioStudies) is a general repository of bioimaging study metadata across modalities (fluorescence, cryo EM, confocal, brightfield): BioImageArchive search studies(query=..., page size=..., page=...) — general study search across the whole archive by modality/organism/ technique/topic. Verified live: query is a broad free text match (e.g. "fluorescence microscopy cell" returned 775,219 total hits across literature linked S EPMC and directly submitted S BIAD accessions) — narrow with specific technique/organism terms rather than single words. BioImageArchive search bioimages(query=..., page size=...) — same archive, scoped to the BioImages specific collection (returns S BIAD style submissions with microscopy specific metadata, generally more useful than the broader search above for "find a reusable imaging dataset" questions). BioImageArchive get study(accession=...) — full study metadata (title/description/organism/imaging method) for one accession ( S BIAD / S BSST / S EPMC format) found via either search tool above. BioImageArchive list study files(accession=..., limit=..., offset=...) — the actual per file manifest for a study: filename, relative download path, size, and any per image experimental annotations the submitters attached (e.g. staining, diagnosis, magnification, signal/noise class) — use this to see what's actually in a study before deciding whether it's the right reference/benchmark dataset. Page with limit / offset ; metadata.records total gives the full file count (can be in the hundreds). Fluorescent protein reference (FPbase) For experiment design questions about which fluorophore to use: FPbase get protein(slug=...) full spectral/biophysical data (excitation/ emission max, extinction coefficient, quantum yield, brightness, maturation time, PDB/UniProt IDs) for a named protein by its lowercase slug (e.g. "egfp" , "mcherry" , "tdtomato" ). FPbase search by spectrum(agg exc max gte/ lte, agg em max gte/ lte, name icontains) filter FPbase's 1000+ proteins by excitation/emission wavelength range, e.g. to find green emitting options ( agg em max gte=490, agg em max lte=530 ) for a multiplexed panel or FRET pair design. All filters are optional and combine as AND. R to Python Equivalents R Dunnett ( multcomp::glht ) → scipy.stats.dunnett() (scipy = 1.10) R natural spline ( ns(x, df=4) ) → patsy.cr(x, knots=...) with explicit quantile knots R t.test() → scipy.stats.ttest ind() R aov() → statsmodels.formula.api.ols() + sm.stats.anova lm() Answer Formatting "to the nearest thousand": int(round(val, 3)) Cohen's d: 3 decimal places Sample sizes: integer (ceiling) Ratios: string "5:1" "Relative proportion of A to B" — default to PERCENTAGE Question phrases like "relative proportion of A to B", "percentage of mean A relative to B", or "A as a fraction of B" are ambiguous: the answer could be the decimal ratio ( 0.29 ) or the percentage ( 29 ). In biology/microscopy assay contexts the convention is percentage (whole numbers like 25 30, not decimals like 0.25 0.30). When in doubt: Compute the decimal ratio first: r = mean(A) / mean(B) . Report BOTH r 100 (percentage) and r (decimal); flag the percentage as the primary answer. If the question specifies "as a decimal" or "between 0 and 1", report decimal only. If the question specifies "as a percentage" or "%", report percentage only. Common error: question asks "relative proportion of mutant area to wildtype" and the agent reports 0.29 when the GT range is (25, 30) . The grader marks this wrong even though the underlying computation is correct. Evidence Grading Grade Criteria Strong p < 0.001, d 0.8, N = 30/group Moderate p < 0.05, 0.5 <= d < 0.8 Weak p < 0.05, d < 0.5 or low N Insufficient p = 0.05 or N < 5/group Circularity near 1.0 = round/healthy; < 0.5 = irregular. Post hoc power < 0.80 = underpowered. References Scripts: segment cells.py , measure fluorescence.py , batch process.py , colony morphometry.py , statistical comparison.py Docs: statistical analysis.md , cell counting.md , segmentation.md , fluorescence analysis.md , image processing.md