QGISでピクセル値を合計するにはどうすればよいですか?


10

ラスター内のすべてのピクセルの合計値を知る必要があります。ただし、[プロパティ]の[メタデータ]タブの[統計]セクションでは、[すべてのセルの合計]で常に0.00を示しています。私は役に立たないように異なるラスター形式で試してみました。何が悪いのですか?この値を取得するにはどうすればよいですか?


共有してもかまわない場合は、この方法の適用に興味があります。
MLowry

必ず計算を確認してください。欠落している値を含むラスターで簡単に確認しました。実際にはすべてのラスターセルに対して平均が計算されていますが、この平均にラスターの幅と高さを掛けると、正しい合計が得られません。欠損値で構成されるラスターセルの量を修正する必要があります!

回答:


9
  1. レイヤーの範囲からベクター>リサーチツール>ポリゴンを使用してポリゴンを作成します。ここで、レイヤーは問題のラスターです。
  2. ゾーン統計プラグインをアクティブ化/インストールします。
  3. ゾーンの統計プラグインを使用します。ラスターは合計が必要なもので、ポリゴンはレイヤーの範囲から作成したものです。出力列の接頭辞(たとえば、stats_)を入力します。プラグインを実行します。
  4. ポリゴンの属性テーブルを開きます。これで、stats_sum列と、stats_プレフィックスを持つ他の列ができました。
  5. GRASS GISで値を確認したところ、完全に一致しました。

これはQGIS 2.18では機能しません。「レイヤー範囲からのポリゴン」では、入力としてラスターではなくベクターレイヤーが使用されるため、これがどのように機能したかはわかりません。ラスターレイヤーはドロップダウンリストに表示されず、ラスターレイヤーを外部から読み込んだ場合、結果のエクステントレイヤーは空になります。
スティーブンボッシュ2017

2.18で動作します。
ミッチャス

4

QGIS 2.xでは、処理ツールボックスのラスターレイヤー統計アルゴリズムを使用して、レイヤー全体(バンド内のすべてのピクセル値の合計を含む)のラスター統計を取得できます。

処理| ツールボックス(チェックボックス)

次に、処理ツールボックスに移動します。

QGIS地理アルゴリズム| ラスターツール| ラスターレイヤーの統計

検査するレイヤーの統計を生成します。結果は、レイヤーメタデータに保存されます。これは、レイヤーを右クリックして[プロパティ]を選択することでアクセスできます。


1

「ラスターのすべてのピクセル値の合計を取得するにはどうすればよいですか?」ベクトルの属性に対して統計を実行するようなもの。これはプログラミングによって簡単に行うことができます。QGISを介してこれを行う別の方法を考えることができます。これは非効率的で少し不正確ですが、機能します。

  • ラスターの各ピクセルを表すポイントレイヤーを作成します。これは、ベクター->リサーチツール->通常のポイントから行うことができます。ポイント数をx_size * y_sizeとして使用します。したがって、幅100ピクセルx高さ100ピクセルのラスターの場合は、10000を使用します。(ピクセル解像度)/ 2のオフセットを指定して、ピクセルの中心をサンプリングします。
  • 次に、ポイントサンプリングプラグインをインストールします。このプラグインを使用すると、すべての10000ポイントでラスターをサンプリングし、ピクセル値である属性値を取得できます。
  • 結果のベクトルに対してVector-> Analysis-> Basic Statisticsを実行して、合計を取得します。

1

たとえば、gdalinfoを使用してラスター統計を取得できます。

gdalinfo -stats filename.tif

これにより、平均ピクセル値とピクセル単位のラスターサイズが得られます。プロパティ->メタデータタブからこのデータを取得することもできます。

次に、算術の問題です。平均値x(ピクセル単位の高さxピクセル単位の幅)。

ニック。


4
それは間違いです。まず、これらの統計は常に存在するわけではなく(ファイルを書き込んだアプリケーションによって異なります)、存在する場合、それらが実際に正しいかどうかを確認できません。第2に、乗算ではデータ値がない可能性を無視します(この場合、この計算は正しくありません)。
Robert Hijmans、2015年

0

あなたはpythonを使うことができます:

import gdal
import numpy as np
ds = gdal.Open(r'C:\somefolder\someraster.tif')
band1 = ds.GetRasterBand(1).ReadAsArray()
s = np.sum(band1)
print(s)

-1

私はあなたが正しいと思います。私のラスターで問題を再現しようとしました。ラスター内のすべてのピクセルの合計は、xピクセル* yピクセルですよね?この値は2つの方法で取得できます。1)実際のファイルを右クリックします(私の場合はtiff)。詳細ウィンドウにこの情報が表示されます。2)Gis内で[ラスター]-> [その他]-> [情報]をクリックします。ファイル->編集-> OKを選択します。次に、2つの値を乗算する必要があります。結果は、ラスター内のすべてのピクセルの合計です。


2
違う。それはあなたに細胞の数を与えるでしょう。セル値の合計ではありません
Robert Hijmans、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.