細胞セグメンテーションと形態解析
1.入力データの定義
画像解析において重要なのは、コードそのものよりも解析設計である。
対象となる画像が研究上「何を表しているのか」を言語化し、明確に定義する必要がある。
病理画像を例に挙げると、少なくとも以下の点を事前に整理しておく必要がある。
- 当該画像は1症例なのか、1切片なのか、あるいは特定の視野なのか
- 解像度や倍率は固定されているか
- RGB画像か、単一チャンネル画像か
- 解析対象は細胞単位か、組織単位か、あるいは視野全体か
from skimage.io import imread
img = imread("sample_image.png")
print(img.shape)
print(img.dtype)
上記は単に画像を読み込んでいるだけであるが、同時に環境構築の確認にもなる。
その上で、「この画像から個々の細胞を認識し、形態計測を行う」という解析デザインを明示的に言語化する。
セグメンテーションの戦略
Cellpose や StarDist などの深層学習モデルは広く利用されており、実用性も高い。
一方で、研究の目的が仮説検証のための形態解析である場合、必ずしも最新の深層学習モデルが必須とは限らない。
古典的手法、あるいは手作業による解析であっても、研究目的が達成されるのであれば十分である。
from cellpose import models
import matplotlib.pyplot as plt
model = models.Cellpose(gpu=True, model_type='cyto3')
masks, flows, styles, diams = model.eval(
img,
channels=[0, 0]
)
plt.imshow(masks)
plt.title("Segmentation result")
plt.axis("off")
Cellpose の cyto3 モデルは汎用性が高く、初期検討として有用である。
この段階で確認すべき点は以下である。
- 過剰分割が生じていないか
- 明らかな取りこぼしが多くないか
- ノイズ様の小構造が大量に検出されていないか
これらが概ね満たされていれば、細かな調整で対応可能である。
一方で問題が大きい場合は、前処理やモデル選択自体を再検討する必要がある。
元画像の品質も重要であり、
- ゴミやアーティファクトが十分に除去されているか
- 細胞形状を認識可能な染色がなされているか
といった点は事前に確認しておく必要がある。
H&E 染色では問題になりにくいが、細胞質が十分に染色されない免疫染色では注意が必要である。
後処理による研究目的への適合
セグメンテーション結果が視覚的に良好であっても、そのまま研究データとして使用できるとは限らない。
以下のような要素は、AIモデルによって適切に処理されない場合が多い。
- 生物学的に成立しない構造
- 切片由来のゴミ
- 染色ムラなどのアーティファクト
そのため、後処理として一定のフィルタリングが必要となる。
import numpy as np
from skimage.measure import regionprops
filtered_labels = []
props = regionprops(masks)
for prop in props:
area = prop.area
if 100 < area < 3000:
filtered_labels.append(prop.label)
最も直感的な例は、サイズによるフィルタリングである。
この閾値設定には客観的妥当性が求められ、例えば最小値は赤血球やリンパ球の大きさなどを基準とすることが考えられる。
形状によるフィルタリングも可能であるが、病理画像解析においては慎重であるべきである。
ヒト組織では、加齢性変化や炎症、線維化、切片作製過程での変形などが生じうるため、
「形が歪んでいる細胞=除外対象」と単純に判断することは適切ではない。
フィルタリング条件は、誰が見ても説明可能な客観性を備える必要がある。
Morphometry(定量化)
最終的に重要なのは、「議論したい内容を数値化する」ことである。
無差別に多数の指標を計測することが目的ではない。
results = []
for prop in props:
if prop.label in filtered_labels:
results.append({
"area": prop.area,
"major_axis": prop.major_axis_length,
"minor_axis": prop.minor_axis_length,
"ratio": prop.major_axis_length / prop.minor_axis_length
})
基本的な形態指標としては、この程度で十分であることが多い。
import pandas as pd
df = pd.DataFrame(results)
df.to_csv("morphometry_results.csv", index=False)
CSV形式で生データを保存しておくことは極めて重要である。
後続解析や再解析の可能性を考慮すると、データフレーム内だけで完結させない方が望ましい。
免疫染色では、DAB染色(褐色)の強度や面積比の定量が用いられることが多い。
特に、細胞面積を分母としたDAB陽性面積比は、受け入れられやすい指標である。
バッチ処理と再現性
解析は最終的に多数のデータへ同一条件で適用される。
以下の点が満たされていなければ、透明性や信頼性は確保できない。
- 同一条件で再解析が可能か
- パラメータは固定されているか
- 解析条件を後から説明できるか
まずは1枚の画像で設計を確定し、その後に多数データへ展開するべきである。
初期設計を行わずに大量の画像取得を先行させることは、研究上大きなリスクとなる。