Author Archive
Linear Discriminant Analysis (LDA) and Principal Component Analysis (PCA) are widely used methods for linear dimensionality reduction. Due to its supervised nature LDA may perform better than PCA in many cases if the data set is sufficiently large. In literature, various relevance weighted variants of LDA are offered in order to increase the performance on challenging cases on which the original LDA may fail. In this work LDA with different relevance weighting functions is compared with the original LDA and PCA on a synthetically generated data set and three natural data sets which have previously been used for vision-based recognition tasks.
Introduction
Linear discriminant analysis (LDA) is a commonly used method for supervised linear dimensionality reduction on multivariate data in order to obtain lower dimensional data with increased separability. Even though the original LDA is a powerful tool in many cases, it has weaknesses due to its assumptions on data. In the original LDA it is assumed that the distributions of all the classes have the same covariance matrix which is the average of covariance matrices of all classes weighted by their prior probabilities. In this assumption each class including outlier classes affect the common covariance matrix directly proportional with their priori.
In order to achieve a better classification performance on multi-class data, some relevance weighted variants of LDA are proposed with dissimilarity functions using Euclidean distance, Mahalanobis distance (MD), Bayesian classification accuracy function (BA), approximate pairwise accuracy criterion (aPac) [2], Chernoff criterion (CC)[3] and evolutionary weighting algorithms which use these functions as a first generation of iteration [1].
In this study weighted LDA algorithms with different relevance functions will be compared with the original LDA and principal component analysis (PCA) in terms of classification performance on a synthetically generated data set and three natural data sets that have previously been used for hand gesture recognition, fingerspelling recognition and optical character recognition. The classification accuracy is computed by using k-nearest neighbour (k-NN) classifier for different values of k.
Giyim mağazalarında çoğu zaman bir ürünü almadan önce denemek isteriz, peki ya denemek mümkün değilse? Seçeneklerin artması ile denemenin daha zahmetli hale gelmesi bir yana online alışveriş gibi durumlarda denemek hiç mümkün olmayabilir. Bu yazıda geçenlerde geliştirdiğim bir uygulama olan sanal giyinme odasından bahsedeceğim. Uygulamada kullanıcı sanal bir ortamda giysi seçebilmekte ve seçtiği giysileri üzerinde deneyebilmektedir.
Uygulamayı geliştirirken bir görüntü ve derinlik sensörü olan Microsoft Kinect’i ve Microsoft Research tarafından geliştirilen yazılım geliştirme kitini (Kinect SDK) kullandım, uygulamanın çalışma mantığını genel olarak aşağıdaki gibi özetleyebilirim:
- Derinlik ve kullanıcı etiketi verisinden faydalanılarak kullanıcının canlı video akışından çıkarılması (arkaplan silme),
- İstenmeyen örtüşmelerin engellenmesi için ten rengi algılama,
- Giysi modelinin konum ve rotasyonunun eklem noktalarının koordinatlarına göre hizalanması,
- Giysinin eklemler arası uzaklık ve kameradan uzaklık verisinin kullanılarak ölçeklenmesi,
- Modelin kullanıcının üzerinde gösterilmesi.
Ön işlemler: arkaplan silme ve ten rengi algılama
Arkaplan silme bu uygulamada iki açıdan kolaylık sağlamaktadır. Birincisi kullanıcıyı çıkartarak ileriki işlemler için ilgili olan alanı (ROI) belirlememizi sağlamaktadır. Bu sayede ten rengi algılama aşamasında arkaplandaki ten rengine benzer alanların da ten rengi olarak algılanması problemi çözülmüş olmaktadır. İkincisi ise arkaplanı sildiğimizde herhangi istediğimiz bir arkaplanla değiştirerek sanal bir ortam oluşturabiliriz. KinectSDK’nın sağlamış olduğu derinlik ve kullanıcı etiketi verisini kullanarak basit bir maskeleme ile bu işlemi kolayca gerçekleştirebiliriz.

Giysi modeli görüntünün üstüne eklendiğinden kullanıcının hareketi modelin arkasında kısıtlı kalmaktadır. Bu bağlamda ten rengi algılamada istenmeyen örtüşmelerin engellenmesi amaçlanmıştır. Uygulamada ten rengine sahip alanlar en üst katmana taşınarak model ile örtüşmeleri engellenmektedir. Bu konuda yapılabilecek daha akıllıca bir çözüm derinlik verisinden faydalanarak giysi modeli ile kullanıcının derinlik sıralamasını ayarlamak olabilir. Burada böyle bir yaklaşımı benimsememin tek nedeni daha kolay olmasıydı. Kameradan gelen RGB görüntü YCbCr renk uzayına dönüştürülüp her renk kanalı için basit bir eşikleme uygulanması ten rengi algılamada en basit çözüm olarak kolayca gerçeklenebilir.
Hizalama ve ölçekleme
Kinect SDK ile sağlanan iskeletsel takipçi (skeletal tracker) vücut eklemlerinin 3 boyutlu koordinatlarını yaklaşık olarak vermektedir. Eklemlerin ekrandaki piksel konumları ve birbirleri ile yaptıkları açılardan faydalanılarak giysi modelinin konumlandırılması ve döndürülmesi sağlanmıştır. Omuzlar arası uzaklık, boy uzunluğu ve kullanıcının kameradan uzaklığı değerlendirilerek giysi modeli ölçeklenmiştir.
Daha neler yapılabilir?
Başarım kriterini kullanıcının giysi modeli ile örtüşme oranı olarak belirleyerek uygulamayı farklı koşullar altında test ettiğimizde %83 ortalama başarı oranı elde ettik. İlerleyen aşamalarda 3 boyutlu giysi modelleri ve fizik motoru kullanılarak daha gerçekçi sonuçlar elde edilebilir. Alternatif olarak giysilerin farklı açılardan çekilmiş fotoğrafları kullanılarak sahte 3d izlenimi oluşturulabilir. Örtüşmelerin işlenmesinde daha önce de bahsettiğim gibi renk özellikleri yerine derinlik verisinden faydalanılabilir.
Gelen geribildirimler üzerine şunu da belirtmek istiyorum evet daha önce yapılmış benzer uygulamalar var, zaten bu fikri ilk benim bulduğum gibi bir iddiada bulunmuyorum. Benimkisi ticari olmayan yalnızca deneysel amaçlı bir çalışma.
Daha detaylı bilgi için:
A more detailed report (in English): [ A Real Time Virtual Dressing Room Application using Kinect ]
HSV renk uzayında bildiğimiz gibi renkler renk özü (hue), doygunluk (saturation) ve parlaklık (brightness, value) değerleri ile tanımlılar. Bu uzaydaki renklerin renk ve doygunluk bileşenlerinin özelliklerinden faydalanarak genel amaçlı görüntü sınıflamada kullanabileceğimiz parlaklıktan bağımsız bir özellik çıkarıcı tanımlayabiliriz. Buradaki örnekte bir görselin “şehir”, “yüz”, “doğa”, “ev – dış görünüm”, “ev – iç mekan”, “ofis” ve “deniz” kategorilerinden hangisine ait olduğunu sınıflamaya çalışacağız.

Burada en basit yaklaşım muhtemelen görüntünün tümünün histogramını bir özellik vektörü olarak kullanmak olacaktır. Renk histogramları görüntülerdeki renklerin olasılık dağılımlarını ifade ettiğinden böyle bir özellik vektörü kullandığımızda sınıflama görüntüdeki genel renk dağılımına göre yapılmış olacaktır. Örneğin deniz görüntülerinde mavi tonlarının dağılımı, şehir görüntülerinde gri tonlarının dağılımı ağırlıklı olacağından bu iki kategorideki görüntüleri birbirinden ayırmak zor olmayacaktır.
Bu yaklaşımda yalnızca renk dağılımlarının dikkate alınması ve konumsal herhangi bir bilginin bulunmaması bazı durumlarda dezavantaj oluşturabilir. Bu örneğe baktığımızda bütün dış mekan görüntülerinin (şehir, doğa, ev, deniz) mavi gökyüzüne sahip olması oldukça muhtemel bir durum, bütün dış mekan görüntülerinde mavinin baskın olması bu sınıflara ait görüntülerin ayırt ediciliğinin azalmasına yol açabilir. Bu durumda görüntüleri eşit sayıda parçalara bölüp her bir bölme için ayrı histogram hesaplayabiliriz.
Örnek olarak her bir görüntüyü 4′e bölüp her bir bölme için hesapladığımız histogramlara ilave olarak tüm görüntünün histogramını da aldığımızda toplam 5 histogramdan oluşan bir görüntü tanımlayıcısı elde edebiliriz. Her bir histogram için 4 aralık değeri kullandığımızda toplamda 4 (aralık sayısı)*2 (kanal sayısı)*5 (histogram sayısı) = 40 boyutlu bir özellik vektörü elde etmiş oluruz.
Sınıflama için herhangi bir sınıflayıcı kullanabiliriz. Bu örnekte ben bir Destek Vektör Makinası (Support Vector Machine) kütüphanesi olan LIBSVM‘yi kullandım. Google görseller üzerinde yaptığım sınıflama %70 doğruluk oranı ile sonuçlandı.
Biraz geç oldu ama yine de yazayım dedim.
Yıldız Teknik Üniversitesinin 2011-2012 akademik yılının açılış törenine üniversite genelinde dereceye giren öğrencilerden biri olarak davet edildim.
6 Kasım 2011′de gerçekleşen törene eski mezunlardan Çevre ve Şehircilik bakanı Erdoğan Bayraktar da katıldı. Tam ödül töreni bitti diyordum ki 29 Kasım’da üniversite genelinde, fakültede ve bölümlerde dereceye girenlerin de davetli olduğu bir tören daha gerçekleşti.
Emeği geçen herkese teşekkür ederim.

Törenlerden kısa bir kesit (~7dk) için YouTube bağlantısı: [http://youtu.be/xj0-tjzM9yI]
Bugün neredeyse bütün kamera ve görüntü işleme yazılımlarının sahip olduğu görüntü birleştirme (panoramik çekim) özelliğinin nasıl çalıştığını merak ettiniz mi? Bu yazıda en basit anlamda görüntü birleştirmenin nasıl yapılabileceğine değineceğim, kaynak kodları ve daha detaylı raporu yazının ekinde bulabilirsiniz.
Birleştirilecek görüntüler farklı perspektiflerden çekilmiş olduğundan doğrudan görüntüleri uç uca ekleyerek güzel sonuçlar almamız pek mümkün değil. Bu yüzden ilk olarak görüntülerin perspektiflerini birbirine göre hizalamamız gerekiyor. Neyi neye göre hizalamamız gerektiğini bulmak için öncelikle ardışık iki görüntünün kesiştiği alandaki bazı ortak noktaları buluyoruz.
1. Ortak Noktaların Bulunması
Ortak noktaları SIFT veya SURF gibi çeşitli anahtar nokta tanımlayıcı algoritmalar yardımı ile otomatik olarak bulabiliriz ancak bu örnekte karmaşıklığı artırmamak için noktaları el ile işaretliyoruz. Örneğin iki görüntüde de yer alan binaların köşe noktalarını işaretleyebiliriz.
2. Görüntülerin Hizalanması
İlk görüntüde bulduğumuz ortak noktalardan oluşan matrise X, bu noktalara karşılık gelen ikinci görüntüdeki noktaların koordinatlarından oluşan matrise x diyecek olursak bu noktaları arasında eşleşme yapmamıza olanak sağlayacak “X = Hx” eşitliğini sağlayan bir dönüşüm matrisi (H) bulmamız gerekir (daha detaylı matematiksel açıklama için ekteki rapora bakabilirsiniz).
Dönüşüm matrisini bulduktan sonra ilk görüntüdeki bütün noktaların koordinatlarına bu dönüşümü uygulayarak hizalamadan sonra olması gereken koordinatlarını bulabiliriz. Bu şekilde bir dönüşüm uygulandığında bir bakıma noktalara birebir eşleme yapmış oluyoruz. Bu durumda görüntüdeki toplam nokta sayısı değişmemiş oluyor ve küçük bir görüntüden daha büyük bir görüntüye eşleme yaptığımızda elde edilen piksellerde boşluklar bulunması muhtemel olacaktır. Bu sebeple kaynak görüntüdeki her nokta için yeni değer hesaplamak yerine hedef görüntüdeki her noktanın olması gereken değerini interpolasyon ile hesaplamak (inverse mapping) daha mantıklı olacaktır.
3. Görüntülerin Birleştirilmesi
Görüntüler hizalandıktan sonra birleştirme aşamasında kesişen bölgelerde basitçe iki görüntünün ortalaması alınabilir veya yakın olan görüntünün ağırlığı daha yüksek olacak şekilde ağırlıklı ortalama alınabilir. Bu örnekte daha basit olması için kesişen bölgelerde en parlak pikselin değeri alınmıştır.
Daha detaylı bilgi ve MATLAB kodları için:
More detailed report (in English) and the source code: [Image Stitching /Mosaicing by Furkan Isikdogan]
Geçen hafta Yıldız Teknik Üniversitesinin sponsorluğunda Kıbrıs’ta ufak bir tatil yapma fırsatım oldu. Öncelikle Kıbrıs’ın tahmin ettiğimden çok daha küçük bir yer olduğunu söyleyebilirim. Şehirlerarası ulaşım bile dolmuş ve taksiler ile sağlanıyor. Girne’den Lefkoşa’ya gitmem yarım saat sürdü. KKTC oldukça ilginç bir yer, hem Türkiye gibi hem değil. Adadaki İngiliz etkisi havaalanına iner inmez hissediliyor; trafik soldan akıyor, araçların direksiyonları sağda, elektrik prizleri çoğunlukla İngiliz tipi, otellerde çok sayıda İngiliz turist var, tabelalardaki yazılar çoğunlukla İngilizce ve Türkçe…
Hava koşulları deniz tatili için pek elverişli olmasa da şehir turu için oldukça uygundu. Kıbrıs’taki ilk günümüzde kaldığımız otele 8km uzaklıkta olan Girne’ye ertesi gün de yaklaşık 30km uzaklıktaki Lefkoşa’ya gittik.
Girne’nin havası bana Şile’yi anımsattı. Büyüklük olarak da Şile’den pek farklı sayılmaz. Girne limanı, Girne kalesi ve St. Hilarion kalesi ve kale içindeki müzeler Girne’de görülebilecek yerler arasında. Kuzey Lefkoşa’da da St. Nicholas Kilisesi (Bedesten), Haydarpaşa Camii ve Selimiye Camii (St. Sophia Katedrali) dikkat çeken yapılar arasında. Lefkoşa’nın güney kesimini ise gezme imkanımız olmadı, yeşil pasaporta bile vize uyguluyorlar.
Zar sayısının, arka plan renginin veya zarların renginin belli olmadığı bir ortamda zarların kaç geldiğini otomatik olarak nasıl algılayabiliriz? Zarların daima açık renklerde olacağını varsayacak olursak akla gelen ilk cevap basit eşikleme uygulamak olabilir. Ancak aşağıdaki temsili histogramdaki gibi arka planın tek renk olmaması ve zar renklerinin arka plan renklerinin arasındaki değerlerde yoğunlaşmış olması probleme yol açacaktır.
Bu durumda zarların masada az yer kapladıklarını varsayarsak görüntüdeki en baskın renklerin arka plan deseni üzerinde yer alan renkler olacağını düşünebilir ve bu renk aralıklarını maskeleyerek zarların temiz görüntüsüne ulaşabiliriz. Ulaşırız demiyorum çünkü bu uygulamanın benim elimdeki veri setinde başarılı sonuçlar vermiş olması her koşulda iyi sonuçlar vereceğini göstermeyebilir.
Önerdiğim algoritmayı aşağıdaki gibi özetleyebiliriz:
- Görüntünün histogramının elde edilmesi,
- Histograma ortalama filtresi uygulanarak ( y[i] = (y[i-1] + y[i] + y[i+1])/3 ) keskinliklerin giderilmesi,
- Histogramda en baskın renklerin bulunması ve bu renklere belirli bir tölerans değerinden daha yakın olan renklerin görüntü üzerinde maskelenmesi,
- Görüntüye adaptif eşitleme uygulanması,
- Elde edilen ikili(binary) görüntüdeki bağlı bileşenlerin bulunması ve her biri içinde kalan boşlukların sayılması.

Çıktı: {5,2}
Not: Soldaki temsili histogram sağdaki görüntülere ait değildir.
Elde edilen bağlı bileşenlerin bize zarları vereceğini ve içlerinde kalan boşluk sayılarının da zarların kaç geldiğini vereceğini düşünürsek görüntüde kaç tane zar olduğunu ve her birinin kaç geldiğini bulabiliriz.
Edit: Ön işleme aşamasında baskın renklerin maskelenmesi yerine Biliteral Filter (Photoshop’taki adıyla Surface Blur) kullanmak bu problemde daha iyi sonuçlar veriyor.
Üniversitede son seneniz ve öğrenci değişim programları ile yurtdışında tecrübe edinme şansınızı kaçırdınız mı? Yurt dışı deneyim için Erasmus tek alternatif değil, teknik bir bölümde okuyorsanız IAESTE aracılığı ile yurtdışında daha kısa bir zaman diliminde daha çok teknik, kültürel ve sosyal deneyim edinme şansınız devam ediyor.
IAESTE (International Association for the Exchange of the Students for Technical Experience), özellikle teknik bir alanda eğitim gören üniversite öğrencilerine yurtdışında staj imkanı sağlayan bir staj değişim organizasyonu. Bu yazıda kısaca Erasmus programı ve IAESTE staj programlarını dikkatimi çeken başlıklar altında karşılaştırdım. Yurtdışında staj yapmış ve Erasmus programı ile yurtdışına gitmemiş birisi olarak bu değerlendirmemin ne derece objektif olabileceği tartışılır ancak yine de görüşlerimi paylaşmak istedim.
İklim
Uluslararası değişim programlarında tercih edilen ülkeler genellikle Türkiye’ye göre daha soğuk ülkeler. Erasmus programı ile bahar döneminde gidecek olsanız bile soğuk bir iklimle karşılaşmanız olası. Staj programları yaz döneminde olduğundan havanın gezmeye daha elverişli olması önemli bir avantaj.
Sosyal Çevre
Üniversitedeki sosyal çevreyi stajda bulamayacağınızı düşünebilirsiniz ancak IAESTE öğrenci komitesi gittiğiniz ülkede sizi yalnız bırakmıyor. Staj boyunca üniversite yurtlarında çeşitli ülkelerden gelmiş stajyerlerle birlikte kalınıyor. Haftasonları farklı şehirlerde gittiğiniz ülke ve çevre ülkelerdeki stajyerlerin katıldığı çeşitli etkinlikler düzenleniyor. Kısacası sosyal çevre olarak IAESTE stajlarının Erasmus programından geri kalır yanının olmadığını söyleyebilirim.
Maddi İmkan
Stajyerlere staj süresince gidilen ülkedeki temel ihtiyaçlarını karşılayacak kadar maaş veriliyor. Gözlemlediğim kadarıyla maaşlar Erasmus programında verilen hibe miktarları ile aşağı yukarı aynı seviyede. (Genelde aylık 250 – 650 Euro arası)
Okul Durumu
Staj programının bir diğer avantajı da okul ve dersler ile ilgili bir kaygınızın olmaması. Hatta zorunlu stajlarınızı da önceden tamamladıysanız staj defteri yazma veya staj saydırma gibi bir kaygınız da olmadan yazın keyfini çıkarabilirsiniz.
Tecrübe
Stajda edinilebilecek tecrübe staj yapılan kurum ve kişinin kendi çabasına bağlı. Şahsen benim stajım teknik açıdan da oldukça verimli geçti. Staj süresince verilen projeleri zamanından önce tamamladım. Çalışanlar problem çözmede oldukça yetenekliydi ve takıldığım noktalarda oldukça yardımcı oldular.
Farkındayım biraz yanlı bir karşılaştırma oldu ama birçok konuda yurtdışı staj programını öğrenci değişim programlarına göre daha avantajlı buluyorum.







