Gereksinimler: | VB6 Runtime Dosyaları |
Dosya: | tıklayınız |
İlgili sayfalar: BaglantiliBilesenEtiketleme.dll, Araç Plakası Konum Tespiti
Son zamanlarda ileride işime yarayacağını düşündüğüm yöntemleri öğrenip önce VB ile denemeye çalışıyor ve eğer denemeler başarılı olursa C++(pek çok dil tarafından kullanılabildikleri için) ile bu fonksiyonların kütüphanelerini yazıyorum. Bu yöntem de bitti ve yakında bunun da kütüphanesi hazır olur.
Kütüphaneler birikip belli bir sayıya ulaşınca, hepsini bir tek kütüphane altında toplayıp yayınlayacağım... Şimdi konuya geçelim.
Görüntü işleme tekniklerine dayalı programlarda sıkça kullanılan bir diğer yöntem olan bağlantılı bileşen etiketleme yöntemi, ikili resimler üzerinde uygulanır ve görüntü üzerindeki bağımsız bileşenleri ayrı renkler ile etiketler. Böylece farklı bileşenlerin konumlarını tespit etmek kolaylaşır. Hatta, konumları tespit edilen bileşenler birbirlerinin dikdörtgensel alanına girmiş olsalar bile ayrı ayrı başka görüntülere aktarılabilir.
Yöntemi uygulamaya yönelik yaklaşımlar biraz da sezgisel olduğu için genelde pek çok farklı yaklaşım benimsenebilir. Yazıda kendi denemelerimde uyguladığım aşamaları anlatacağım.
Görüntü taranırken ileriki adımlarda üzerinden geçilecek olan komşu pixellerin de etiketlerinin kontrol edilmesi zaman kaybından başka bir şey değil. Bu yüzden sadece üzerinden bir daha geçilmeyecek pixeller işlenmelidir.
Görüntüler farklı yönlerde taranabilir. Ancak bu yöntemde tarama yönü önemlidir. Aynı pixel için gereğinden fazla sayıda etiket kontrolü yapılmasını engellemek amacıyla önce sütun seçilmeli ve daha sonra sütun içinde gezinilmelidir.
Önce satır seçilip daha sonra satır içinde gezinmek de mümkün. Ama eğer öyle yapılırsa, yandaki şekilde (x-1,y+1) pixelinin etiketi değil, sağ üst köşedeki(x+1,y-1) pixelinin etiketi kontrol edilirdi. Özetle, her pixelin sadece bir defa işlenmesine dikkat edilmelidir. Aksi halde gereğinden fazla sayıda işlem yapılır.
Tarama ve komşuluk denetleme yönüne karar verildikten sonra tarama başlatılır. Komşu pixeller arasında daha önce etiketlenmiş olan pixel bulunmuyorsa, o an üzerinde bulunulan pixelin yeni bir bileşene ait olduğu farzedilir ve o pixele yeni bir etiket atanır. Eğer komşu pixeller arasında etikete sahip bir pixel varsa, üzerinde bulunulan pixele o etiket atanır.
Komşu pixeller arasında farklı etiketlere sahip birden fazla pixele rastlanması da mümkündür. Bu durum, komşuluğa sebep olan pixelin, henüz komşuluğu tespit edilememiş ve dolayısıyla farklı etiketlerle etiketlenmiş pixellerden sonra işleniyor olmasından kaynaklanır. (Bir Z harfi görüntüsü düşünün. Soldan sağa doğru tarama yapıyorken Znin tek parça olduğunu ancak harfin en sağına vardığınızda anlayabilirsiniz.) Böyle durumlarla karşılaşıldığında etiketi büyük olan değer seçilir ve bir sonraki aşamada kullanılmak üzere, küçük etiketin büyük etiket ile aynı bileşeni işaretlediği bilgisi kaydedilir.
Yukarıdaki işlem tamamlandığında bir bileşen şekline bağlı olarak farklı etiketlere sahip olabilir. Bu aşamada tüm etiketler sıralı ve benzersiz olacak şekilde düzenlenmelidir. Aynı olanları teke indirmek amacıyla yukarıdaki adımda not edilen ve aynı bileşene ait olduğu bilinen etiketlerin tümü, bu etiketler arasındaki en düşük değer ile işaretlenir. Böylece her bileşenin sadece bir tek etiketi olur...
Örnek program açılırken, IkiliGoruntu.bmp dosyasını yükler. Eğer kendi oluşturduğunuz görüntüyü denemek isterseniz bu dosyayı paint yardımıyla düzenleyebilirsiniz. Bir problemle karşılaşmamak için görüntünün boyutunu fazla değiştirmemeye ve siyah ile beyazdan başka bir renk kullanmamaya dikkat etmeniz yeterli...
Hocam bilgilerinizi paylaştığınız için çok teşekkür ederim.Görüntü işlemeyle alakalı bir projede çalışıyorum.Aynı bilesene ait etiketleri eleme yöntemini biraz daha açarmısınız.Şimdiden teşekkür ederim
Etiketleme adımında komşuların etiketlerini kontrol ederken, farklı etiketlere sahip iki komşuya rastlarsanız bu farklı iki etiketin aynı görüntüye ait olduğunu tespit etmiş olursunuz. Mesela herhangi bir pixele geldiniz, pixelin bir komşusunu 4 ile diğerini 6 ile etiketlediğinizi farkettiniz. Oysa ikisi de o an bulunduğunuz pixele komşu olduğu için aslında aynı bileşene ait. Dolayısıyla etiketleme tamamlandığında, bu iki etiketten birini elemeniz gerekir, yani 6 ile etiketlediğiniz pixellerin etiketini 4 ile değiştiriyorsunuz. Böylece her bileşen sadece bir etikete sahip oluyor.
İyi çalışmalar...
yazınız faydalı fakat ,şimdi yukarıdan aşağıya tararken ,4 komşuluk ile ( olacak şekilde) 255 gördüğüm her pixel komşulunu diğer komşuluklardan nasıl ayır edeceğim.Yani 20X20 'lik bir resim bir yanında 6X6 lik bir grup pixsel diğer yanında 9x9'luk grup pixsel'li nasıl ayır edeceğım.Sonuçta 3X3'lük filtrem,6X6liğin ve 9X9'un içinde birden fazla dolaşacak ve birden fazla grub görecek,ayrıca aynı yeri birdaha ölçecek.(burda şeklinde 4 komşuluk yapmak istiyorum).Birde bunun üzerine mesela aynı sutünda birden fazla bağlantısız billeşen varsa nasıl bir mantıkla bunları ayıracağım.Bu kısma biraz daha açıklık getirebilir misiniz?
Pikselleri gruplar halinde değil, tek tek değerlendiriyoruz.
Etiketleme işlemini tamamladığınızda, ayrık bileşenler farklı etiketlerle etiketlenmiş olacağı için onları zaten ayırt etmiş olacaksınız.
teşekkürler