Change Detection
変化検出では、同じ場所を異なる時刻に撮影した画像を比較し、衛星画像から工場まで、出現、消失、移動したものをマッピングします。
変化検出とは、異なる時点に同じシーンを撮影した画像間で、意味のある違いを見つけるタスクです。2つ以上の観測結果を比較し、二値の変化マップ、「森林から農地へ」のような変化前後のクラス、または出現、消失、移動した物体の一覧として、変化した場所を出力します。2時点の画像を比較するものは二時期変化検出と呼ばれ、複数時期の手法では時系列全体を分析して、継続的な変化と季節サイクルや一時的なノイズを区別します。このタスクはリモートセンシングや衛星画像解析の中心的な技術であり、同じ考え方は固定式防犯カメラの背景差分や、産業検査における基準画像との比較にも使われています。
変化検出の仕組み#
対応するピクセルが同じ地表を示して初めて、2枚の画像を適切に比較できます。画像レジストレーションで画像を位置合わせします。1ピクセルのずれでも、あらゆるエッジに誤った変化が生じるためです。また、放射量正規化によって太陽角度、露出、かすみ、センサー応答の違いを取り除きます。次に比較処理で各ピクセルまたは領域の差分指標を算出し、しきい値によって変化とノイズを分けます。その後、後処理で孤立したピクセルを除去し、残りを領域に統合します。
最も単純な比較方法は画像差分です。この例では、上空から撮影した駐車場の2.7秒間隔のフレームを比較し、大津の方法でしきい値を選択します。
import cv2
import numpy as np
# Two frames of a parking lot filmed from above, 81 frames (2.7 seconds) apart
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/solution_ci_parking_demo.mp4")
_, before = cap.read()
cap.set(cv2.CAP_PROP_POS_FRAMES, 81)
_, after = cap.read()
# Convert to grayscale and blur to suppress noise, then difference pixel by pixel
before = cv2.GaussianBlur(cv2.cvtColor(before, cv2.COLOR_BGR2GRAY), (5, 5), 0)
after = cv2.GaussianBlur(cv2.cvtColor(after, cv2.COLOR_BGR2GRAY), (5, 5), 0)
diff = cv2.absdiff(before, after)
# Otsu's method picks the change threshold, and an opening removes isolated noisy pixels
_, change_map = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
change_map = cv2.morphologyEx(change_map, cv2.MORPH_OPEN, np.ones((5, 5), np.uint8))
print(f"{100 * (change_map > 0).mean():.1f}% of pixels changed")
cv2.imwrite("change_map.png", change_map)5.2% of pixels changedが出力されます。保存されたマップでは、駐車スペースに入る青い車、駐車場を横切る白いバンの2つの位置、フレーム左端から出ていく車に印が付きます。一方、駐車中の車、路面標示、舗装面は黒のままです。
ピクセル、物体、学習ベースの手法#
ピクセル差分は、両方の画像が同じセンサーで似た照明条件のもとで撮影された場合に有効です。レーダー画像ではスペックルノイズが乗算的であるため、差分の代わりに比率を使います。また、変化ベクトル解析では、各マルチスペクトルピクセルを大きさと方向の両方を持つ変化ベクトルとして扱います。分類後比較では、それぞれの時期の画像を独立に分類してラベルを比較します。これにより変化前後のクラスが得られ、異なるセンサーにも対応できますが、両方の分類誤差が積み重なります。
ディープラーニングの手法では、共有重みを持つシアミーズ畳み込みニューラルネットワークに両方の画像を入力し、特徴マップの差分を変化マップにデコードします。この設計は、2018年にDaudtらが提案した全畳み込みシアミーズネットワークによって広く知られるようになり、その後のモデルではアテンション機構やトランスフォーマーが追加されています。広く使われているベンチマークの1つがLEVIR-CDです。Hao ChenとZhenwei Shiが2020年に公開したこのデータセットには、1ピクセルあたり0.5メートルの解像度を持つ1,024×1,024ピクセルのGoogle Earth画像ペア637組と、アノテーション済みの建物の変化31,333件が含まれています。
物体レベルの変化検出ではピクセルではなく検出結果を比較するため、影や季節による色の変化を無視できます。DOTAの航空画像で事前学習したUltralytics YOLO26の方向付きバウンディングボックスモデルは、航空機、船舶、貯蔵タンク、車両の回転ボックスを返します。そのため、異なる時期の物体検出結果を照合すると、何が現れ、何がなくなったかが分かります。
変化検出と関連タスクの違い#
- 異常検知:多くの場合、単一画像から、学習済みの正常性の基準から外れた観測結果を検出します。変化検出では基準となる観測結果が必要であり、新しい建物のような変化は通常、想定されるものです。
- 物体追跡とオプティカルフローは、連続する動画フレーム間の動きを追います。変化検出では、数か月または数年離れた2つの時点のシーンの状態を比較します。
- データドリフトとは、デプロイ済みモデルが受け取る入力の統計分布が時間とともに変化し、精度が低下することです。
実際のアプリケーション#
- 森林減少と土地被覆の監視: メリーランド大学が2013年以降に公開している、Landsat画像に基づく解像度30メートルの年間樹木被覆減少マップは、Global Forest Watchの基盤となっています。
- 災害被害の評価: 災害前後の衛星画像やドローン画像を比較し、浸水地、焼失地域、倒壊した建物をマッピングします。xBDデータセットでは、災害前後の画像ペアに基づいて建物の被害を4段階で評価します。
- 産業検査: 固定カメラで組み立て品を正常な部品の基準画像と比較し、ねじの欠落、部品の配置間違い、異物を検出します。
- セキュリティと監視: 動画における変化検出である背景差分では、各ピクセルの静的なシーンをモデル化し、そこから外れたものを動く前景として扱います。これが固定カメラの動体検知アラートの仕組みです。










