Phân cụm raster bằng cách sử dụng QGIS


10

Tôi đang tìm cách chuyển đổi một raster phân loại thành đa giác dựa trên các cụm không gian trong mỗi lớp. Để các cụm được coi là hợp lệ, tôi cần chúng bao gồm tỷ lệ phần trăm tối thiểu của các ô từ một trong các lớp.

Ví dụ: Một khu vực được tạo thành từ 70% (hoặc nhiều hơn) các ô của lớp "1" sẽ được coi là một cụm của lớp "1" mặc dù khu vực đó được trộn lẫn với 30% các ô tin vào các lớp khác. Do đó, phân tích phân cụm nên dựa trên khoảng cách giữa các ô của cùng một lớp.

Một tùy chọn khác có thể là căn cứ vào việc phân cụm trên một số lượng ô tối thiểu trong một lớp nhất định, cùng với định nghĩa về vùng tìm kiếm tối đa.

Ví dụ: Trong một khu vực được chỉ định, cần có 100 ô thuộc "lớp 1" để được coi là một cụm.  

Hầu hết các công cụ liên quan đến phân cụm dường như chỉ hoạt động cho các vectơ. Tôi đã xem xét phân tích cụm công cụ SAGA nhưng nó không thực sự phù hợp với mục đích của tôi. Bất kỳ ý tưởng để giải quyết điều này hoặc công cụ nào khác có thể hữu ích?


Bạn có thể chuyển đổi raster thành một vector và sử dụng các công cụ phân cụm vector.
csk

Đó là một tùy chọn, nhưng tôi nghĩ rằng đó là cách dễ dàng hơn để thực hiện phân tích ở định dạng raster nếu có thể. Chuyển đổi sang vectơ có thể sẽ tạo ra các đa giác trong đó nhiều chi tiết bị mất trong liên kết các rastercell, hoặc cách xử lý quá nhiều điểm quá nhiều (Tập dữ liệu lớn).
Spiran

3
Tôi biết đây không phải là giải pháp QGIS nhưng bạn có thể sử dụng python hoặc R để đưa ra chức năng lân cận để bạn tạo một raster mới trong đó nó nhìn vào từng ô và nếu> 70% các ô trong vùng lân cận thuộc về một lớp sau đó tế bào đó được phân loại lại cho lớp đó?
Liam G

Điều đó có thể làm việc chắc chắn, cảm ơn! Tôi mới dùng Python nhưng nó đáng để thử.
Spiran

Câu trả lời:


5

Nếu bạn muốn giải quyết vấn đề này trong "logic raster", thì có một vài bộ lọc mà bạn có thể xem xét. Sự lựa chọn tốt nhất sẽ phụ thuộc vào sự phân bố không gian các pixel của từng lớp bên trong các giá trị "nền" của bạn, nhưng đây là hai giải pháp tiềm năng:

nếu các bản vá mà bạn muốn xóa tương đối lớn, thì bạn nên sử dụng "sàng" (raster> phân tích> sàng trong QGIS 3.2, dựa trên gdal_sieve.py).

Tập lệnh gdal_sieve.py xóa các đa giác raster nhỏ hơn kích thước ngưỡng được cung cấp (tính bằng pixel) và thay thế chúng bằng giá trị pixel của đa giác lân cận lớn nhất. Kết quả có thể được ghi lại vào băng raster hiện có hoặc sao chép vào một tệp mới.

Nếu bạn có một cái gì đó giống như hiệu ứng "muối và hạt tiêu" (nhiều pixel bị cô lập của các lớp khác nhau, nhưng chỉ một vài pixel trên các đường nhỏ, thì bạn nên sử dụng bộ lọc đa số (ví dụ: đi tới các công cụ bổ sung từ GRASS> raster> r. hàng xóm> chọn tùy chọn "chế độ") Lưu ý rằng bộ lọc này sẽ (hơi) ảnh hưởng đến ranh giới của bạn.

r.neighbor - Làm cho mỗi loại giá trị ô là một hàm của các giá trị thể loại được gán cho các ô xung quanh nó và lưu trữ các giá trị ô mới trong lớp bản đồ raster đầu ra

Bạn sẽ tìm thấy cùng một bộ lọc (bộ lọc Đa số, các lớp sàng) và các bộ lọc khác (hình thái) trong các công cụ SAGA (SAGA> bộ lọc raster) nếu bạn thích


Đây thực sự là khá nhiều cách tôi giải quyết nó. Về cơ bản bằng cách sử dụng công cụ phân tích neigborhood cỏ cùng với một số tính toán ở bên cạnh. Quên gửi giải pháp mặc dù, cảm ơn lớn cho radouxju đầu vào của bạn.
Spiran
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.