AtasoyWeb - Hüseyin Atasoy
AtasoyWeb
Hüseyin Atasoy'un Programlama Günlüğü

BaglantiliBilesenEtiketleme.dll

İkili bir görüntünün bağlantılı bileşenlerini etiketleyip koordinatlarını döndüren fonksiyonlar içeren kütüphane.
BaglantiliBilesenEtiketleme.dll C# Kullanım Örneği
Kütüphane: BaglantiliBilesenEtiketleme.dll
Son sürüm: 1.1.0.0
Örneklenen diller: C#, VB.NET
Dosya: tıklayınız

İlgili yazılar: Bağlantılı Bileşen Etiketleme, Araç Plakası Konum Tespiti

Güncelleme (19/02/2011, v1.1)

  • Bazı veri tipleri daha uygun olanları ile değiştirildi.
  • Büyük resimler işlenirken karşılaşılan yığın taşması hatası giderildi.
  • KoordinatTespit fonksiyonu, Etiketle fonksiyonu tarafından hesaplanan bileşen sayısı değerine ve etiket dizisine ihtiyaç duyduğu için bu veriler geçici olarak kütüphane denetimindeki bellek alanlarında tutuluyordu. Değerlerin kullanıcıya döndürülmesi ve kullanıcı tarafından fonksiyona gönderilmesi sağlandı...

Daha önce Bağlantılı Bileşen Etiketleme isimli yazıda bu işlemin nasıl yapıldığını yazıp bir VB6 örneği yayınlamış ve yakın bir zamanda kütüphanesini hazırlayacağımı söylemiştim. Kütüphanenin ve örnek kodların yazımını dün tamamladım. Bu günlerde ise, daha önce yazdığım kütüphaneleri ve bu kütüphaneyi birlikte kullanarak bir araç plakası konum tespit çalışması yapmayı planlıyorum. Böylece bu son yayınladığım kütüphanelerin ne tür çalışmalarda kullanılabileceği ile ilgili sitede iyi bir örnek yer almış olur...

Bu kütüphane yardımıyla bir ikili görüntünün tüm bileşenlerini etiketleyebilir ve ayrı bileşenlerin koordinatlarını, enlerini ve boylarını tespit edebilirsiniz.

Önceki kütüphaneleri hep VB6 ile örnekliyordum. Modası geçti biliyorum ama beni cezbetmeye devam eden bir yanı var, çözemedim. Dün, önceki tüm kütüphaneler için C# ve VB.NET örnekleri hazırlayıp sitedeki ilgili paketlere ekledim. Bundan sonra yazacağım tüm kütüphanelerin kullanımlarını en azından C# ve VB.NET ile de örnekleyeceğim...

Şimdi kütüphanedeki fonksiyonları, parametreleri ve parametrelerin ne işe yaradıklarını görelim. Uyumluluk açısından önemli olduğu için parametrelerin boyutlarına ve dolayısıyla tiplerine dikkat edilmeli. (Tip seçilirken, kullanılacak dildeki tiplerin isimlerine değil boyutlarına bakılmalı, bkz: C++ Kütüphaneleri Ve Diller Arası Uyumsuzluklar)

Fonksiyonlar

void Etiketle(byte* pixelDizisi, int genislik, int yukseklik, bool renklendir, int* bilesenSayisi,
              int* renkliDizi)

void KoordinatTespit(byte* etiketDizisi, int genislik, int yukseklik, int bilesenSayisi, int* x1,
                     int* y1, int* x2, int* y2)

RenkleriTersCevir(byte* pixelDizisi, int genislik, int yukseklik)

Etiketle

Fonksiyon, görüntü üzerindeki bileşenleri etiketler ve aynı zamanda KoordinatTespit fonksiyonunun çağrılması halinde ihtiyaç duyacağı geçici etiket bilgileri hazırlar.

pixelDizisi (her eleman 1 bayt): İşlenecek tek boyutlu pixel dizisinin ilk elemanının referansı yollanmalıdır. Normalde iki boyulu olan pixel dizisini tek boyuta indirgeme mantığınından daha önce bahsetmiştim. Özetle:

y=0dan yukseklik değerine kadar
  x=0dan genislik değerine kadar
    tekboyutlu(y*genislik+x)=ikiboyutlu(x,y)

genislik ve yukseklik (4 bayt): İşlenecek görüntünün genişlik ve yükseklik değerleri girilmelidir.

renklendir (1 bayt): false verilirse bileşenler 1 değerinden başlayan ve birer birer artan gri renk değerleri ile etiketlenir. Dolayısıyla ortaya çıkan görüntüde gözle görülür ayrıntılar bulunmaz. Etiketlerin böyle değerlere sahip olması, resim üzerindeki farklı bileşenlerin tespit edilmesi için gereken işlem sayısını azaltır.

true verilirse, bileşenler 24 bitlik rastgele tamsayılar ile, yani aslında RGB renk değerleri ile etiketlenir. Böylece işlenen görüntü ekrana yansıtıldığında farklı bileşenler farklı renklerde görünür. Ancak bu durum işlenmiş dizinin kütüphanenin dışında başka amaçlarda kullanımını zorlaştırabilir.

Bu parametrenin, kütüphanedeki KoordinatTespit fonksiyonunun ihtiyaç duyduğu gri etiket dizisinin oluşumuna bir etkisi yoktur. Renkli görüntü, gri etiketli görüntü üzerinden elde edildiği için gri etiket dizisi bu parametrenin değerinden bağımsız olarak her durumda oluşturulur ve KoordinatTespit fonksiyonunun çağrılma ihtimaline karşı, kütüphane bellekten atılıncaya kadar bellekte tutulur.

bilesenSayisi (4 bayt): Tespit edilecek bileşen sayısının kaydedileceği değişkenin referansı yollanmalıdır. Fonksiyon kendisine gönderilen bu değişkeni kütüphane içirisinde doldurup kullanıma hazırlar.

renkliDizi (her eleman 4 bayt): Pixel sayısı kadar eleman içeren boş bir dizinin ilk elemanının referansı yollanmalıdır. Eğer renklendir parametresi true ise bu dizinin elemanları RGB formatında renklendirilmiş pixeller ile doldurulur. renklendir parametresi false ise bu parametre üzerinde hiçbir işlem yapılmaz. Bu durumda paramtreye tek elemanlı bir dizinin ilk elemanının referansı yollanabilir.

KoordinatTespit

etiketDizisi (her eleman 1 bayt): Etiketle fonksiyona verilen pixelDizisi, kütüphane içinde etiketlerle doldurulur. Bu parametreye, Etiketle fonksiyonu ile doldurulan pixelDizisinin ilk elemanının referansı gönderilmelidir.

genislik ve yukseklik (4 bayt): Etiketlenmiş olan görüntünün genişlik ve yükseklik değerleri girilmelidir.

bilesenSayisi (4 bayt): Yine Etiketle fonksiyonu tarafından doldurulan bilesenSayisi değişkeninin kendisi yollanmalıdır.

x1, y1, x2, y2 (her eleman 4 bayt): Bu parametrelerin her birine, Etiketle fonksiyonu tarafından doldurulmuş bilesenSayisi değişkeni kadar eleman içeren dizilerin ilk elemanlarının referansı verilmelidir. x1 ve y1 dizilerinin elemanları bileşenlerin en sol-üst noktalarının konumları ile, x2 ve y2 dizilerinin elemanları da bileşenlerin en sağ-alt noktalarının konumları ile doldurulur.

RenkleriTersCevir

Kütüphane, siyah arkaplan üstündeki beyaz bölgeleri etiketler. Ancak beyaz arkaplan üzerindeki siyah bölgeleri etiketlemek isteyebilirsiniz. Bu durumda pixel dizisini önce bu fonksiyondan geçirmelisiniz. Fonksiyon, rengin siyah (0) olması durumunda rengi beyaza(255), diğer durumlarda siyaha çevirir.

pixelDizisi (her eleman 1 bayt): Renkleri ters çevrilmek istenen tek boyutlu gri pixel dizisinin ilk elemanının referansı girilmelidir.

genislik ve yukseklik (4 bayt): Renkleri ters çevrilmek istenen görüntünün genişlik ve yükseklik değerleri girilmelidir.

Yazar: Hüseyin Atasoy
Posted: 15/02/2011 19:47
Keywords: bağlantılı bileşen etiketleme kütüphanesi, connected component labeling

Leave Comment

 
You are replying to comment #-1. Click here if you want to cancel replying.

 

Comments

No approved comment.
 
Şu an bu sayfada 1, blog genelinde 6 çevrimiçi ziyaretçi bulunuyor. Ziyaretçiler bugün toplam 154 sayfa görüntüledi.
 
Sayfa 44 sorgu ile 0.014 saniyede oluşturuldu.
Atasoy Blog v4 © 2008-2024 Hüseyin Atasoy