Deteksi tekstur dan properti wilayah pada gambar


9

Saya memiliki masalah menarik yang saya coba selesaikan. Jadi misalnya, jika kita memiliki gambar hitam dan putih yang mengandung dua tekstur (A dan B), saya tertarik untuk mengetahui nilai-nilai piksel batas yang benar-benar akan menutupi masing-masing tekstur.

Saya berpikir untuk menggunakan korelasi silang, yang akan memberi saya sekelompok posisi, dari templat (legenda) pada gambar tetapi apakah ada cara untuk menggunakannya untuk mendapatkan nilai piksel batas (ini biasanya tidak beraturan)? Juga, apakah ada cara lain yang lebih baik untuk melakukan ini?

Contoh nyata dari dunia ini adalah mendeteksi wilayah curah hujan pada peta yang menunjukkan tiga tingkat curah hujan dalam setahun. Setiap level diberi tekstur yang ada dalam legenda, yang digunakan untuk pencocokan tekstur pada gambar yang sama.


4
Akan bermanfaat jika Anda benar-benar membagikan contoh dan mungkin beberapa solusi awal yang telah Anda coba
Ivo Flipse

3
Unggah beberapa contoh gambar dengan pasti sehingga kami mengerti apa yang Anda lakukan. Seperti beberapa daerah diisi padat dan yang lainnya lintas-menetas? nps.gov/sagu/naturescience/images/…
endolith

Jika Anda memiliki matlab, Anda bisa menggunakan kotak alat pemrosesan gambar. Jika tidak, situs web mereka masih memberikan ikhtisar yang baik tentang algoritma standar yang mungkin ingin Anda gunakan, misalnya fungsi bwconncomp .
Tn. White

Jawaban:


1

Ini proses sederhana:

  1. Tetapkan pengukuran tekstur untuk setiap wilayah dalam gambar.
  2. Gunakan algoritma pelabelan / konektivitas wilayah (atau algoritma pertumbuhan wilayah) untuk bergabung dengan wilayah yang berdekatan memiliki ukuran tekstur yang sama.
  3. Terapkan algoritma edge-following sederhana untuk melacak kontur setiap wilayah.

Ukuran Tekstur Law adalah teknik yang lebih tua tetapi masih berguna untuk menentukan tekstur dalam gambar, dan itu mungkin cukup bagi Anda untuk membedakan tekstur A dari tekstur B di seluruh gambar. Lihat bagian "Tindakan Energi Tekstur Hukum" di artikel Wikipedia:

http://en.wikipedia.org/wiki/Image_texture

Sebagai langkah pertama, hitung semua ukuran tekstur dan tentukan ukuran tertentu (misalnya Tepi atau Bintik) yang memungkinkan Anda membedakan satu tekstur dari yang lainnya dengan mudah. (Jika Anda memposting beberapa gambar, saya dapat membantu Anda mengidentifikasi ukuran tekstur.)

Jika Anda hanya memiliki dua tekstur, A dan B, maka Anda dapat memperlakukannya sebagai latar depan dan latar belakang, dan algoritma pelabelan wilayah standar akan berfungsi. Untuk membuatnya lebih mudah untuk melihat apa yang terjadi dalam pemrosesan, Anda dapat menghasilkan gambar baru dengan menetapkan A texels (elemen tekstur, potongan kecil tekstur) ke warna putih, dan B texels ke warna hitam. Pelabelan wilayah dan / atau algoritma mengikuti kontur kemudian akan menemukan wilayah putih dan hitam yang terhubung. Fungsi findContours () di OpenCV akan bekerja dengan baik.

http://en.wikipedia.org/wiki/Connected-component_labeling

Artikel Wikipedia yang sama mencakup algoritma multipass tradisional maupun algoritma pass-tunggal. Saya belum mengimplementasikan algoritma single-pass yang dijelaskan di sana, tetapi saya telah bekerja dengan algoritma single-pass yang dijelaskan dalam makalah "Algoritma Pelabelan Komponen Menggunakan Teknik Pelacakan Kontur" oleh Chen dan Chang. Makalah oleh Chen dan Chang juga menjelaskan algoritma mengikuti kontur standar yang dapat diimplementasikan dengan cepat.

Jika Anda memiliki lebih dari dua tekstur, maka Anda mungkin menggunakan algoritma DAS atau rata - rata untuk mengelompokkan wilayah setelah Anda memetakan kembali tekstur menjadi warna. Meskipun memetakan ulang dari tekstur ke warna tidak perlu, itu membuat proses lebih mudah untuk debug dan mengerti.

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.