概要
- 本記事は「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画像サンプル)
結論
- 本手法により リゾート名・座標・カメラ方位 すべてを 数学的・プログラミング的に特定可能
- 今後も 地理特定・画像解析 分野で応用が期待されるアプローチ