Gözlerimiz bizim belki de en önemli organlarımızdır. İnsanoğlunun sahip olduğu ileri teknoloji ürünü gözleri ve henüz taklit edilemeyen derecede mükemmel görme yeteneği, bilimin birçok alanında olduğu gibi robotikte de ilham kaynağı olmuştur. Şu bir gerçektir ki, bir robot etrafını algılayabildiği ölçüde zeki ve yeteneklidir. Bu yazıda robotlara nasıl görme ve ayırt etme yeteneği kazandırılacağına dair ufak bir denemeden bahsedeceğiz.
Üzerindeki kamerasıyla bilgisayarımıza görüntü aktarımı yapan hayali robotumuza etrafındaki kırmızı, mavi ve yeşil renklerdeki topları algılama yeteneği kazandıracağız. Öncelikle bilinmesi gereken, bilgisayar ekranındaki her pikselin red, green ve blue renklerinden oluştuğudur. Her piksel bu her üç renk için 0-255 arasında sayısal değerler barındırır. Topları ayırt ederken bu değerlerden faydalanarak RGB filtresi geliştireceğiz.
Şimdi kameradan alınan görüntünün bir karesini düşünelim. Görüntüde kırmızı renkte ufak bir top var ve biz bu topu algılayacağız. Bunun için ekrandaki kırmızıya yakın renkleri daha kırmızı yapan, kırmızıya uzak renkleri ise siyaha yaklaştıran bir algoritma kullanıyoruz. Bu algoritmayı kırmızı değer için şu şekilde uygularız:
Her piksel için;
R=pikselin Red değeri , G= pikselin Green değeri, B= pikselin Blue değeri
R=( R-G) + ( R-B)
G=0, B=0
Bu işlemi yaptıktan sonra resimlerde de görüldüğü gibi karşımıza siyah arka plan üzerinde kırmızı bir daire çıkacaktır.
|
|
|
Şekil 1: Gerçek görüntüye RED filtresi uygulanınca elde edilen görüntü
|
Top gözle açıkça seçilse de görüntü üzerinde bazı parazitler olacaktır. Görüntüyü daha da netleştirmek için bir sınır değeri belirlenerek, bu değerin altındaki pikseller silinebilir. Ben bu uygulamada sınır değeri olarak 128 kullanıyorum.
Her piksel için;
Eğer R<128
O halde bu pikseli siyah yap.
Bu noktadan sonra yapılması gereken topun nerede olduğunun belirlenmesi ve topa doğru hareket edilmesidir. Bu nedenle topun ağırlık merkezini bulmalıyız. Bunu lise yıllarında öğrendiğimiz ağırlık merkezi formülleriyle hesaplayabiliriz. Görüntü üzerindeki her pikselin Red değerini, o pikselin X ve Y koordinatlarıyla çarpıp ortalamasını buluyoruz.
İşlenmiş görüntüdeki her nokta için;
COG_X = COG_X + (R*x)
COG_Y = COG_Y + (R*y)
Total = Total + I
COG_X = COG_X/Total
COG_Y = COG_Y/Total
COG_X ağırlık merkezinin X koordinatını, COG_Y ise Y koordinatını verecektir. RGB Filtresinin kırmızı değeri algılayan C# kodu aşağıdaki gibidir. Bu kodlar örnek alınarak aynı filtre Green ve Blue değerleri için de yazılabilir. Ayrıca kodları buradan indirip istediğiniz resimler üzerinden siz de deneyebilirsiniz. Size ve robotlarınıza açık görüşler diliyorum.