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.

 

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

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

 

Oracle Exadata SQL Server Goldengate Weblogic EBS ve Linux konusunda aşağıdaki konularda 7×24 Uzman Danışmanlara yada Eğitimlere mi
İhtiyacınız var [email protected] adresine mail atarak Bizimle iletişime geçebilirsiniz.

– Oracle Veritabanı Danışmanlığı
– Oracle Veritabanı Bakım ve Destek
– Exadata Danışmanlığı
– Exadata Bakım ve Destek
– SQL Server Veritabanı Danışmanlığı
– SQL Server Veritabanı Bakım ve Destek
– Goldengate Danışmanlığı
– Goldengate Bakım ve Destek
– Linux Danışmanlığı
– Linux Bakım ve Destek
– Oracle EBS Danışmanlığı
– Oracle EBS Bakım ve Destek
– Weblogic Danışmanlığı
– Weblogic Bakım ve Destek
– Oracle Veritabanı Eğitimleri
– Oracle VM Server Danışmanlığı
– Oracle VM Server Bakım ve Destek
– Oracle EPPM Danışmanlığı
– Oracle EPPM Bakım ve Destek
– Oracle Primavera Danışmanlığı
– Oracle Primavera Bakım ve Destek
– Oracle Eğitimleri
– SQL Server Eğitimleri
– Goldengate Eğitimleri
– Exadata Eğitimleri
– Linux Eğitimleri
– Oracle EBS Eğitimleri
– Oracle VM Server Eğitimleri
– Weblogic Eğitimleri
– Oracle EPPM Eğitimleri
– Oracle Primavera Eğitimleri

About Mehmet Salih Deveci

I am Founder of SysDBASoft IT and IT Tutorial and Certified Expert about Oracle & SQL Server database, Goldengate, Exadata Machine, Oracle Database Appliance administrator with 10+years experience.I have OCA, OCP, OCE RAC Expert Certificates I have worked 100+ Banking, Insurance, Finance, Telco and etc. clients as a Consultant, Insource or Outsource.I have done 200+ Operations in this clients such as Exadata Installation & PoC & Migration & Upgrade, Oracle & SQL Server Database Upgrade, Oracle RAC Installation, SQL Server AlwaysOn Installation, Database Migration, Disaster Recovery, Backup Restore, Performance Tuning, Periodic Healthchecks.I have done 2000+ Table replication with Goldengate or SQL Server Replication tool for DWH Databases in many clients.If you need Oracle DBA, SQL Server DBA, APPS DBA,  Exadata, Goldengate, EBS Consultancy and Training you can send my email adress [email protected].-                                                                                                                                                                                                                                                 -Oracle DBA, SQL Server DBA, APPS DBA,  Exadata, Goldengate, EBS ve linux Danışmanlık ve Eğitim için  [email protected] a mail atabilirsiniz.

35 comments

  1. 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İ

      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???

  2. Hocam eger seyahatten donduyseniz kodları yuklemeniz mumkunmu acaba?

    • BİLGİSAYAR MÜHENDİSİ

      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….

  3. 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İ

      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…

  4. Abdurrahman BALK

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

    • BİLGİSAYAR MÜHENDİSİ

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

  5. 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İ

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

      • 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İ

          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 ???

  6. 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.

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

  8. hocam biz indiremedik o adresten???

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

  10. 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.

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

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

  12. 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?

  13. 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

  14. sayın hocam linkten indirme yapamıyorum program kodlarını [email protected] adresine göndere bilirmisiniz. kullandığınız algoritma ilgili bilgide varsa gönderirseniz sevinirim

  15. linkleri indiremiyorum kodu [email protected] adresine gönderebilirmisiniz

    • BİLGİSAYAR MÜHENDİSİ

      İ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…

  16. Merhabalar kodları acaba tekrar paylaşabilir misiniz. Rapidshare linki ölmüşte. yada mail olarak yollaya bilir misiniz. [email protected]

  17. mert tayfun beyoglu

    hocam iyi akşamlar C# dilinde aforge algoritmalarını kullanarak yapmış olduğum bir projede webcamdan almış olduğum görüntü üzerinde ki harekteli nesnenin x,y koordinatını label veya texe yazdırmak istiyorum fakat nasıl bir kod yazacağımı bulamadım yardımcı olursanız çok sevinirim. eğer çözüm bulabilirseniz mail adresim aşağıda ilginiz için şimdiden teşekkür ederim.

    [email protected]

  18. Hatice Arslantaş

    Bu projenin kodunu bulabilir misiniz acaba acil lazım da bana …. Teşekkür ederim şimdiden

  19. Hocam Merhabalar;
    Ben şuan tamda anlattığınızı yapmak istiyorum ama java bunu nasıl yapabilirim ? Bitmap nesnesi kullanmak zorundamıyım ? z diye tanımladığınız pointer’ı nasıl kullanabilirim javada ? Lütfen yardımcı olun …

  20. Merhabalar;
    yüzdeki göz bölgesini tespit ederek bir kare içine almak için paylaşabileceğiniz kaynak kod veya açık kütüphane var mıdır? iyi çalışmalar.

Leave a Reply

Your email address will not be published. Required fields are marked *