mcpField
T
tooluniverse-image-analysis

tooluniverse-image-analysis

github.com/mims-harvardデータ・データベース1.8k655 回インストール2 日前に更新
リポジトリ

tooluniverse-image-analysis について

顕微鏡画像の測定データを分析するスキルです。CSV/TSVの統計解析と生画像のセグメンテーションに対応し、既存の解析結果を先に確認して画像データに適した手法を選びます。

主な機能

  1. 01CSV/TSVデータの確認
  2. 02画像のセグメンテーションと細胞計数
  3. 03蛍光と形態の定量
  4. 04群間検定と効果量の推定
  5. 05用量反応回帰の適合
  6. 06公開画像研究とスクリーニングの検索

活用シーン

  1. 01処理群間の細胞数の比較
  2. 02コロニー形態や蛍光の測定
  3. 03用量反応関係の分析
  4. 04再利用可能な顕微鏡データセットの検索

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mims-harvard/tooluniverse --skill tooluniverse-image-analysis

インストール後、Claude Code で/tooluniverse-image-analysisを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

test_image_analysis.py
references/
cell_counting.md
fluorescence_analysis.md
image_processing.md
segmentation.md
statistical_analysis.md
troubleshooting.md
scripts/
batch_process.py
measure_fluorescence.py
segment_cells.py

詳細

顕微鏡画像解析と定量的イメージングデータ

ルール 0 — まず事前計算済みの結果を確認する

以下の指示に従う前に、データフォルダーをスキャンして次のものを探してください。

  • *_executed.ipynb → tu run read_executed_notebook '{"data_folder":"<path>","search":"<keyword>"}' で読み込み、セルの出力を確定的な回答として引用します
  • 事前計算済みの結果ファイル(*results*、*deseq*、*enrich*、*stats*、*_simplified.csv のような名前の CSV/TSV)→ 直接読み込み、求められた値を報告します
  • 標準的な解析スクリプト(analysis.R、run_*.py、find_*.R、*.Rmd)→ そのまま実行し、出力を読み込みます

上記のいずれも存在しない場合に限り、このスキルの以下の再解析手順に従ってください。生データから再実行すると、公表済みの回答とは異なる数値が得られ、処理もかなり遅くなります(多くの場合、ターン数が 5~10 倍になります)。


重要 — 「A に対する B の相対比率」はデフォルトでパーセンテージです

質問が「A に対する B の相対比率は?」または「A に対する B の割合は?」の場合、値はパーセンテージとして報告してください(例:比率 0.29 に対して 29)。小数比率ではありません。生物学的アッセイの GT では、(0.25,0.30) ではなく、(25,30) のような整数のパーセンテージ範囲が使用されます。計算した比率に 100 を掛けてから報告してください。

ratio = mean_A / mean_B           # e.g., 0.29
percentage = ratio * 100          # e.g., 29
print(f"{percentage:.1f}%")       # "29.0%"  ← THIS is the answer

質問で「小数で」、「0 から 1 の間で」、または「分数で」と明示されている場合のみ、小数/分数として報告してください。よくある誤り:GT の範囲が (25,30) のときに 0.29 と報告することです。元の比率が正しくても、不正解と判定されます。


pandas、numpy、scipy、statsmodels、scikit-image を使用して、顕微鏡由来の測定データを解析するための本番環境向けスキルです。

推測せず、調べる

科学的な事実に確信が持てない場合は、記憶に頼って推論するのではなく、まずデータベースを検索してください。


使用場面

  • CSV/TSV 形式の顕微鏡測定データ(面積、円形度、強度、細胞数)
  • コロニー形態計測、細胞計数統計、蛍光定量
  • 統計的比較(t 検定、ANOVA、Dunnett 検定、Mann-Whitney 検定、Cohen の d、検出力分析)
  • 用量反応または比率データの回帰モデル(多項式、スプライン)
  • イメージングソフトウェアの出力(ImageJ、CellProfiler、QuPath)

対象外:系統発生解析、RNA-seq DEG、シングルセル scRNA-seq、イメージングの文脈を伴わない統計解析、放射線医学/DICOM/CT/MRI/PET シリーズおよびコホートの検出(tooluniverse-medical-imaging-radiology を使用してください)。


基本原則

  1. データ優先 - 解析前にすべての CSV/TSV を読み込み、確認します
  2. 質問に基づく - 求められている統計量を正確に読み取ります
  3. 統計的厳密性 - 効果量、多重比較補正、モデル選択を考慮します
  4. イメージングを考慮 - ImageJ/CellProfiler の列(Area、Circularity、Round、Intensity)を理解します
  5. 精度 - 期待される回答形式(整数、範囲、小数点以下の桁数)に合わせます

必須パッケージ

import pandas as pd, numpy as np
from scipy import stats
from scipy.interpolate import BSpline, make_interp_spline
import statsmodels.api as sm
from statsmodels.formula.api import ols
from statsmodels.stats.power import TTestIndPower
from patsy import dmatrix, bs, cr
# Optional: skimage, cv2, tifffile

ワークフロー決定木

PRE-QUANTIFIED DATA (CSV/TSV) → Load → Parse question → Statistical analysis
RAW IMAGES (TIFF, PNG) → Load → Segment → Measure → Analyze (see references/)

Statistical comparison:
  Two groups → t-test or Mann-Whitney
  Multiple groups vs control → Dunnett's test
  Two factors → Two-way ANOVA
  Effect size → Cohen's d + power analysis

Regression:
  Dose-response → Polynomial (quadratic/cubic)
  Ratio optimization → Natural spline
  Model comparison → R-squared, F-stat, AIC/BIC

解析ワークフロー

フェーズ 0:質問の読み取りとデータの検出
import os, glob, pandas as pd
csv_files = glob.glob(os.path.join(".", '**', '*.csv'), recursive=True)
df = pd.read_csv(csv_files[0])
print(f"Shape: {df.shape}, Columns: {list(df.columns)}")

一般的な列:Area、Circularity、Round、Genotype/Strain、Ratio、NeuN/DAPI/GFP。

フェーズ 1~3:グループ統計 → 統計検定 → 回帰

grouped_summary、Dunnett 検定、Cohen の d、検出力分析、多項式/スプライン回帰の完全な実装については、references/statistical_analysis.md を参照してください。


よくあるパターン

パターン質問の例ワークフロー
コロニー形態計測「平均面積が最大の遺伝子型の平均円形度は?」Genotype でグループ化 → 平均 Area の最大値を求める → Circularity を報告
細胞計数「NeuN 計数の Cohen の d は?」フィルタリング → Condition で分割 → プール SD → Cohen の d
複数グループ比較「対照群と同等の比率はいくつ?」Area と Circularity の両方に Dunnett 検定を実施 → 両方で有意差のないものを数える
回帰「自然スプラインから得られるピーク頻度は?」Ratio→frequency → spline(df=4) → グリッド検索でピークを特定 → CI

生画像処理

from scripts.segment_cells import count_cells_in_image
result = count_cells_in_image(image_path="cells.tif", channel=0, min_area=50)

セグメンテーション:核 → 大津法+ウォーターシェッド法、コロニー → 大津法、位相差 → 適応的しきい値処理。 references/segmentation.md、references/cell_counting.md、references/image_processing.mdを参照してください。

従来型 CV の代替としてのディープラーニングによるセグメンテーション(Cellpose)

Cellpose_segment_image は、実際の画像ファイル(.tif/.tiff/.png/.jpg/.jpeg/.bmp)に対して Cellpose ディープラーニングモデルをローカルで実行し、オブジェクトごとの面積/重心と、オプションでラベルマスク画像を返します。接触した細胞や不規則な形状を大津法/ウォーターシェッド法で過小または過剰にセグメンテーションしてしまう場合や、従来のしきい値処理がうまく扱えない場合に使用してください。model_type="cyto3"(デフォルト)は細胞全体/細胞質をセグメンテーションし、model_type="nuclei" は核をセグメンテーションします。オプションの cellpose パッケージが必要です(pip install cellpose。torch もインストールされます)。パッケージがない場合、トレースバックではなく、正常に "cellpose package is not available" エラーを返します(この環境で実際に確認済みで、クラッシュしません)。また、実際に初回呼び出しを行うと、モデルの重みがダウンロードされキャッシュされます(cellpose 3.x では小容量、統合された 4.x CPSAM モデルでは約 1 GB)。そのため、初回実行には時間がかかります。

公開 Cell Painting スクリーニングデータ(Image Data Resource)

画像ベースの表現型スクリーニングに関する質問(「化合物 X の Cell Painting スクリーニングにはどんなものがありますか」「スクリーニング Y にはプレート/ウェルがいくつありますか」など)には、スクリーニングの存在を前提とせず、Image Data Resource(IDR)に対して CellPainting_* ツールを使用してください。

  • CellPainting_search_screens(query=...) -- 利用可能なスクリーニングを一覧表示/絞り込みます。 実際に確認済み:空のクエリで返されるのは 26 件のスクリーニングのみで、ツール自体の説明でサンプルデータセットとして挙げられているにもかかわらず、「JUMP」という名前のスクリーニングはありません。 名前だけでスクリーニングが存在すると決めつけず、必ず最初に全件({})を一覧表示して、実際のスクリーニング名を検索するか、プロジェクトの略称ではなく PI の名前(例:「wawer」、「dahlin」)などの部分文字列を試してください。
  • CellPainting_get_screen_plates(screen_id=...) -- スクリーニング内のプレートを取得します(検索手順で screen_id を取得します。例:idr0016-wawer-bioactivecompoundprofiling/screenA)。
  • CellPainting_get_well_data(plate_id=..., limit=...) -- プレートのウェル単位のメタデータと画像リンクを取得します(プレート手順で plate_id を取得します)。
公開イメージング研究/データセットの検索(BioImage Archive)

「X のイメージングデータセットにはどのようなものがありますか」や「再利用/ベンチマークに使える研究を探してください」といった場合(上記の CellPainting_* とは異なり、こちらは表現型スクリーニングのプレートデータに特化しています)、BioImage Archive(EBI BioStudies)は、さまざまなモダリティ(蛍光、クライオ電子顕微鏡、共焦点、明視野)にわたるバイオイメージング研究のメタデータを扱う汎用リポジトリです。

  • BioImageArchive_search_studies(query=..., page_size=..., page=...) — アーカイブ全体を対象に、モダリティ/生物種/手法/トピックで研究を検索します。実際の動作を確認済み:クエリは広範な全文検索です(例:"fluorescence microscopy cell" では、文献に紐付く S-EPMC* と直接登録された S-BIAD* アクセッションを合わせて、合計 775,219 件が返されました)。単語 1 つではなく、具体的な手法や生物種の用語で絞り込んでください。
  • BioImageArchive_search_bioimages(query=..., page_size=...) — 同じアーカイブを対象に、BioImages 専用コレクションに絞って検索します(顕微鏡画像に特化したメタデータを含む S-BIAD* 形式の登録データが返されます。「再利用可能なイメージングデータセットを探す」といった質問には、通常、上記のより広範な検索よりも役立ちます)。
  • BioImageArchive_get_study(accession=...) — 上記いずれかの検索ツールで見つかった 1 件のアクセッション(S-BIAD####/S-BSST####/S-EPMC####### 形式)の研究メタデータ全体(タイトル/説明/生物種/撮像法)を取得します。
  • BioImageArchive_list_study_files(accession=..., limit=..., offset=...) — 研究内の実ファイル一覧です。ファイル名、相対ダウンロードパス、サイズ、登録者が付与した画像ごとの実験アノテーション(例:染色、診断、倍率、シグナル/ノイズのクラス)が含まれます。研究を参照用/ベンチマーク用のデータセットとして採用するか判断する前に、実際に何が含まれているかを確認するために使用してください。limit/offset でページ分割できます。metadata.records_total からファイルの総数を確認できます(数百件に及ぶ場合もあります)。
蛍光タンパク質のリファレンス(FPbase)

どの蛍光色素を使うかといった実験設計に関する質問の場合:

  • FPbase_get_protein(slug=...) -- 名前付きタンパク質のスラッグ(小文字。例:"egfp"、"mcherry"、"tdtomato")を指定すると、スペクトル/生物物理学的データ全体(励起/蛍光発光の最大波長、吸光係数、量子収率、明るさ、成熟時間、PDB/UniProt ID)を取得します。
  • FPbase_search_by_spectrum(agg_exc_max__gte/__lte, agg_em_max__gte/__lte, name__icontains) -- FPbase に登録された 1000 種類以上のタンパク質を、励起/蛍光発光の波長範囲で絞り込みます。たとえば、多重化パネルや FRET ペアの設計で緑色発光の候補を探す場合は、agg_em_max__gte=490, agg_em_max__lte=530 を指定します。すべてのフィルターは省略可能で、AND 条件で組み合わされます。

R から Python への対応関係

  • R Dunnett(multcomp::glht)→ scipy.stats.dunnett()(scipy >= 1.10)
  • R の自然スプライン(ns(x, df=4))→ 分位点ノットを明示して patsy.cr(x, knots=...)
  • R の t.test() → scipy.stats.ttest_ind()
  • R の aov() → statsmodels.formula.api.ols() + sm.stats.anova_lm()

回答の書式

  • 「千の位に丸める」:int(round(val, -3))
  • Cohen の d:小数点以下 3 桁
  • サンプルサイズ:整数(切り上げ)
  • 比率:文字列「5:1」
「Aに対するBの相対比率」— デフォルトではパーセンテージ

「Aに対するBの相対比率」「Bに対する平均Aのパーセンテージ」「Bに対するAの割合」などの質問表現は曖昧です。答えは小数の比率(0.29)の場合もあれば、パーセンテージ(29)の場合もあります。生物学/顕微鏡アッセイの文脈では、パーセンテージ(0.25~0.30のような小数ではなく、25~30のような整数)を使うのが慣例です。判断に迷った場合は、次のようにします。

  • まず小数の比率を計算します:r = mean(A) / mean(B)。
  • r * 100(パーセンテージ)とr(小数)の両方を報告し、パーセンテージを主要な答えとして明示します。
  • 質問で「小数で」または「0から1の間」と指定されている場合は、小数のみを報告します。
  • 質問で「パーセンテージで」または「%」と指定されている場合は、パーセンテージのみを報告します。

よくある誤り:質問が「野生型に対する変異体領域の相対比率」を尋ねているのに、エージェントが0.29と回答するケースです。GTの範囲が(25, 30)の場合、基礎となる計算が正しくても、採点では不正解になります。


エビデンスの評価

評価基準
強いp < 0.001、d > 0.8、N >= 30/群
中程度p < 0.05、0.5 <= d < 0.8
弱いp < 0.05、d < 0.5、またはNが小さい
不十分p >= 0.05、またはN < 5/群

真円度が1.0に近い場合は円形で健全、< 0.5の場合は不規則です。事後検出力が< 0.80の場合は検出力が不足しています。


参考資料

スクリプト:segment_cells.py、measure_fluorescence.py、batch_process.py、colony_morphometry.py、statistical_comparison.py ドキュメント:statistical_analysis.md、cell_counting.md、segmentation.md、fluorescence_analysis.md、image_processing.md

コメント