4

赤道の周りに 5 つの静止衛星があり (等間隔ではありませんが、ほぼ等間隔で)、毎日地球の写真を撮っています。各写真の出力は - 驚きです! - 遠くから撮影した球体の写真。

これらの写真を 1 つのテクスチャ マップされた球体に再構成する必要がありますが、これを行う最善の方法がわかりません。主な問題:

  1. 写真は - 明らかに - 球体を見ているため、中心から遠くなるほど大きく歪んでいます。
  2. 1 日のさまざまな時間に撮影された 5 枚の写真の「セット」が何百枚もあります。解決策はプログラムである必要があります-これを手動で行うことはできません:(
  3. 出力プラットフォームは iPad3 です。Open GL ES 2、テクスチャは最大 4096x4096 ですが、デスクトップ GPU ほど強力ではありません。私はシェーダーが苦手です (ただし、OpenGL のプレシェーダーはたくさんやったことがあります)。
  4. 写真自体は高解像度で、5 つのテクスチャすべてを同時にロードできるかどうかはわかりません。また、惑星の表面用に非常に高解像度のテクスチャをロードしました (衛星写真の下)。

私はすでに持っています:球にマッピングされた単一の長方形のテクスチャ(私の球は球にラップされた標準メッシュであり、頂点は表面全体に均等に分散されています)、だから...私は球の5枚の写真を単一の長方形に変換しようとしましたマップ(ただし、これまでのところ成功していません。誰かが「極罪ワープ」を行うことを指摘してくれましたが、これはうまくいくようです)。

また、5 枚の写真からキューブ マップを作成し、特定のピクセルに対してどの写真を読み取るかを巧妙に判断するという、ちょっと変わった方法も考えましたが、完全には確信が持てません。

より良い方法はありますか?私が見落とした何か?または、上記を達成する具体的な方法を誰かが持っていますか?

4

1 に答える 1

0

そこから長方形のテクスチャを作成します。

color summation avg用と count cnt用の 2 つの2Dテクスチャ/配列が必要です。また、 OpenGL/GLSLを使用するとは確信していません。これには、C/C++ の方が優れているように思えます。r,g,b

私は次のようにします:

  1. 目的のテクスチャを空白にします ( avg[][]=0, cnt[][]=0)
  2. 衛星の位置・方位、時刻を取得する

    位置と方向から、写真と同じ方法で地球を投影する変換マトリックスを作成します。次に、時間から回転シフトを決定します。

  3. 地球表面全体をループします

    ネストされた 2 つのループa- 回転と `b - 赤道からの距離。

  4. 行列 + 回転シフト ( -軸)から取得x,y,zして変換しますa,ba

    逆方向にも実行できますa,b,z = f(x,y)が、よりトリッキーですが、より高速で正確です。x,y,z隣接する間を補間することもできます(pixels/areas)[a][b]

  5. ピクセルを追加

    x,y,zが前面にある場合(z>0またはカメラの方向z<0によって異なります)、Z

    avg[a][b]+=image[x][y]; cnt[a][b]++;
    
  6. ポイント#3からのネストされたループの終わり。

  7. 次の写真で #2 に移動
  8. avgテクスチャ全体をループして平均色を復元します

    if (cnt[a][b]) avg[a][b]/=cnt[a][b];
    

[ノート]

  1. コピーされたピクセルが次のとおりかどうかをテストできます。

    昼夜を問わず取得できます (必要なものだけを使用し、両方を混ぜ合わせないでください!!!) 雲 (雪ではなく灰色/白っぽい色だと思います) を判別し、それらを無視することもできます。

  2. 色をあふれさせない

    それを避けるために、r[][],g[][],b[][]代わりに3 つの個別のテクスチャを使用できます。avg

  3. 歪みを避けるために、地球の端に近い領域を無視できます

  4. 照明補正を適用できます

    timeおよびa,b座標から照明を正規化する

それが役に立てば幸い ...

[Edit1] 正射影

したがって、ここで正射影とは何を意味するのかは明らかです。

衛星写真テクスチャ (EUMETSAT)

これはテクスチャを使用しており(ウェブ上でより適切で無料のものを見つけることができません)、レンダリングされたものではなく実際の衛星画像を使用したかったのです...

正射影

これは私の正射影アプリです

  • 赤、緑、青の線は地球座標系 (x,y,z軸)
  • (赤、緑、青)-白っぽい線は衛星投影座標系(x,y,z軸)

ポイントは、処理されたテクスチャの有効な頂点である場合、地球の頂点座標(vx,vy,vz)を衛星座標に変換することです。したがって、テクスチャ座標を遠近法なしで (直交的に) 直接計算します。(x,y,z)z >= 0x,y

たとえばtx=0.5*(+x+1);...xにスケーリングされ、使用可能<-1,+1>なテクスチャが である場合同じtx <0,1>ことがy軸にも当てはまります。ty=0.5*(-y+1);y<-1,+1>ty <0,1>yy

テクスチャ範囲外の頂点を処理している場合z < 0は無視してください...画像でわかるように、テクスチャの外側の境界が歪んでいるため、内側のみを使用する必要があります(たとえば、地球の画像領域の 70%)。テクスチャの中間点からの距離に応じて、ある種のテクスチャ座標補正を行うことができます。これが完了したら、すべての衛星画像投影を 1 つの画像にマージするだけです。

[Edit2]さて、私はそれで少し遊んで、これを見つけました:

  • 私のテクスチャでは逆投影補正がまったく機能しません。後処理された画像である可能性があると思います...
  • 中点距離ベースの補正はいいようですが、使用されるスケール係数は奇数です 4 であるべきときに 6 を掛ける理由がわかりません...

    tx=0.5*(+(asin(x)*6.0/M_PI)+1); 
    ty=0.5*(-(asin(y)*6.0/M_PI)+1); 
    

修正された非線形投影

  • 修正された非線形射影 (asin による)

修正された非線形投影エッジ ズーム

  • 修正された非線形投影エッジ ズーム
  • asin歪みは、テクスチャ座標の修正がない場合よりもはるかに小さい
于 2014-01-08T11:04:47.973 に答える