幾何学とCUDAで離島を特定する手法

原題: Geolocating a random island using geometry and CUDA programming

なぜ重要か

OSINTと幾何学的アルゴリズム・GPU並列処理を組み合わせた地理特定手法は、位置情報解析や地理空間インテリジェンス分野における実用的な応用可能性を示している。

ブログ「yassa9.github.io」が2026年8月16日、OSINT課題「gralhix #004」に対し、Google Lensを使わず幾何学的解析とCUDA GPUプログラミングで離島を特定した手法を公開した。OpenStreetMapの全球海岸線ベクターデータ(882MB)を用い、熱帯緯度フィルタや密度フィルタなど複数の条件を組み合わせて候補を絞り込んだ。

Sofia Santosが作成したOSINT課題「gralhix #004」は、リゾートが建つ島の写真から(a)リゾート名、(b)島の座標、(c)撮影時のカメラの方角を答えるものだ。筆者はGoogle Lensに頼らず、数学とプログラミングで解くアプローチを選択した。

【メタデータ確認】まずexiftoolでPNG(実態はWebP lossless)を解析したが、EXIF・GPS・カメラ情報はいずれも存在しなかった。

【フィンガープリント生成】写真には3つの陸塊(P0:当該小島、P1:右の島、P2:山頂のある左前方の島)が写っている。ドローン撮影のため高度推定が不可能なため、俯瞰視点の透視変換は断念し、3島が形成する三角形の相対距離と角度を「指紋」として採用した。専用GUIツール「01_triangle_gui.py」でピクセル座標を記録し、±20%の許容誤差帯を設定した。

【候補絞り込みフィルタ】データセットにはOpenStreetMapの「land-polygons-split-4326」(WGS84座標、全球海岸線ベクター)を使用。以下の4段階フィルタを適用した。

①熱帯緯度フィルタ(-30°〜+30°):141,131ポリゴンが通過。②局所密度フィルタ(半径5km以内の隣接重心数≦10):51,576件に削減。③クラスタリング(20km以内に2個以上の隣接点を持つ点群):23,500クラスターに絞込み。④三角形トリプレット生成:各クラスターから3点の組み合わせを生成(C(n,3))。クラスターが大きい場合はサイズ順に最大60点を層別サンプリングして組み合わせ爆発を抑制した。

これらのフィルタ設計は「直感と試行錯誤を数日かけて繰り返した」と筆者は述べている。最終的な照合にはCUDA GPUプログラミングを活用して高速化した。コード全体とレポートはGitHubで公開されている。

出典

yassa9.github.io — 元記事を読む →