Melakukan Pengurangan Derau Raster dan Menghaluskan Tepi?


22

Saya memiliki gambar raster seperti iniGambar raster

Saya ingin menghapus titik kebisingan terisolasi dan menghaluskan tepi (katakan titik putih tunggal, dan saya ingin tepi entitas terlihat halus). Bagaimana saya bisa melakukan ini di ArcGIS atau di R?

Ukuran sel adalah 30 * 30.

Jawaban:


15

Operasi morfologis Expand dan Shrink dibuat untuk pemrosesan semacam ini. Gunakan ArcGIS (atau GRASS atau Mathematica ) karena Rpustaka "raster" terlalu lambat.


Seringkali membantu untuk sedikit bereksperimen dengan parameter: Anda harus memutuskan berapa banyak ekspansi dan penyusutan yang diperlukan untuk membersihkan gambar; dan biasanya Anda ingin melakukan sesedikit mungkin, karena setiap operasi cenderung memuluskan beberapa detail yang tajam. Berikut adalah urutan yang berfungsi dengan baik untuk menghilangkan banyak "suara" yang tampak dengan tetap mempertahankan sebagian besar detail dalam "entitas". "Expand" dan "shrink" keduanya mengacu pada sel putih , sehingga ekspansi menyebabkan mereka tumbuh keluar dan menyusut menyebabkan sel-sel hitam merambah ke wilayah putih.

Daftar gambar

Kolom "perbedaan" menggunakan warna untuk menyoroti perbedaan antara gambar awal dan akhir pada setiap langkah: biru untuk hitam yang berubah menjadi putih, dan oranye untuk putih yang berubah menjadi hitam.

Jika bagian yang lebih besar yang tersisa perlu dihapus, itu mungkin sebaiknya dilakukan dengan RegionGroup untuk mengidentifikasi mereka, setelah itu mereka dapat dilenyapkan melalui reklasifikasi. Ini merupakan pilihan di awal, tetapi sedikit pembersihan awal dengan Expanddan Shrinkmengurangi pekerjaan dan memberikan smoothing yang diinginkan.


Secara kebetulan, saya memilih untuk membuat delapan gambar dalam ilustrasi ini dengan perintah Mathematica karena sangat sederhana, mudah, dan cepat untuk dieksekusi:

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 *)

Alur kerja di ArcGIS adalah sama tetapi sintaksinya akan lebih panjang. Jika Anda benar-benar ingin menggunakan R, muat pustaka "raster" dan eksploitasi focalFilteruntuk membuat fungsi untuk melakukan perluasan dan penyusutan. Kemudian, tunggu sekitar satu menit untuk menjalankan operasi ....


Halo! Jika Anda tidak keberatan, bisakah Anda mengirimkan saya informasi kontak Anda? Saya ingin mengakui Anda dalam penelitian saya. Terima kasih! @whuber
Seen

Apakah Anda tahu perintah yang setara dalam GRASS?
Richard

1
@Richard Saya yakin ada banyak cara kreatif untuk melakukan operasi ini di GRASS, tetapi r.neighbors terlihat sangat cocok untuk tugas tersebut.
whuber

12

Menggunakan Spatial Analyst Extension, Anda dapat menggunakan beberapa alat Generalisasi . Beberapa dari mereka melakukan tugas yang serupa, jadi Anda mungkin perlu bermain-main dengan beberapa untuk mendapatkan hasil seperti yang Anda inginkan. Tapi, saya akan melihat alat Filter Mayoritas dan alat Boundary Clean .

Berikut adalah halaman tentang konsep kedua alat ini.

Saya tidak yakin bagaimana melakukan tugas-tugas ini di R, tapi di sini ada posting tentang bagaimana melakukan Filter Mayoritas menggunakan GRASS GIS.


2

Ini pada dasarnya adalah varian dari jawaban @ whuber dan menggunakan Euclidian Distance untuk memperluas dan mengecilkan batas-batas raster untuk menghaluskan sudut-sudut tajam dari raster yang diperbesar dengan proses shrink-shrink yang memanfaatkan jumlah sel untuk tumbuh / melanggar. Meskipun Euclidian Distance meniru Expand, tidak mungkin untuk memperkenalkan nilai negatif untuk melanggar / menyusut. Caranya adalah dengan mengembangkan proses berulang untuk mengambil negatif dari raster Euclidian Distance dan menumbuhkannya. Di bawah ini adalah langkah-langkah untuk citra sampel yang diberikan dan foto-foto untuk klarifikasi.

  1. Reklasifikasi raster hanya untuk menyimpan 1s (sel putih)

  2. Terapkan jarak euclidian untuk jarak dua sel (60 meter dalam kasus ini) ke raster yang direklasifikasi

  3. Ambil negatif dari raster yang diperluas dengan menggunakan Reklasifikasi (sel-sel dengan nilai akan mendapatkan NODATA dan NODATA akan berubah menjadi 1) atau operator Con dan IsNull Raster Calculator

  4. Terapkan Euclidian Distance sekali lagi ke raster negatif ini dengan jarak yang sama (60 m)

  5. Ambil yang negatif dari ini dengan mengikuti proses yang sama seperti yang diberikan di atas

  6. Gunakan Raster Calculator atau Reclassify untuk menetapkan sel NODATA ke 0 di raster ini untuk kembali ke nilai asli dari sampel raster

Perluas Shrink vs. Euclidian Distance

Perluas dan susutJarak Euclidian

Catatan: Hijau menunjukkan sel yang diproses (sel putih dalam pertanyaan)

Keuntungan dari Euclidian Distance adalah, dibutuhkan jarak yang tepat dari setiap sel melalui luasan sisi miring yang meratakan tepi yang tajam. Di sisi lain, jumlah parameter sel alat ekspansi dan menyusut, memproses jumlah sel yang sama untuk semua arah, yang menghasilkan kotak pembatas seperti tepi, oleh karena itu terlalu menggeneralisasi tepi / sudutnya.

Masalah utama, bagaimanapun, itu tidak menghilangkan suara sesukses memperluas / menyusut dan itu sedikit lebih lama dari jawabannya.


Untuk siapa pun yang melakukan ini dan menggunakan GRASS / QGIS - Anda dapat menggunakan r.grow dan tumbuh dengan jarak Euclidean positif, diikuti oleh jarak Euclidean negatif
srha
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.