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.

Özellik noktalarının kodları aşağıda ki linktedir….

http://rapidshare.com/files/448103429/Y__z__n___zellik_Noktalarae_nae__Bulma_Kodu.rar

Mehmet Salih Deveci

Bilgisayar Mühendisi

Reklamlar
yorum
  1. […] TABANI TEMEL KAVRAMLARIC# ile Windows Servislerinin Sisteme YüklenmesiASP.NET DE LOGIN KONTROLLERYüz Resimlerinde Özellik Noktalarının BulunmasıFutoshiki […]

  2. Musa dedi ki:

    Merhaba Hocam. Çalışmalarınızı yakından takip ediyorum. Acaba yüze ait özelliklerin ulunması ile ilgili kodları göndermeniz mümkün mü?

    • BİLGİSAYAR MÜHENDİSİ dedi ki:

      Merhabalar musa…ben şuanda bir iş için Seyehatteyimde ana bilgisayarım yanımda değil…3-4 gün sonra tekrar yazıp bana hatırlatırsan ben yüklerim sisteme olurmu???

  3. Necip uysal dedi ki:

    Hocam eger seyahatten donduyseniz kodları yuklemeniz mumkunmu acaba?

    • BİLGİSAYAR MÜHENDİSİ dedi ki:

      Tamamdır yükledim kodu rapide indirebilirsin…Yanlız yaptığım çalışma özel bir çalışma olduğu için sadece o kısmını çıkardım.Küçük değişken hataları olursa onlarıda sen düzelt ancak kodun içindeki diğer matematiksel hesaplamalar felan doğru….

  4. Erhan ARI dedi ki:

    merhabalar;
    yüzde özellik tespiti yaparak veritabanında ki kayıtlardan karşılaştırma ile kişi tespiti üzerinde öğrencilerimle çalışıyoruz. (bu arada teknik lise bilişim teknolojileri alanı öğretmeniyim) sizin çalışmanızda özellikler hesaplamalar ile yapılmış fakat bana örneğin gözbebeğinin tam olarak koordinatları gerekli. bunun için öncelikle burnu tespit ederek resmi üst ve alt oalrak ikiye oradanda dikey histogram ile resmi sol ve sağ olarak ikiye bölüyorum. böylelikle sol ve sağ resimlerde göz ve kaş kalıyor. fakat bundan sonra yatay ve dikey histogramlar işimi görmüyor. bundan sonrası için nasıl bir çalışma yapmalıyım.

    iyi çalışmalar…

    • BİLGİSAYAR MÜHENDİSİ dedi ki:

      Erhan bey benim çalışmamda her iki gözün başlangış kordinatları ve bitiş kordinatlarını buldum..Ancak bunu tam olarak gerçekleyebilmek için Ya Face Detection yapmanız lazım yada Tam bir yüz resmi almanız lazım…Bunu yaptıktan sonra yatay histogramla yerel maksimum noktası olarak burnun yatay kordinatını,düşey histogramlada gözün yatay kordinatını bulduktan sonra bu 2 noktanın kesişimi tam iki kaşın ortasında burnun üst kısmına tekabul etmektedir.Burdan sonrasında Yüz geometrisi devreye giriyo Altın oran değeriyle Gözün başlangıç noktalarını bulursunuz…

  5. Abdurrahman BALK dedi ki:

    Kolay gelsin hemşerim!…
    Salih bu kodları bana gönderebilir misin

    • BİLGİSAYAR MÜHENDİSİ dedi ki:

      Sağol Abdurrahman….Yazıyı tam okumadığın hemen belli oldu 🙂 ..Yazının en altına bakarsan rapid linkini göreceksin 🙂

      • Ozan Tabakoğlu dedi ki:

        Merhabalar Hocam Rapid Linki Patlamışta Zahmet olmazsa yenilermisiniz…

  6. dilek dedi ki:

    kolay gelsin hocam..biz bi ödev hazırlıyoruz…webcam dan aldığımız resmi ad soyad trih bilgileriyle beraber sql veri tabanına kayıt edip istendiğinde de çağırma kısmında takıldık..acaba yardımvı olabilir misiniz??ii çalışmalar

    • BİLGİSAYAR MÜHENDİSİ dedi ki:

      Yardımcı olmaya çalışırım elimden geldiği kadar…Ancak probleminizin ne olduğunu öğrenebilirmiyim ???

      • dilek dedi ki:

        problem su ki hocam şimdi bizim yapmaya calıştığımız; uv ve ır ledleri bilg. kontrollü yaktıktan sonra düzeneğe monte edeceğimiz webcam den resim almak o resmi kayıt etmek, ve istendiğinde o resim ve kişi bilgilerini çağırmak…projemizin asıl yapması gereken bu resme cilt analizi yapmaktı ancak çok az vaktimiz kaldığı için bu kadarı bari yetişşe diye umid ediyoruz açıkcası biraz boyumuzu astı galiba…ama ugrasıyoruz da…

      • BİLGİSAYAR MÜHENDİSİ dedi ki:

        Merhaba Dilek hanım Sql e resim kaydetme ve bunu gerektiği zaman çağırma kısmında bir problemmi yaşıyorsunuz ??? Yada Web Cam den görüntümü alamıyorsunuz veri tabanıyla arasındaki bağlantıyımı kuramıyorsunuz ??? Bu konudaki yapamadığınız şey yada sorununuz nedir ???

  7. dilek dedi ki:

    Mrb hocam, Hem Sql e resim kaydetmede hem bağlantı kurmada hem de webcamden görüntü almada sorun yaşıyoruz.. Webcamcapture.dll nesnesini kullanarak görüntü almaya çalıştık fakat nesne webcami açıyor ancak picturebox a görüntü gelmiyor. Şimdiden teşşekkürler.

  8. dilek dedi ki:

    inceleyelim…tesekkürler hocam yardımlarınız için…

  9. dilek dedi ki:

    hocam biz indiremedik o adresten???

  10. dilek dedi ki:

    e mail adresime gönderir misiniz eger sakıncası yoksa

  11. serkan dedi ki:

    sayın hocam rapid linki çalışmıyor kodları mail adresime göndere bilirmisiniz. ben mimik tanıma üzerine bir çalışma yapmak istiyorum öğrencilerimle birlikte bu konuda bize yardımcı olabilrmisiniz.

  12. yetsin dedi ki:

    Güzel bir makale olmuş, tebrikler. Linki yenileyebilir veyahut mailime örnek uygulamayı gönderebilir misiniz?

    Çalışmalarınızda başarılar.

  13. Servet dedi ki:

    Merhaba hocam yardımınıza ihtiyacım var.Yatay ve dikey histogramlar kafamı karıştırdı.Biraz daha ayrıntılı olarak anlatır mısınız?

  14. serkan dedi ki:

    c’de yüz ifadelerini tanıma işlemi için basit kodlar lazım sadece verilen resmin normal gülen veya sinirli oldğunu sınıflandıracak bu işlemle ilgili kod varmı elinizde

  15. serkan dedi ki:

    sayın hocam linkten indirme yapamıyorum program kodlarını metinserkan@hotmail.com adresine göndere bilirmisiniz. kullandığınız algoritma ilgili bilgide varsa gönderirseniz sevinirim

  16. serkan dedi ki:

    linkleri indiremiyorum kodu metinserkan@hotmail.com adresine gönderebilirmisiniz

    • BİLGİSAYAR MÜHENDİSİ dedi ki:

      İyi Günler,Bu projenin kodunu yüklemiştim rapid e ancak şimdi projeyi bulamıyorum çok uzun oldu bu projeye bakmayalı… Yardım edemediğim için kusura bakmayın…

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s