複数のラスターをより均一にする


10

継続的に接続されるはずのラスターをいくつかインポートしましたが、その代わりに、それらのラスター間に境界付きグリッドが作成されます。これは個々のラスター間のキャリブレーションの問題だと思うかもしれませんが、データのように実行する方法はわかりません。

すべてのラスターの全体がよりスムーズになるように、誰かが以前にこのようなことを経験していて、おそらく可能な解決策を知っているでしょう。

これらはすべて地理的に接続されているはずです。したがって、正方形の「境界線」の問題。

WindowsでQGISを使用しています。

ここに画像の説明を入力してください

回答:


11
  1. ラスターを1つにマージしてみてください。

    • ツールバーから:

      ラスター>その他>マージ

    • 処理ツールボックスから:

      GDAL / OGR>その他>マージ

    • GDALコンソールから:

      gdal_merge.py -o merged.tif input1.tif input2.tif
      

  1. または、仮想ラスターを作成します。

    • ラスター>その他>仮想ラスターの構築

1
+1は、仮想ラスターを構築します。これにより、単一の結合画像のように機能する非常に小さなファイルが作成されます。
Alexandre Neto

@AlexandreNeto-おかげで、個別のラスターと比較したファイルサイズの違いはかなり驚異的である可能性があることに気づきました=)
Joseph

マージまたはビルド仮想ラスターを選択すると、プロセスを開始できなかったというエラーメッセージが表示されます。ポーグラムが存在しないか、適切な権利がありません。したがって、すべてのラスターを[レイヤー]メニューに読み込み、そこから選択することで、マージまたはビルドを成功させました。Gdal_merge.batコマンドラインが長すぎる可能性があり、少なくともinputx.tifが操作を1000 x(異なるラスター)で一時停止できる
MichaelR

@Michael-奇妙なエラーですが、結果を得る別の方法を見つけたことをうれしく思います:)
Joseph

1
あなたが養うことができ@Michael ATコマンドラインgdalbuildvrtではなく、その後の引数として、多くの画像ファイルを与える、ファイルのリストを含むファイルのファイル名で:gdalbuildvrt -input_file_list my_liste.txt doq_index.vrt
Detlev

3

このモザイク化された外観の理由は、各単一のイメージが、イメージの最小値から最大値まで引き延ばされたグレースケールで描画され、グローバルな最小値/最大値を超えて描画されないためです。すべての画像を1つにマージする場合、最小/最大は1つだけです。同じことがVRTにも当てはまります。VRTはすべての画像を1つとして扱うためです(VRTファイルを確認すると、一般的な統計が表示されます)。

マージとVRTの両方がオプションではない場合、次のスクリプトが役立つ場合があります。

最初のループでは、すべてのレイヤーを反復処理して、ラスターを選択し、それらの最小/最大間隔の推定値を取得します。これは、QGIS自体が機能する方法です。これらの最小/最大値から、グローバルな最小/最大を計算します

2番目のループでは、すべてのラスターレイヤーのレンダラーが、グローバルな最小/最大の間隔でグレースケールが拡大されるように構成されています。

gmin = 9999
gmax = -9999
layers = []
# loop over all layers, take rasters and estimate min, max values
for layer in iface.mapCanvas().layers():
    if isinstance(layer, QgsRasterLayer):
        # change percentages and sample size to increase or decrease accuracy
        min_max = layer.dataProvider().cumulativeCut(1, 0.02, 0.98, theSampleSize=250000)
        gmin = min(gmin, min_max[0])
        gmax = max(gmax, min_max[1])
        layers.append(layer)

# for all rasters create a single band gray scale renderer with 
# gray scale stretched across the interval [gmin..gmax]
for rasterlayer in layers:
    renderer = QgsSingleBandGrayRenderer(rasterlayer.dataProvider(), 1)
    # take the first band (0)
    ce = QgsContrastEnhancement(rasterlayer.dataProvider().dataType(0))
    ce.setContrastEnhancementAlgorithm(QgsContrastEnhancement.StretchToMinimumMaximum)
    ce.setMinimumValue(gmin)
    ce.setMaximumValue(gmax)
    renderer.setContrastEnhancement(ce)

    rasterlayer.setRenderer(renderer)

# refresh canvas to show changes
iface.mapCanvas().refresh()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.