Kotak parsing: Menemukan beberapa kontur dalam satu bidang sumber?

9

Pada prinsipnya, ini adalah tindak lanjut terhadap masalah dari beberapa minggu yang lalu , meskipun ini tentang algoritma secara umum tanpa aplikasi untuk masalah aktual saya.

Algoritma pada dasarnya mencari melalui semua garis dalam gambar, mulai dari kiri atas, sampai menemukan pixel yang merupakan batas. Dalam pseudo-C ++:

int start = 0;
for(int i=0; i<amount_of_pixels; ++i)
{
   if(pixels[i] == border)
   {
      start = i;
      break;
   }
} 

Ketika menemukan satu, ia memulai algoritma kotak marching dan menemukan kontur ke objek apa pun milik pixel.

Katakanlah saya memiliki sesuatu seperti ini:

masukkan deskripsi gambar di sini

Di mana semuanya kecuali warna putih adalah perbatasan.

Dan telah menemukan titik kontur gumpalan pertama:

masukkan deskripsi gambar di sini

Untuk algoritma umum sudah berakhir. Ia menemukan kontur dan telah melakukan tugasnya. Bagaimana saya bisa beralih ke dua gumpalan lainnya untuk menemukan kontur mereka juga?

TravisG
sumber
butuh bantuan dengan ini, silakan lihat ke stackoverflow.com/questions/17232672/…

Jawaban:

7

Bisakah Anda menghapus poligon yang ditemukan dengan menggambarnya dalam warna latar belakang dan ulangi sampai tidak ada yang tersisa?

Adam
sumber
1
Begitulah yang harus dilakukan. Isi elemen yang ditemukan dengan latar belakang (atau warna lain) dan lanjutkan pencarian (Anda dapat melanjutkan pada titik di mana Anda menemukan "kecocokan" pertama)
bummzack
Oh wow. Aku bahkan tidak tahu tentang banjir. Terima kasih.
TravisG
1

mengapa tidak menyimpan informasi gumpalan ke array lain dan memeriksa apakah piksel yang baru ditemukan berada dalam kotak pembatas gumpalan sebelumnya? Beberapa manipulasi akan diperlukan untuk menangani gumpalan di bawah centriod gumpalan sebelumnya dan yang termasuk dalam kotak pembatas.

Abe K
sumber