Yürüyen kareler: Bir kaynak alanda birden fazla kontur mu arıyorsunuz?


9

Prensip olarak, bu benim asıl problemime başvurmadan genel olarak algoritma ile ilgili olsa da, birkaç hafta önceki bir problemin bir takip sorusu .

Algoritma, temel olarak, resmin sol üstünden başlayarak kenarlık olan bir piksel bulana kadar tüm satırları arar. Yalancı C-++ ile:

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

Birini bulduğunda, yürüyen kareler algoritmasını başlatır ve pikselin ait olduğu nesneye kontur bulur.

Diyelim ki böyle bir şeyim var:

resim açıklamasını buraya girin

Beyaz rengi hariç her şeyin bir sınır olduğu.

Ve ilk damlaın kontur noktalarını bulduk:

resim açıklamasını buraya girin

Genel algoritma için bitti. Bir kontur buldu ve işini yaptı. Konturlarını bulmak için diğer iki lekeye nasıl geçebilirim?


bunun için yardıma ihtiyacım var bu stackoverflow.com/questions/17232672/…

Yanıtlar:


7

Bulduğu çokgeni arka plan renginde çizerek silebilir ve hiçbir şey kalmayana kadar tekrarlayabilir misiniz?


1
Böyle yapılmalı. Bulunan öğeyi arka planla (veya başka bir renkle) doldurun ve aramaya devam edin (ilk "eşleşmeyi" bulduğunuz noktada devam edebilirsiniz)
bummzack

vay canına. Sel doldurmayı bile bilmiyordum. Teşekkürler.
TravisG


1

neden blob bilgilerini başka bir diziye kaydetmiyorsunuz ve yeni bulunan piksellerin önceki blobun sınırlayıcı kutusuna girip girmediğini kontrol etmiyorsunuz? Önceki blobun yüzdesinin altındaki ve sınırlayıcı kutunun içine giren lekeler ile başa çıkmak için biraz daha manipülasyon gerekecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.