mehmetakiftezcan.com

14 Aralık 2013 Cumartesi

Yüz Resimlerinde Özellik Noktalarının Bulunması(YAPAY ZEKA)

Yüz Resimlerinde Özellik Noktalarının Bulunması

Merhaba Arkadaşlar Bu dönem ki projemde gerçeklediğim ilginç uygulamalardan birisi yüz resimlerinde özellik noktalarının belirlenmesiydi...Şimdi Aşağıda ki resimde Gözleri,kaşları,dudakları ve burnu nasıl bulduğumu sizlere bildireceğim..

Herhangi iki yüzü Morflerken özellik noktaları esas alınarak morflenir.Yüzde bulunan özellik noktaları aşağıda belirtilmiştir.
  • Göz bebeği
  • Göz köşeleri
  • Kaşlar
  • Dudak
  • Burun
  • Çene
Bu özellik noktalarının bulunmasında morfolojik bazı işlemler uygulanmaktadır. örneğin Gözü bulmak için resim gri formata çevrilir.Gri formata çevrilen resmin yatay ve dikey histogramları bulunur.Şimdi bu morfolojik işlemlerin gerçeklenmesine bakalım.
RESMİ GRİ SEVİYEYE DÖNÜŞTÜRME
Bir resmi gri seviyeye dönüştürmek için resme ait tüm pixellerin R (Red),G (Green),B (Blue) değerleri toplanır 3 e bölünür.Resmi Gri seviyeye dönüştüren C# kodu aşağıda verilmiştir.
public Bitmap griyap(ref Bitmap orjresim)
{Bitmap resim = new Bitmap(orjresim);
unsafe{
BitmapData bmpdata = resim.LockBits(new Rectangle(0, 0, resim.Width, resim.Height),ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
byte* p = (byte*)bmpdata.Scan0;
for (int a = 0; a < bmpdata.Height; a++)
{
for (int b = 0; b < bmpdata.Width; b++)
{
p[0] = (byte)((p[0] + p[1] + p[2]) / 3);
p[1] = p[0]=p[2];
p += 4;
}
}
resim.UnlockBits(bmpdata);
return resim;
}
}

RESMİN YATAY VE DİKEY HİSTOGRAMININ ÇIKARILMASI
Herhangi bir yüz resminin yatay histogramı alındığında histogramdaki maksimum nokta yüz üzerinde Burnun X kordinatına denk düşer.Yatay histogram alınırken resmin Genişliği büyüklüğünde bir Array tanımlanır. Herbir yatay değer için o noktaya karşılık düşen yatay pixellerin parlaklık değerlerinin toplamları alınır yani yataydaki pixellerin Gri değerleri toplamları alınır böylece her bir yatay noktaya karşı düşen yatay histogram bulunmuş olur.
Öte yandan Yüz resimlerinde dikey histogram alındığındaysa  minimum noktaya karşılık düşen yerler Gözler ve kaşlardır.Dikey histogram alınırken yüz resminin Yüksekliği kadar bir Array tanımlanır.Yatay histograma benzer olarak dikey histogram alınırken de her bir dikey nokta için dikey kordinatta bulunan pixellerin parlaklık değerlerinin toplamı alınır.Aşağıda yatay ve dikey histogramın C# la gerçeklenmiş kodu bulunmaktadır.
Unsafe
{
BitmapData data = resim.LockBits(new Rectangle(0, 0, resim.Width, resim.Height), ImageLockMode.ReadWrite, resim.PixelFormat);
byte* z = (byte*)data.Scan0;
yatayHistogram = new int[resim.Width];
dikeyHistogram = new int[resim.Height];
for (int i = 0; i < data.Height; i++)
{
for (int j = 0; j < data.Width; j++)
{
yatayHistogram[j] += z[0];//Yatay değerlerin parlaklıkları toplanıyor
dikeyHistogram[i] += z[0];//Dikey değerlerin parlaklıkları toplanıyor
z += 4;
} }
resim.UnlockBits(data);
}
Yatay histogram alındığı zaman maksimum nokta bulunurken histogramda bulunan girinti ve çıkıntıları önlemek için Yumuşatma(Smoothing) işlemi yapılır bu işlemse her bir yatay histogram değeri için kendisinden 2 önceki ve 2 sonraki noktalarının kendisiyle ortalamasının alınıp 2+2+1=5 e bölünmesiyle elde edilir.
Yukarıda da belirtildiği üzere Dikey histogram alındığında minimum noktaya karşılık gelen yerler göz ve kaşlardır.
Temel amacımız yüz resminde göz bebeğini bulmak olduğundan Dikey histogramda tarama yaparken aşağıdan yukarıya tarama yapıldığında ilk minimum nokta olarak göz bulunur.
Burdan 10 veya 20 pixel yukarısı ve aşağısı bir diktörgen halinde çıkarılıp tekrardan yatay ve dikey histogramlar alındığında her iki durum içinde minimum noktaya denk düşen kordinatlar Göz bebeğinin bulunduğu kordinatlardır. Herhangi bir yüz resminde Yatay ve dikey histogramı bulunup dikey ve yatay çizgilerle özellik noktaları verilmiş bir resim aşağıda verilmiştir.
Göz bebeği bulunduktan sonra diğer tüm özellik noktalarının bulunması için Yüz Geometrisinin oranlarından faydalanılmıştır.
YÜZ GEOMETRİSİ
Tabiattaki bir çok olayda benzeri görüldüğü gibi yüz bölgesinde de bir çok noktanın birbirine uzaklıklarının oranı Altın Oran değeri vermektedir buda gösteriyor ki insan yüzünde rastgelelik bulunmamaktadır.Yüz bölgesinde altın oran değeri olan 1.618 oranının bulunduğu noktalardan bazıları şunlardır.
  • Yüzün boyu / Yüzün genişliği,
  • Dudak- kaşların birleşim yeri arası / Burun boyu,
  • Yüzün boyu / Çene ucu-kaşların birleşim yeri arası,
  • Ağız boyu / Burun genişliği,
  • Burun genişliği / Burun delikleri arası,
  • Göz bebekleri arası / Kaşlar arası.
Aşağıdaki yüz resminde altın oranının bulunduğu bazı noktalar belirtilmiştir.
Yine insan Yüzüyle beraber Baş bölgesine ait bazı ilginç oranlar vardır.Bunlardan bazıları şunlardır.
  • İnsan gözleri baş yüksekliğinin tam ortasında bulunur.
  • Ağız,çene ve burnun genişliği hemen hemen aynıdır.
  • Her bir gözün genişliği Yüz genişliğinin 2/5 katı kadardır.
  • İki göz arasındaki uzaklık bir gözün uzunluğu kadardır.
Göz bebeği bulunduktan sonra yüzde bulunan oranlara göre diğer tüm özellik noktaları bulunur. Özellik noktalarını bulmada kullanılan bazı oranlar şunlardır.
  • Baş yüksekliği kadınlarda 7 birim erkeklerde 7.5 birim olarak ölçeklenmiştir.
  • Gözler Baş yüksekliğinin yaklaşık olarak yarısı uzunluğunda bulunmaktadır.
  • Baş genişliği kadınlarda ve erkeklerde 4.5 birim olarak ölçeklenmiştir.
  • Gözlerin ve burnun genişliği 1 birim uzunluğundadır.
  • Dudak çene arası yükseklik kadınlarda 1.3 birim erkeklerde 1.5 birim uzunluğundadır.
Yüz geometrisinden faydalanılarak bulunan yüzün özellik noktalarında bazı istisnai durumlar hariç ( sakal,yüzün yan durması) tam yerlerinde olması oranı yaklaşık olarak %95 lik bir orana tekabül etmektedir.Aşağıda yüzlerin özellik noktalarının belirlendiği resimler yer almaktadır.

0 yorum:

Yorum Gönder

yorum yaz