世界を動かす技術を、日本語で。

幾何学とCUDAプログラミングを用いたランダムな島のジオロケーション

2026年8月19日原文(yassa9.github.io)

概要

  • 本記事は「gralhix004」チャレンジの解法記録
  • 画像メタデータ解析・幾何学的特徴抽出・CUDAによる高速処理を用いたリゾート島の特定
  • OpenStreetMap地物データと多段階フィルタで候補地を絞り込み
  • 形状・植生・標高など追加条件で最終候補を選別
  • 数学的/プログラミング的アプローチによる地理特定手法の詳細解説

gralhix004 | 画像幾何学・CUDAプログラミングによるランダム小島のジオロケーション

  • Sofia Santos | Gralhixが出題した gralhix004 チャレンジ解法の詳細記録
  • 目的:リゾート名、島の座標、撮影時のカメラ方位の特定
  • Google Lens等の画像検索は使わず、数理的・プログラミング的アプローチで分析
  • コード・レポートは GitHub で公開

a] メタデータ調査

  • 画像ファイルの EXIFメタデータ を調査
  • 位置情報・カメラ情報は無し、画像サイズのみ取得

b] 幾何学的フィンガープリントの構築

  • 画像内に 3つの陸地(P0:小島, P1:右, P2:左前/山有り) を認識
  • ドローン撮影のため俯瞰モデルは困難、 三角形の相対距離・角度 を直感で推定
  • クリックGUIツール で各点のピクセル座標を取得、誤差±20%を許容

c] 地球全体からの候補検索

  • OpenStreetMap の「land-polygons-split-4326」(882MB)を利用、全世界の海岸線ベクトルデータ

  • 段階的なヒューリスティクスフィルタを適用

    • (1) 熱帯緯度フィルタ :$-30° \leq \text{latitude} \leq 30°$、約14万地物に絞る
    • (2) 局所密度フィルタ :5km範囲に10個以上の陸地がある候補を除外、5万件に減少
    • (3) クラスタリング :20km以内に2つ以上の隣接地物があるクラスタのみ、2.3万クラスタ抽出
    • (4) トリプレット生成 :各クラスタで3点組合せ生成、合計約8,000万組
      • クラスタ内最大60点にサンプリング、面積分布で小・中・大を均等抽出
    • (5) CUDAによる並列マッチング :各トリプレットをGPUスレッドで独立判定
      • 最小面積をP0、残り2点の向きでP1/P2決定(2Dクロス積利用)
      • 角度・距離比・面積・辺長等がフィンガープリント許容範囲内か判定
      • NVIDIA GeForce RTX 3050 で80万組を200msで処理、約16万件通過
    • (6) 重複除去 :クラスタ重複をセットで排除、約9千組に減少
    • (7) オープン矩形チェック :P0→P1の辺に沿った矩形領域が「開水域」か判定
      • 他の陸地が矩形内にあれば除外、948件に絞り込み

d] サンゴ礁地形判定

  • P0単体の形状・周辺環境で追加フィルタ

    • (1) コンパクトネス :Polsby-Popperスコア0.5以上(円形度指標)
    • (2) マイクロケイ・ハローチェック :半径1.5km以内に0.05km²未満の小島が1つ以上
  • 213件が通過

e] 楕円形状判定

  • 最小回転矩形をあてはめ、 アスペクト比1.05〜2.2フィル率0.589以上 でフィルタ
    • フィル率は「完全楕円」の理論値$\pi/4$の75%以上が条件
  • 137件が通過

f] NDVI植生チェック

  • Earth Search API (Sentinel-2衛星画像)から最新画像取得
  • NDVI(正規化植生指数) を計算し、0.6以上(ヤシ等の植生が十分)で判定
  • 66件が通過

g] 標高・山地チェック

  • P0は「低平なサンゴ礁」、P2は「山地」条件
  • カメラ方位は P1/P2への方位の二等分線 で決定
  • 2〜20km範囲で標高サンプリングし、山地の存在を確認

gralhix004 解法まとめ

  • 画像メタデータ →無効
  • 幾何学的特徴(3点三角形) を抽出し、 地球全体の地物データ と突合
  • 多段階フィルタ (緯度・密度・クラスタ・形状・植生・標高)で候補を絞り込み
  • GPUプログラミング (CUDA)で大規模データを高速処理
  • 最終候補 からリゾート名・座標・カメラ方位を特定

技術的ポイント

  • OpenStreetMap地物データ の大規模処理
  • NumPy, SciPy, CUDA による並列計算
  • 画像幾何学・形状解析 (コンパクトネス、アスペクト比、フィル率)
  • Sentinel-2衛星データAPI 活用による植生判定
  • 標高データ 利用による地形判定

まとめ・所感

  • Google Lens等の自動画像検索を使わず、純粋な幾何学・プログラミング・地理データ解析で解決
  • ヒューリスティクスと直感 も多用し、膨大な試行錯誤と実装改良を繰り返した
  • 地理情報科学・GPUプログラミング・衛星データ解析 の実践的応用例
  • 全コード・レポートはGitHubで公開中、再現・検証可能

参考リンク

  • GitHubリポジトリ (コード・レポート・実行手順掲載)
  • Earth Search API (Sentinel-2データ)
  • OpenStreetMap land-polygons-split-4326 (地物データセット)
  • Geoawesome Blog (NDVI画像サンプル)

結論

  • 本手法により リゾート名・座標・カメラ方位 すべてを 数学的・プログラミング的に特定可能
  • 今後も 地理特定・画像解析 分野で応用が期待されるアプローチ

Hackerたちの意見

OpenStreetMapのデータは、OSINT目的には本当に神の恵みだね。人口が多いエリアでは、道路やお店、電線みたいな機能がもっとあって、検索にも役立つよ。

うん、前に聞いたことあるけど、実際に使ってみるまでその全貌は知らなかった。すごいね!

クロード / ジェミニ + OSMターボはすごいよ!「ドイツで5棟以上の3階建ての建物に囲まれたバス停を探して」みたいな自然言語のクエリができるんだ。

ドローンやミサイルに関しては、この技術は「地形輪郭マッチング」として知られてるんだ。地形の輪郭を光学的に測定すれば、GNSSとは違ってRF妨害に影響されないナビゲーションができるよ。 https://en.wikipedia.org/wiki/TERCOM

へぇ、そんなのがあったんだ!ありがとう、絶対調べてみるよ。

これは効果的で、実は驚くほど古い技術なんだ。1960年代には巡航ミサイルに使われてたんだよ。GPSや衛星ナビゲーションの数十年前から存在してたんだ。あの時代のエンジニアたちが、限られた計算能力で何を成し遂げたかにはいつも驚かされるよ。例えばSAGEを見てみて。面白い事実として、トマホークミサイルでのTERCOMの使用は、デザートストーム作戦での使用を制限したんだ。実際の地形を避けるようにルートを計画しなきゃいけなかったからね、何百マイルも続く平坦な砂漠ではなくて。

素晴らしい記事で、楽しく読ませてもらった!HNの「良き時代」を思い出すね。あの頃は人間が書いた投稿が多くて、君のような特定の文体があった。もう少し地理推測を使って結果を絞り込むことができたかも、あるいは最後の100件くらいを目視で確認するのもアリだったね ;-)

うん、ありがとう :D ちょっとしたアイデアを地理推測から借りて、検索を緯度-30度から+30度の島に絞ったんだ。空の様子と画像のトロピカルな雰囲気を基にして、うまくいったよ!

同意!素晴らしい仕事だね!

本当に素晴らしい記事だね!OP、複雑な問題を分かりやすく整理して、解決策をまとめるのが上手だったよ。

ありがとう、感謝するよ!

これ、めっちゃいいね。数ヶ月前に似たようなものに取り組んでたんだ。TERCOMと死角航法に基づいた汎用ナビゲーションシステムだよ。https://github.com/deepanwadhwa/anumaan

Hacker Newsで議論の続きを見る