Thực hiện giảm tiếng ồn raster và làm mịn cạnh?


22

Tôi có một hình ảnh raster như thế nàyHình ảnh để quét

Tôi muốn xóa điểm nhiễu bị cô lập và làm mịn cạnh (giả sử các điểm đơn màu trắng và tôi muốn các cạnh của thực thể trông trơn tru). Làm thế nào tôi có thể làm điều này trong ArcGIS hoặc trong R?

Kích thước ô là 30 * 30.

Câu trả lời:


15

Các hoạt động hình thái Mở rộngThu hẹp đã được tạo ra cho loại xử lý này. Sử dụng ArcGIS (hoặc GRASS hoặc Mathicala ) vì Rthư viện "raster" của quá chậm.


Thông thường, nó giúp thử nghiệm một chút với các tham số: bạn phải quyết định cần mở rộng và thu nhỏ bao nhiêu để làm sạch hình ảnh; và thông thường bạn muốn làm ít nhất có thể, bởi vì mỗi thao tác có xu hướng làm mịn một số chi tiết sắc nét. Đây là một chuỗi hoạt động tốt để loại bỏ phần lớn "nhiễu" rõ ràng trong khi vẫn duy trì hầu hết các chi tiết trong "thực thể". "Mở rộng" và "thu nhỏ" đều có liên quan đến các tế bào trắng , do đó, việc mở rộng khiến chúng phát triển ra bên ngoài và co lại làm cho các tế bào đen xâm lấn vào các vùng trắng.

Bảng hình ảnh

Cột "khác biệt" sử dụng màu sắc để làm nổi bật sự khác biệt giữa hình ảnh bắt đầu và kết thúc ở mỗi bước: màu xanh lam cho màu đen chuyển sang màu trắng và màu cam cho màu trắng chuyển sang màu đen.

Nếu các phần còn lại lớn hơn cần được loại bỏ, điều đó có thể được thực hiện tốt nhất với Regiongroup để xác định chúng, sau đó chúng có thể được xóa sạch thông qua phân loại lại. Đây là một tùy chọn ngay từ đầu, nhưng một chút làm sạch ban đầu với ExpandShrinklàm giảm công việc và cung cấp độ mịn mong muốn.


Ngẫu nhiên, tôi đã chọn để làm cho số tám hình ảnh trong hình minh họa này với Mathematica lệnh vì họ là như vậy đơn giản, dễ dàng và nhanh chóng để thực hiện:

i = Import["http://i.stack.imgur.com/umDg7.png"];
l = Dilation[k = Erosion[j = Dilation[i, 2], 3], 1];      (* This does all the work *)
delta = ColorCombine /@ {{i, j}, {j, k}, {k, l}, {i, l}}; (* Compares images *)

Quy trình làm việc trong ArcGIS là như nhau nhưng cú pháp sẽ dài hơn. Nếu bạn thực sự muốn sử dụng R, hãy tải thư viện "raster" và khai thác focalFilterđể tạo các hàm để thực hiện việc mở rộng và thu hẹp. Sau đó chờ khoảng một phút để thực hiện các thao tác ....


Xin chào! Nếu bạn không phiền, bạn có thể gửi cho tôi thông tin liên lạc của bạn không? Tôi muốn công nhận bạn trong nghiên cứu của tôi. Cảm tạ! @whuber
Đã xem

Bạn có biết các lệnh tương đương trong GRASS không?
Richard

1
@Richard Tôi chắc chắn có nhiều cách sáng tạo để thực hiện các thao tác này trong GRASS, nhưng r.neighbor có vẻ rất phù hợp với nhiệm vụ.
whuber

12

Sử dụng tiện ích mở rộng phân tích không gian, bạn có thể sử dụng một số công cụ Tổng quát hóa . Một số trong số chúng thực hiện các nhiệm vụ tương tự, vì vậy bạn có thể cần phải chơi xung quanh với một vài người để có được kết quả như bạn muốn. Nhưng, tôi sẽ xem xét công cụ Bộ lọc Đa số và công cụ Boundary Clean .

Đây là một trang về các khái niệm của hai công cụ này.

Tôi không chắc chắn cách thực hiện các tác vụ này trong R, nhưng đây là bài viết về cách thực hiện Bộ lọc Đa số bằng GRASS GIS.


2

Về cơ bản, đây là một biến thể cho câu trả lời của @ whuber và sử dụng Khoảng cách Euclidian để mở rộng và thu hẹp ranh giới raster để làm phẳng các góc nhọn của raster, được thể hiện bằng quy trình thu nhỏ mở rộng, sử dụng số lượng tế bào để tăng / lấn. Mặc dù Khoảng cách Euclidian bắt chước Mở rộng, không thể đưa ra giá trị âm để lấn chiếm / thu hẹp. Bí quyết là phát triển một quy trình lặp để lấy tiêu cực của raster Euclidian Khoảng cách và phát triển nó. Dưới đây là các bước cho hình ảnh mẫu đã cho và ảnh chụp nhanh để làm rõ.

  1. Phân loại lại raster để chỉ giữ 1s (ô trắng)

  2. Áp dụng khoảng cách eidianidian cho khoảng cách hai ô (trong trường hợp này là 60 mét) cho raster được phân loại lại

  3. Lấy tiêu cực của raster mở rộng bằng cách sử dụng Reclassify (các ô có giá trị sẽ nhận được NODATA và NODATA sẽ được chuyển thành 1) hoặc các toán tử Con và IsNull của Raster Calculator

  4. Áp dụng Khoảng cách Euclidian một lần nữa cho raster âm này với cùng khoảng cách (60 m)

  5. Lấy tiêu cực của điều này bằng cách làm theo quy trình tương tự được đưa ra ở trên

  6. Sử dụng Máy tính raster hoặc Phân loại lại để gán các ô NODATA thành 0 trong raster này để trở về giá trị ban đầu của raster mẫu

Mở rộng Shrink so với Euclidian Khoảng cách

Mở rộng và thu nhỏKhoảng cách điện tử

Lưu ý: Màu xanh lá cây hiển thị các ô được xử lý (các ô màu trắng trong câu hỏi)

Ưu điểm của Khoảng cách Euclidian là, nó lấy khoảng cách thích hợp từ mỗi tế bào thông qua các mức độ cạnh huyền làm mịn các cạnh sắc nét khác. Mặt khác, số lượng tham số ô của các công cụ mở rộng và thu nhỏ xử lý cùng một số ô cho tất cả các hướng, tạo ra các cạnh giống như hộp giới hạn, do đó tổng quát quá mức các cạnh / góc.

Tuy nhiên, vấn đề chính là nó không loại bỏ tiếng ồn thành công như mở rộng / thu nhỏ và nó dài hơn một chút so với câu trả lời.


Đối với bất kỳ ai làm điều này và sử dụng GRASS / QGIS - bạn có thể sử dụng r.grow và phát triển theo khoảng cách Euclide dương, theo sau là khoảng cách Euclide âm
srha
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.