Xác định lại giá trị nốt bằng 0 trong QGIS?


7

Tôi có một hình ảnh mà tôi đã cắt bằng đa giác AOI. Vùng đường viền được đặt thành pixel value = 0 và tôi có giá trị nốt là -32768. Tôi muốn xác định lại giá trị nốt bằng không. Tôi đã từng làm điều này với ArcMap một cách dễ dàng trong máy tính raster, nhưng trong QGIS tôi không thấy làm thế nào tôi có thể làm điều đó. Có ý kiến ​​gì không?


2
Bạn có muốn nó hoàn toàn để trực quan hóa hay bạn cần đặt nó thành null trong đó bạn sẽ tiến hành các tính toán raster tiếp theo?
maning

Câu trả lời:


13

Trong QGIS, bạn có thể sử dụng Máy tính Raster với phép tính sau:

("your_raster" != -32768) * "your_raster"

Với phép tính này, nếu giá trị ô là -32768, bạn sẽ nhận được 0 trong ô đó và nếu nó khác với -32768, ô sẽ giữ giá trị mà nó có.


1
Giải pháp tốt đẹp. Chỉ cần một lưu ý cho những người khác đang thử điều này: Trong QGIS, giá trị nốt cho một lớp có thể được tìm thấy dưới Thuộc tính lớp, sau đó là Thông tin (mục trên cùng), sau đó cuộn xuống Dải.
Giăng

Lưu ý rằng điều này không hoạt động đối với các giá trị như -3,40282e + 38.
geordie

12

Giải pháp đơn giản nhất một bước và, IMO, đáng tin cậy nhất để phân loại lại NoData thành 0 là sử dụng công cụ Reclassify Grid Values ​​(SAGA) trong hộp công cụ xử lý.

Sau khi chọn raster sẽ được phân loại lại, chỉ cần cuộn xuống dưới cùng của hộp thoại, đảm bảo replace no data valueshộp được chọn. Giá trị mặc định là 0 (nhưng dĩ nhiên bạn có thể thay thế thứ khác). Sau đó bỏ chọn replace other valueshộp và để tất cả các trường khác một mình (vì vậy tất cả những gì bạn đang làm là đảm bảo một hộp được chọn và bỏ chọn một hộp khác - không yêu cầu cài đặt nào khác).


1
Tôi đồng ý. Không có gì khác thực sự làm việc cho tôi (giá trị nốt của tôi là khoảng -3,4e + 38).
ArMoraer

Có chính xác vấn đề tương tự như @ArMoraer. Đây là giải pháp dễ nhất, hoạt động hoàn hảo.
Rauni

Tôi đã sửa lỗi gật đầu thành 0, nhưng vào thời điểm đó, nó đã áp dụng một số thay đổi nhỏ cho các giá trị raster khác của tôi
ZKB

Thật không may, phương pháp này không còn hoạt động trong QGIS 3.8. Biểu mẫu xử lý sẽ không thực thi mà không điều chỉnh tất cả các cài đặt khác. Lỗi: "Sai hoặc thiếu giá trị tham số: ...."
geordie

11

Tôi tìm thấy một giải pháp cho việc này. Đầu tiên tôi chuyển đổi hình ảnh thành một lớp vrt (gdalbuildvrt) với -srcnodata 0, sau đó tôi dịch nó trở lại thành một tệp tif với gdal_translate -a_nodata. Làm việc tốt :)


8

Tôi đoán bạn có thể làm điều đó với máy tính raster .

Nếu không có sự trợ giúp của plugin GRASS và r.null bạn sẽ làm điều đó một cách dễ dàng. Tùy chọn đó có nghĩa là trước tiên bạn sẽ tạo một bộ bản đồ GRASS để nhập raster của bạn vào.


5
bạn có thể giải thích làm thế nào để làm điều đó với máy tính raster không?
rudivonstaden

1
r.nullđã làm điều đó cho tôi.
metasequoia

8

Có cùng một vấn đề, cuối cùng tôi đã sử dụng Python trực tiếp - bạn có thể phải điều chỉnh numpy.where cho mục đích cụ thể của mình. Trong trường hợp bên dưới, các giá trị pixel được giữ nguyên nếu chúng là> = 0, tất cả các pixel khác - trong trường hợp này chỉ là các giá trị có giá trị không có dữ liệu - được đặt thành "0"

import gdal, gdalconst, numpy
maskfile = gdal.Open('C:\Users\max\Desktop\Baltic2.tif', gdalconst.GA_Update)
maskraster = maskfile.ReadAsArray()
maskraster = numpy.where((maskraster >= 0), maskraster, 0 ) 
maskband = maskfile.GetRasterBand(1)
maskband.WriteArray( maskraster )
maskband.FlushCache()


1

Điều làm việc cho tôi là xuất tệp raster dưới dạng tệp .asc, sau đó mở trong trình soạn thảo văn bản và sử dụng find và thay thế để thay thế giá trị NoData cũ bằng giá trị mà tôi muốn.


1

Trong trường hợp của tôi, đó là hình ảnh vệ tinh tôi cần để chuyển đổi thành 8 bit và nó không xuất ra giá trị dữ liệu nào khi sử dụng -scale trong gdal_translate.

Tôi đã có thể giải quyết vấn đề bằng cách xuất raster (lớp nhấp chuột phải -> xuất -> lưu lớp dưới dạng ...) vào một tệp mới dưới dạng dữ liệu được hiển thị (hộp kiểm ở đầu cửa sổ hộp thoại).


0

Đối với kịch bản python, bạn có thể sử dụng dòng sau trước WriteArray.

maskband.SetNoDataValue(0)
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.