Bu bölümde Aforge kütüphanesi kullanarak resimdeki blobları bulmayı göreceğiz. Görüntü işlemede blobları kullanarak şekil tespiti sağlanabilir. Bir sonraki yazımda da bu konuya ayrıca değineceğim.

Blob Nedir?
Blob bir resmin içinde bulunan görüntü parçalarıdır. Örnek olarak aşağıdaki resimdeki her bir harf bir blobdur. Resminde bloblar kırmızı ile çizilmiştir. Bloblarını incelersek i harfi iki blobldur.I ve nokta kısmı birer ayrı blobldur çünkü bunların birbirleri ile bağlanan bir noktası yoktur. Özetle bloblar birbiri ile bağlantılı noktaların bir bütünüdür.

Blob

Gene şekilden inceleneceği gibi Ö harfi için O ve noktalar ayrı birer bloblardır.
Aşağıdaki resimdeki iki şeklin arasında herhangi bir bağlantı olmadığından ikisi de ayrı birer blobdur.

blob nedir?

Bir resim içerisinde bloblar  Aforge kütüphanesindeki BlobCounter sınıfından yararlanılarak bulunabilir.
Blob bulunmadan önce bitmap resmi kilitlenir. Bu sayede blob bulunurken diğer fonkisyonlar tarafından resmin değişikliğe uğmaması sağlanır. Ardından da bitmapdata sınıfına aktarılır.

BitmapData bitmapData = bmp.LockBits(
               new Rectangle(0, 0, bmp.Width, bmp.Height),
               ImageLockMode.ReadWrite, bmp.PixelFormat);

Blobcounter nesnesi yaratılır. BlobCounter sınıfı AForge.Imaging altında yer alır.

BlobCounter blobCounter = new BlobCounter();

Bloblar bulunmadan önce büyüklük bakımından filtrelenebilir. Bu sayede küçük gürültü verileri yada istemediğimiz büyüklükteki blobların bulunması engellenir.
Filtere uygulamadan aşağıdaki kod ile filtre uygulanacağının belirtirmesi gerekir.

blobCounter.FilterBlobs = true;

Örneğin blobun genişlik bakımında minumum 4 pixel,maximum 8 pixel,yükseklik bakımından minumum 4 pixel,maximum 8 olmasını istiyorsak aşağıdaki kodu kullanabiliriz.

blobCounter.MinWidth = 4;
blobCounter.MinHeight = 4;
blobCounter.MaxWidth = 8;
blobCounter.MaxHeight = 8;

Blobları bulmak içinse ProcessImage methodunu kullanarak belirlediğimiz filtelere göre blob bulunması sağlanabilir. Bu fonkisyon belirli formattaki resimleri destekler.

blobCounter.ProcessImage(bitmapData);

Blobları bulduktan sonra blob sınıfı içerinsinde tutmak için

Blob[] blobs = blobCounter.GetObjectsInformation();

kodunu kullanabiliriz.Eğer blob görüntüsünün imageleri üzerinde çalışacaksak

Blob[] blobs= blobCounter.GetObjects(bmp, false);

kodunu kullanabiliriz.  Blobun resmini ise

Bitmap blobresmi= blobs[i].Image.ToManagedImage();

koduyla çekebiliriz.Bitmap resmi ManagedImage bir resimdir.Ancak blob resmi geri döndürürken UnmanagedImage resim geri döndürür.Bu yüzden bir dönüşüm yaparak resim ToManagedImage(); methodu kullanırak ManagedImage olan bitmap nesnesine atanması sağlanmıştır.
Örneğin “Araba” yazan bir resimde 6 tane blob vardır. Her bir harf bir blobdur. Aşağıdaki kod ile

Bitmap blobresmi= blobs[0].Image.ToManagedImage();

Araba kelimesinde büyük A harfinin bize resmini verir.

Kodları birleştircek olursak önce bitmap nesnesini kilitliyoruz daha sonra bir BlobCounter nesnesi yaratıyoruz. Ardından filtreleri belirliyoruz. Daha sonra ProcessImage methodu ile resmin bloblarını buluyoruz. Buluduğumuz tüm blobları blobs dizisine atıyoruz. Son olarakda Bitmap üzerindeki kiliti kaldırıyoruz. Bir sonraki yazıda bulduğumuz blobları kullnarak şekil tespiti yapacağız.

BitmapData bitmapData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadWrite, bmp.PixelFormat);
            BlobCounter blobCounter = new BlobCounter();
            blobCounter.FilterBlobs = true;
            blobCounter.MinHeight = 4;
            blobCounter.MinWidth = 4;
            
            blobCounter.ProcessImage(bitmapData);
            Blob[] blobs = blobCounter.GetObjectsInformation();
            bmp.UnlockBits(bitmapData);

CEVAP VER

Lütfen yorum giriniz!
Lütfen isminizi giriniz