LBPH Algoritması ile Yüz Tanıma

İlhan Mert Alan
3 min readJan 15, 2021

--

Selamlar herkese, bilindiği üzere yüz tanıma üzerine bir çok algoritma kullanılabilir. Bunları sayacak olursak eigenfaces, hidden-markov model, destek vektör makineleri, KNN gibi uzun bir listeyle karşılaşırız.

Bu yazıda yüz tanıma üzerinde LBPH algoritmasının nasıl çalıştığından ve implementasyon için izlenilebilecek bir yoldan bahsedeceğim.

Local Binary Pattern Algoritması, kısaca LBP ilk olarak 1994 yılında tanımlanıp, doku sınıflandırması için güçlü bir algoritma sunduğu görülmüştür. Daha sonra 2002 yılında Local Binary Pattern, HOG(Histogram of Oriented Gradients) tanımlayıcısıyla birleştirildiğinde tespit performansının hayli arttığı görülmüştür. LBP’ler texture’ın yerel bir temsilini hesaplarlar. Bu yerel temsil(local representation) her bir pikselin, o pikseli çevreleyen komşu piksellerle karşılaştırılmasıyla oluşturulur. Önce ilgili görsel grayscale’e dönüştürülür, daha sonra her piksel için merkezi pikseli çevreleyen R boyutlu bir bölge seçilir. Merkez piksel için LBP değeri hesaplanır ve çıktı bir dizide saklanır. Temel amaç görüntüdeki yerel yapıyı özetlemektir, böylece orjinal görüntüyü tanımlayacan bir ara görüntü oluştururuz.

LBPH 4 parametre kullanır:

· Radius: Bu, merkezi pikselin etrafındaki yarıçapı temsil eder. Genellikle 1'e ayarlanır.

· Neighbors: Bunlar dairesel LBP’yi oluşturmak için kullanılan örnek noktalarının sayısı olarak kabul edilir. Unutmamalıyız: Ne kadar çok örnek noktası dahil ederseniz, hesaplama maliyeti o kadar yüksek olur. Genellikle 8'e ayarlanır.

· Grid X: Fotoğrafı ızgaraladığımızda , yatay yöndeki ızgara sayısını belirtir. GridX-GridY parametrelerine bağlı hücre sayısı belirlenir. Ne kadar çok hücre olursa, grid o kadar hassas ve iyi olur, fakat ortaya çıkan özellik vektörünün boyutsallığının da o kadar yüksek olacaktır. Genellikle 8 değerine ayarlanır.

· Grid Y: Fotoğrafı ızgaraladığımızda , düşey yöndeki ızgara sayısını belirtir. GridX-GridY parametrelerine bağlı hücre sayısı belirlenir. Bu da GridX gibi genellikle 8 değerine ayarlanır.

Dilerseniz adımlarını anlatarak bunu iyice netleştireyim.

LBP Algoritmasının Adımları

Görsel1 — LBP’yi uygulama

Yukarıda görselimizi önce grayscale’e çevireceğimizden bahsetmiştik ve Görsel-1'de görüldüğü üzere GrayScale bir yüz resmine sahip olduğumuzu varsayalım.

→Bu görüntüden 3x3 piksellik bir pencere alalım, piksel yoğunluğu 0–255 arasında olur.

→Ardından threshold yani eşik değer olarak kullanılacak matrisin merkezi değerine bakalım. Bizim örneğimizde bu değer 90'dır. Bu threshold değerini diğer 8 komşudaki yeni değerleri tanımlamak için kullanacağız. Komşu değerlerde 90dan küçük olanları 0, 90'dan büyük ve eşit olanları ise 1 olarak işaretleyip düzenleyelim.

→Oluşan yeni matrisin değerlerini binary sayı olarak yazdığımızda 10001101 sonucunu buluruz, bunu 10luk tabana çevirip matrisin merkezine ayarlayalım. Oluşan bu yeni görüntü, orjinal görselimizdeki o bölgeyi temsil eden yeni bir ara görüntüdür. LBP işlemi böyle uygulanır.

Ama biz LBPH’da histogramlarla beraber çalışacağımızı söylemiştik. Dolayısıyla bunları histogramlara evirmemiz gerekmektedir.

LBP ile Histogramları Beraber Kullanmak

Görsel2— Ara görüntüden histogram eldesi

Üst kısımda Original Image → LBP Result arasını anlatmıştık. Şimdi de ara görüntüsü elde edilen bu görseli histogramlara aktarmalıyız. LBPH algoritmasında yukarıda bahsettiğimiz GridX ve GridY parametreleri mevcuttu. Bu parametreler sayesinde görüntüyü ızgaralayıp, hücrelere böleriz. Oluşan her hücreyi histogramla temsil ederiz. Daha sonra tüm hücreleri yanyana birleştirerek resmin bütünün temsil eden bir histograma sahip oluruz.

Sıra Geldi Bu Histogramları Karşılaştırmaya..

Bir sürü görsel için bir sürü histogram oluşturduk ve artık sıra geldi bir test görseliyle bu algoritmada sonuca ulaşmaya.. Bunu histogramları karşılaştırarak yapacağız. Histogramları karşılaştırmak, aralarında mesafeyi bulmak için bir çok method kullanılabilir. Öklid mesafesi, chi-square, mutlak değer gibi çeşitli yollar izlenebilir.

Biz öklid mesafesi formülüyle histogram karşılaştırma işlemini yaptığımızı düşünelim. Elimizdeki test görselinin histogramıyla, veri setindeki histogramları karşılaştırırız. Buradan sonuç olarak bir distance değeri buluruz. Bu distance değeri ne kadar düşük olursa, karşılaştırılan iki histogram, yani görseller o kadar benzer olacaktır. Bazı kaynaklarda bu “distance” sayısal değeri “confidence” olarak geçmektedir.

Implementasyon için neler kullanılabilir?

Burada OpenCV destekleyen bir yazılım dili pek tabi kullanılabilir. Ben python ile birlikte OpenCV’yi kullandım. Ayrıca yüzü algılama kısmında HAAR Cascade Classifier’ından yararlanmak oldukça mantıklı olacaktır.

Sonraki yazılarda görüşmek üzere..👋👋

Photo by Hitesh Choudhary on Unsplash

--

--

No responses yet