Deteksi permukaan

9

Bagaimana satu segmen area abu-abu (mulai dari putih ke hitam) dari sebuah gambar? (Jika Anda tahu ini dalam OpenCV, Anda dapat menjawab dengan mengatakan apa yang akan Anda lakukan dalam OpenCV). Misalnya diberikan gambar ini:

masukkan deskripsi gambar di sini

Anda melihat bahwa ini adalah area abu-abu yang luas dan jelas dapat dibedakan dari yang lain. Bagaimana Anda bisa membagi ini jika area ini dapat memiliki warna abu-abu dan harus bekerja secara real-time.

Terima kasih sebelumnya.

Olivier_s_j
sumber
Saya melihat beberapa area abu-abu dengan jelas dapat dibedakan. Bisakah Anda menunjukkan hasil yang Anda inginkan?
Dr. belisarius
hasil yang saya inginkan adalah koordinat sudut kanan & kiri atas dan koordinat sudut kiri bawah persegi panjang abu-abu tengah
Olivier_s_j
Bisakah Anda memberi tahu kami hal lain tentang lingkungan dan kemungkinan perbedaan dalam gambar yang perlu Anda proses? Apakah target akan selalu berada di dekat tengah gambar? Apakah akan ada persegi panjang abu-abu lain, mungkin dengan ukuran yang sama? Bagaimana jika mereka muncul sebagai warna abu-abu yang sama? Adakah hal lain yang bisa kita gunakan untuk mengidentifikasinya? Apakah akan selalu memiliki bentuk "T" kecil di bagian atas?
justis
Hai, Target tidak akan selalu berada di dekat bagian tengah gambar. Targetnya akan selalu berupa persegi panjang. (Bisa juga hanya dinding). Jika ada beberapa persegi panjang, mereka juga harus dideteksi, tetapi harus besar. Area kecil bisa dibuang. Jika mereka semua muncul sebagai jenis abu-abu yang sama, mereka semua harus dideteksi, tetapi kemungkinan hal ini terjadi sangat kecil. Satu-satunya properti nyata yang dapat dideteksi adalah bahwa permukaan akan memiliki abu-abu yang sama (lebih atau kurang) di seluruh permukaan, dan bahwa itu adalah persegi panjang. Tidak akan ada top T bentuk kecil setiap kali
Olivier_s_j

Jawaban:

9

Anda akan mendapatkan segmentasi wajar area abu-abu menggunakan Algoritma DAS atau potongan grafik. Watershed tersedia dalam opencv tetapi pemotongan grafik belum. (BTW Apakah ini peta kedalaman dari Kinect?)

nav
sumber
1
Fungsi DAS di OpenGL memerlukan gambar 8-channel 3-bit sebagai input. Peta kedalaman saya adalah gambar 8-bit 1. Ada ide untuk mengatasi ini?
Olivier_s_j
/ * dapatkan properti gambar / width = src-> width; tinggi = src-> tinggi; / buat gambar baru untuk versi grayscale * / IplImage * dst = cvCreateImage (cvSize (lebar, tinggi), IPL_DEPTH_8U, 1); cvCvtColor (src, dst, CV_RGB2GRAY);
nav
Pertanyaan lain, saya baru saja membuat fungsi DAS bekerja di gambar lain (hanya sebuah contoh dari opencv). Tetapi mereka mulai dengan gambar berwarna dan gambar biner. Saya hanya punya 1 gambar ... gambar grascale. Adakah yang tahu topeng apa yang seharusnya (variabel input kedua)?
Olivier_s_j
4

Di Mathematica Anda dapat melakukan sesuatu seperti:

Colorize[MorphologicalComponents[
  ColorNegate@
   Erosion[Dilation[
     DeleteSmallComponents[
      Erosion[Binarize[
        GradientFilter[
         ColorConvert[Import@"http://i.stack.imgur.com/XdnaW.png", 
          "RGB"], 2], .015], 1], 100], 2], 2]], 
 ColorFunction -> "ThermometerColors"]

masukkan deskripsi gambar di sini

Mungkin Anda dapat menerjemahkan kode ini ke lib pemrosesan gambar apa pun.

Belisarius
sumber
Hai, terlihat bagus. Tetapi saya tidak memiliki Mathematica. Tapi saya kira Anda menggunakan ambang batas berdasarkan skala abu-abu dari gambar ini? Mungkin Anda bisa memberikan sedikit info dengan kode Anda? Thx
Olivier_s_j
1
@ Ojt Untuk setiap perintah, Anda dapat membaca " reference.wolfram.com/mathematica/ref/xxx.html " untuk keterangannya. Misalnya referensi.wolfram.com/mathematica/ref/…
Dr. belisarius
Ok saya lakukan seperti yang Anda sarankan. Tapi sepertinya Anda menggunakan Binarize untuk memberikan nilai tertentu. Yang tidak mungkin dalam kasus saya. Karena area yang luas dapat memiliki nuansa abu-abu yang berbeda. (Misalnya permukaan tengah bisa sangat abu-abu). Dan kemudian ambang tidak akan berfungsi.
Olivier_s_j