画像検索を捨てた異例のアプローチ
OSINTセキュリティエキスパートの Sofia Santos 氏が、ドローンで撮影されたビーチリゾートの空撮画像を公開し、リゾート名、島の座標、カメラの向きを特定するチャレンジを出題した。画像には GPS 座標や撮影機器のメタデータ(EXIF)は一切含まれておらず、画面に写っているのはヤシの木、白い砂浜、そして遠方に浮かぶ3つの陸地のみだった。
多くの挑戦者はまず逆画像検索エンジンを開き、砂浜や建物の構造を画像モデルに識別させようと考えた。しかし、エンジニアの yassa9 氏は全く異なる解法を選択した。検索窓を閉じ、アルゴリズムを記述し、全世界 882MB 分の海岸線ベクターデータを丸ごと GPU の VRAM に読み込ませたのだ。
均質な自然風景の前では、汎用画像認識モデルは容易に誤作動し、熱帯のビーチ画像は大量の偽陽性(誤検知)を引き起こしやすい。検索を確定的な「幾何学」へと次元削減することこそが、確率の罠から脱出する唯一のパスとなった。
図:Sofia Santos 氏が投稿した OSINT チャレンジ原図。画面内に3つの独立した島影が含まれる。出典:yassa9 ブログ
3つの島影を幾何学的指紋に変換
画像内には明確に3つの陸地が確認できる。手前にあるリゾートの島 P0、右側の平坦な島 P1、そして左側に山頂の起伏を持つ島 P2 だ。これら2次元平面上の3つの物理点は、特定の一意な三角形を形成する。
三角形の3つの辺長比と3つの内角の値は、偽造不可能な幾何学的特徴を構成する。遠近法による歪みやレンズ歪曲を考慮し、アルゴリズムはこの幾何学特徴に ±20% の許容誤差を設定、マシンで網羅探索可能な「地理的指紋」として定義した。
データ処理の第一歩は、OpenStreetMap の全球海岸線ベクターデータセット land-polygons-split-4326(非圧縮サイズ 882MB)の読み込みである。計算量の爆発を防ぐため、フィルタリングパイプラインには多段階の空間圧縮戦略が組み込まれた。
まず熱帯植生の特徴に基づき、検索緯度を南北緯 ±30° 以内に限定。これにより、生存するポリゴン数は数百万件から 141,131 件へと激減した。この初期フィルタリングにより全球の 68% の陸地ポリゴンが排除され、計算領域が熱帯地帯内に収束した。
続いて 5km 密度の空間サンプリングを実行してノード数を 51,576 個に圧縮し、さらに 20km の空間クラスタリングによって 23,500 個の島クラスタに分割した。各クラスタ内で3点組み合わせを全挙挙した結果、最終的に 80,690,777 個の候補三角形が生成された。8069万通りの組み合わせにより、直感に依存していた手探りの捜索が、標準的な計算上の全探索問題へと変換された。
図:幾何学的フィルタリングと CUDA カーネル加速を経て許容誤差内に残った候補地点の分布。出典:yassa9 ブログ
GPUによる204ミリ秒の高速スクリーニング
通常の CPU 上で 8069 万個の幾何学的組み合わせを走査するには数十分を要し、これが工学的な最大のエンドツーエンドのボトルネックとなっていた。yassa9 氏は専用の CUDA カーネルを執筆し、各候補三角形の判定処理を独立した GPU 計算スレッドに割り当てた。
僅か数万円クラスのエントリー向けグラフィックボード NVIDIA RTX 3050(VRAM 使用量 5.2GB)上で実行したところ、CUDA カーネルが全8069万回の三角形形状マッチングを完了するのに要した時間はわずか 204.1 ミリ秒だった。瞬間的に 99.8% の無効な組み合わせが排除され、最終的に 158,784 個の候補三角形が残された。
GPU の並列ストリームプロセッサは相互依存のない独立した幾何チェックに極めて適しており、0.2秒のカーネル実行時間によって探索効率が数千倍向上した。
段階的に絞り込む多層データパイプライン
158,784 個の候補目標であっても、依然として人手による検証限界を超えているため、多次元データパイプラインを構築して段階的にフィルタリングを行う必要があった。まずアルゴリズムは空間重複排除を実行し、重複カウントされた隣接三角形を結合して生存目標を 8,915 個に縮小した。
続いて開けた水域のチェックを行い、バウンディングボックスを用いて内陸の湖沼や過密な列島を除外、948 個のノードが残った。写真に写るサンゴ礁に囲まれた特徴と一致させるため、アルゴリズムは海岸線の周囲長と面積比を計算する Polsby-Popper 緊密度指標を導入し、候補数をさらに 213 個まで圧縮した。緊密度計算により、形状が極めて不規則な断裂した海岸線が排除され、広い環礁特徴を持つ島影が保持された。
その後の楕円充填率フィルタリングによって目標は 137 個に減少。この段階でリモートセンシング衛星データと連携し、NDVI 衛星植生指数を用いて候補地点の緑化判定(閾値 0.6)を実施した。高植生指数の適用により、露呈した砂州や植物のない人工構築物が一瞬で取り除かれ、生存候補は 66 個に絞り込まれた。
自動化パイプラインの最後の関門は、Copernicus DEM 30m 標高データの照合である。写真内の P2 島の山頂の起伏と照合し、候補地点に特定の高さを持つ山体が存在することを条件とした結果、最終的に 26 個の候補点に特定された。30m 分解能の標高照合により、平坦な低標高サンゴ礁が大量に排除され、自動化パイプラインの最終打が完了した。
人手による最終確認とミリタリーグレードアルゴリズム
自動化パイプラインによって 8069 万個の選択肢が 26 個にまで圧縮され、残りの検証は人手に委ねられた。yassa9 氏は優先度順に衛星画像を照合し、8番目の候補点を確認した時点でターゲットの特定に成功した。
確定した位置は、ミクロネシア連邦のオアン島(座標 7°21’48.4”N 151°45’20.7”E)。写真の解像度に写っていたリゾートは「Oan Island Resort」であり、ドローン撮影時のカメラ方位は西北西 324.97° であった。
Hacker News コミュニティの議論では、多くのエンジニアがこの解法が巡航ミサイルの TERCOM(地形照合)誘導原理を本質的に再現していると指摘した。また NASA ジェット推進研究所(JPL)も、火星探査車 Mars 2020 Perseverance の着陸時に同様の幾何学的特徴マッチングアルゴリズムを採用し、着陸楕円領域を1桁小さく縮小させている。
この個人実験は、数キロ離れた島の特定であろうと火星表面への精密着陸であろうと、確定的な幾何学的制約を利用して視覚的な曖昧さを抹消する手法が極めて信頼性の高い技術的アプローチであることを証明した。
演算力が経験と直感の壁を打ち破る
882MB の海岸線データから 204 ミリ秒の GPU 計算に至るまで、名もなき無人島を探し出すこの実験は、現代のエンジニアリングにおける問題解決の威力をまざまざと見せつけた。
写真に写された3つの島影の輪郭は、本質的に地球の表面に刻まれた一連の幾何学的経緯度コードである。物理的特徴を計算可能なデータ構造に変換しさえすれば、膨大な未知の空間は演算の轟音の中で瞬時に圧縮される。
GPU による力まかせの探索が厳密な幾何学制約と出会ったとき、従来の経験と幸運に頼った人眼による経路確認モードは、マシンの全探索アルゴリズムによって根本から再構築されつつある。
参考リンク:
- yassa9 ブログ:Geolocating an Island Photo
- Hacker News コミュニティ議論:Geolocating an Island Photo
- gralhix OSINT チャレンジ:Challenge #004