Làm cách nào để tổng hợp các giá trị pixel trong QGIS?


10

Tôi cần biết giá trị của tổng của tất cả các pixel trong raster. Tuy nhiên, trong phần Thống kê của tab Siêu dữ liệu trong Thuộc tính, bên dưới Tổng của tất cả các ô, nó luôn chỉ ra 0,00. Tôi đã thử với các định dạng raster khác nhau nhưng không có kết quả. Tôi đang làm gì sai? Làm thế nào tôi có thể nhận được giá trị này?


Tôi quan tâm đến việc bạn áp dụng phương pháp này, nếu bạn không ngại chia sẻ.
MLowry

Hãy chắc chắn kiểm tra các tính toán của bạn, tôi đã kiểm tra nhanh với một raster chứa các giá trị bị thiếu, trung bình thực sự được tính trên tất cả các ô raster, tuy nhiên nhân trung bình này với chiều rộng và chiều cao của raster của bạn không dẫn đến một tổng chính xác, bạn nên sửa cho số lượng ô raster bao gồm các giá trị bị thiếu!

Câu trả lời:


9
  1. Tạo đa giác bằng Vector> Công cụ nghiên cứu> Đa giác từ phạm vi lớp. lớp ở đây là raster trong câu hỏi.
  2. Kích hoạt / Cài đặt Plugin thống kê Zonal.
  3. Sử dụng plugin thống kê Zonal trong đó raster là cái có tổng là bắt buộc và đa giác là cái bạn đã tạo từ phạm vi lớp. Nhập tiền tố cột đầu ra (nói thống kê_). Chạy plugin.
  4. Mở bảng thuộc tính của đa giác. Bây giờ bạn có cột stats_sum cùng với các cột khác có tiền tố stats_.
  5. Tôi đã kiểm tra các giá trị trong GRASS GIS và kết quả khớp hoàn hảo.

Điều này không hoạt động trong QGIS 2.18. Tôi không chắc làm thế nào điều này có thể đã hoạt động, vì "Đa giác từ phạm vi lớp" lấy một lớp vectơ chứ không phải raster làm đầu vào. Các lớp raster không xuất hiện trong danh sách thả xuống và nếu bạn tải lớp raster bên ngoài, lớp Extent kết quả sẽ trống.
Stephen Bosch

Làm việc cho tôi trong 2.18.
mitchus

4

Trong QGIS 2.x, bạn có thể lấy số liệu thống kê raster cho toàn bộ lớp (bao gồm tổng của tất cả các giá trị pixel trong băng tần) bằng cách sử dụng thuật toán thống kê lớp Raster trong hộp công cụ Xử lý.

Gia công | Hộp công cụ (hộp kiểm)

sau đó đi đến hộp công cụ xử lý:

Thuật toán địa lý của QGIS | Công cụ raster | Thống kê lớp raster

Tạo số liệu thống kê cho lớp bạn muốn kiểm tra. Các kết quả sau đó được lưu trữ trong siêu dữ liệu của lớp, có thể truy cập bằng cách nhấp chuột phải vào lớp và chọn Thuộc tính.


1

Tôi hiểu câu hỏi là, làm thế nào để tôi có được tổng của tất cả các giá trị pixel của raster? Một cái gì đó giống như chạy Thống kê trên các thuộc tính của một vectơ. Người ta có thể làm điều này một cách dễ dàng thông qua lập trình. Tôi có thể nghĩ ra một cách khác để làm điều này thông qua QGIS. Nó sẽ không hiệu quả và hơi không chính xác, nhưng nó sẽ hoạt động.

  • Tạo một lớp điểm đại diện cho từng pixel của raster. Bạn có thể làm điều này thông qua Vector -> Công cụ nghiên cứu -> Điểm thông thường. Sử dụng số điểm như x_size * y_size. Vì vậy, đối với raster có chiều rộng 100 px x 100px, hãy sử dụng 10000. Chỉ định độ lệch của (độ phân giải pixel) / 2, do đó bạn đang lấy mẫu một tâm của pixel.
  • Tiếp theo, cài đặt plugin Point Sampling. Sử dụng plugin này, bạn có thể lấy mẫu raster tại tất cả 10000 điểm và nhận giá trị thuộc tính là giá trị pixel.
  • Chạy Vector -> Phân tích -> Thống kê cơ bản trên vectơ kết quả để lấy tổng.

1

Bạn có thể sử dụng gdalinfo để lấy số liệu thống kê raster, ví dụ:

gdalinfo -stats filename.tif

Điều này sẽ cung cấp cho bạn giá trị pixel trung bình và kích thước raster tính bằng pixel. Bạn cũng có thể lấy dữ liệu này từ tab Thuộc tính -> Siêu dữ liệu.

Sau đó, đó là một câu hỏi về số học: giá trị trung bình x (chiều cao tính bằng pixel x chiều rộng tính bằng pixel).

Nick.


4
Điều đó là sai. Đầu tiên, các số liệu thống kê này không phải lúc nào cũng có mặt (tùy thuộc vào ứng dụng đã ghi tệp) và nếu chúng có mặt, bạn không thể chắc chắn rằng chúng thực sự chính xác. Thứ hai, phép nhân bỏ qua khả năng không có giá trị Dữ liệu (trong trường hợp này tính toán này sẽ sai).
Robert Hijmans

0

Bạn có thể sử dụng 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

Tôi hy vọng tôi đã có bạn đúng; Tôi đã cố gắng xây dựng lại vấn đề của bạn với một Raster của tôi. Tổng của tất cả các pixel trong raster là x-pixel * y-pixel, phải không? Giá trị này bạn có thể nhận được theo 2 cách: 1) Nhấp chuột phải vào Tệp thực tế (một tiff trong trường hợp của tôi), cửa sổ chi tiết sẽ cung cấp thông tin này 2) Bên trong Gis nhấp vào Raster-> Khác-> Thông tin. Chọn tập tin của bạn-> chỉnh sửa-> ok. Sau đó, bạn nên hai giá trị, phải được nhân lên. Kết quả là tổng của tất cả các pixel trong raster.


2
Sai lầm. Điều đó sẽ cung cấp cho bạn số lượng tế bào. Không phải tổng giá trị ô
Robert Hijmans
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.