LinkedIn FriendFeed Twitter

Piramitler ve ölçeklendirme uzayları

by Ordinaryus 30. November 2009 01:18

Piramitler ve ölçeklendirme kavramı imajlar içerisindeki blobları ve bazı diğer featureları belirlerken sıklıkla kullanılmaktadır. Görüntüde işimize yarayan kısmı belirli oranda bozulmamasına özen göstererek küçültmekte daha sonra bunu çeşitli işlemlere sokmaktayız. Sıkıştırma işlemlerinde pattern recognitiona belirli alanlarda bu işlemlerden faydalanılmaktadır.

Burada önemli olan nokta bir cismin downsampling ile yani verilerin belirli kısmı seçilerek ufaltılması esnasında yumuşatma işleminin önemidir. Yumuşatma yapılmadığı takdirde komşu piksellerin farkı büyük olacağından hata giderek artmakta ve ufaltılan resimler bir süre sonra tanınmaz hale gelecektir.

Burada yeri gelmişken kaskat olarak konvolusyon işlemi yapmanın öneminden de bahsetmekte yarar var. Örnek verecek olursak yumuşatma işlemi ardından gelen bir maske bir resme ardı ardına uygulanmaktansa bu iki kernel kendi aralarından konvolve edilerek resme uygulanır. Teoride bu işlem aynı sonucu vermektedir.

Gauss işlemlerinde de farklı sigma değerleri için yumuşatma miktarı artmaktadır. Kaskat olarak uygulanan gauss işlemlerinde de eşdeğer sigma uygulanan kernellerin kareleri toplamının kareköküne eşit olmaktadır.

clip_image002

Görüntüde resolution düşürmek kimi durumda sakıncalı değildir çünkü işaret işleme örnekleme frekansı olgusu bu noktada bize neden bu işlemi yaptığımızı açıklamaktadır. Biz bir resimde downsampling yaparak resmi küçültüyorsak aslında bir örnekleme işlemi yapmaktayız bu nedenle bu örnekleme sonucu ortaya çıkan resmin eski resimle benzer olabilmesi için örnekleme frekansı da azalmış olmaktadır. Bu olguyu upsampling yaparken yani ufaltılmış bir resimden büyük haline dönerken daha iyi anlayacağız bu noktada Nyquist frekansı bizim için sınırlayıcı faktör olacaktır ve upsampling ile görüntüyü yeniden elde ederken belirli şartlar ile karşılaşacağız.

clip_image004

Aşağıdaki resimdeki kim olduğu belirsiz adamın görüntüsü üzerinde yapılan işlem dikkate alındığından resimlerin boyutları aynı oranda küçültülmesine rağmen soldaki resimlerin küçük çözünürlüklü hali daha anlaşılmaz bir hal almıştır. Bu bozulmaya aliazing etkisi denmektedir. Bunun nedeni downsampling yaparken resim üzerinde herhangi bir yumuşatma işleminin gerçekleşmemiş olmasıdır.

clip_image006

Temel olarak downsample yaparak boyut küçülmede bu sayede yapılmaktadır. Bir görüntüye gauss uygulanarak yumuşatıldığından gitgide komşu pikseller birbirine benzemeye başlamaktadır. Bu komşuların benzerliği fazladan temsil edildiği sonucunu ortaya çıkarmaktadır. Yani bir görüntü temsil etmek için gereken minimum örnekleme frekansının üstünde örneklemiş olmaktayız. Bu nedenle resim üzerine küçültme işlemi uygulanarak minimum frekansta örneklenmesi sağlanarak resmin boyut olarak ta daha az yer kaplaması sağlanır. 

 

Tam tersi işlemi upsampling yaparken inceleyelim. Bu sefer elimizde küçük bir görüntü yer almakta ve biz bu görüntüden daha yüksek çözünürlüklü bir görüntü elde etmeyi amaçlamaktayız. Bunu sıkıştırılmış bir resmin tekrar orijinal boyutuna döndürülmesi sürecinde de yapacağız.  

clip_image008

Burada resmin boyutları arttığında büyük olan görüntüdeki boş olan alanlara karşılık gelen noktaların bulunması problemi vardır. Burada boş kalan noktaları doldurmak için çeşitli yollar mevcuttur. Bunlardan ilki boş olan noktalara 0 değeri yazılması ve daha sonra gauss işlemi yapılarak o alan için elde edilen değerin 4 ile çarpılarak tüm karelere yazılmasıdır.

Bunun haricinde karşı düşen boşlukların kendisine en yakın piksel ile aynı değeri alacak şekilde doldurulması yapılan çözümlerden biridir.

Bu işlemlerin kullanım amaçlarının başında resim sıkıştırma gelmektedir. Bunun haricinde resimlerin detayları düşürülerek çalışılması ve saklanması da önemlidir. Yüz tanıma algoritmalarında kullanılan veriler genellikle 32x32 boyutlarından yüz örnekleridir. Bu boyutlarda bir verinin anlamlandırılması için özel olarak bu boyutlara getirilmesi gerektiği açıktır.

clip_image010 

Yukarıda görülmekte olan resimde bir görüntünün nasıl sıkıştırıldığı ve daha sonra eski boyutuna nasıl getirildiği gösterilmektedir. Bu işlem sırasında resimler önce yumuşatılmakta ve daha sonra sıkıştırılmaktadır. Yumuşatılan resim ile Resmin önceki hali arasındaki fark bize geriş dönüş işlemlerinde lazım olacağından saklanmaktadır. Bu işlem istenilen seviyeye kadar tamamlandığında elimizde sonuç itibariyle orijinal resimden daha küçük boyutta maskeler ve en son ufaltılmış son görüntümüz bulunmaktadır.

Uygulama çalıştığı zamanda bu ufak boyutlarda saklanmakta olan görüntü tekrardan boyutu arttırılmakta ve saklanmakta olan maske ile toplanarak büyük hali orijinal olarak elde edilir. Bu işlem maske sayısı kadar tekrarlandığında ilk baştaki orijinal resim elde edilmektedir. 

Tags:

Image Processing

RANSAC (RANdom SAmple Consensus)

by Ordinaryus 30. October 2009 12:05

Elimizde pek çok verinin bulunduğu bir sistem düşünelim. Bunlar uygun 2 boyutlu düzlemde karşılık geldiği noktalar bulunmakta ve aralarında herhangi bir ilişki olmayabilmekte. Bu ilişkisizliğin nedeni sistemin ölçüm ve hesap hataları olabildiği gibi dağılımın rastgele olmasından da kaynaklanıyor olabilir. Ancak belirli yaklaşımlarla bu dağınık veri kümesi arasında bir ilişli kurulmaya çalışılabilir. Bunun en sık kullanan yöntemi EKK(En küçük kareler) metodu olarak bilinen yoldur ama birazdan açıklanacak olan dezavantajları nedeniyle kullanımı her zaman tercih edilmez. EKK genel olarak bir veri kümesini istenen eğri veya lineer bir doğruyla formulize etmeye dayanan ve bunu gerçeklerken de hatanın minimum olmasını sağlayan yöntemdir. Önerilen eğri ve verilerimin arasındaki farkın karelerinin toplamı alınarak hata bulunabilir.

clip_image002

Yukarıdaki resimde görüldüğü üzere noktaların dışa düşen 2 nokta haricinde EKK ile temsili oldukça başarılı olacaktır ancak bu dışarıda kalan noktalar nedeniyle ve hatanın uzaklığın karesiyle artmasından ötürü doğru sonuç elde etmek zor olmaktadır. RANSAC kullanıldığında ise bizim sonuçlarımızı olumsuz etkileyen noktaların hesaplamanın dışından bırakılması sağlanmaktadır.

Dışa düşen noktaların haricinde çözümdeki bir diğer problem ise cismin birden çok ayrı elemanı olması yani aynı grafikte 2 farklı doğru için dağılım sergilenebiliyor olması problemidir.

clip_image004

Burada görüldüğü gibi RANSAC çalıştırıldığında rastgele alınan 2 nokta ve bunun belli genişlikteki bandından iç bölgeye giden elemanlar sayılır ve bu örnekleme birkaç defa tekrarlanır. Maksimum sayıda nokta içeren çift bizim için saklanır ve bu çift ve çevresindeki noktalar bizim için doğrunun temsilinde kullanacağımız doğrulardır.

Burada fark edileceği üzere seçilen noktalar rastgele seçilmekte ve en iyi temsili veren 2 nokta her zaman bulunup bulunamayacağı problemidir. Bu nedenle örnek sayısı bizim için önemli bir parametredir. Nokta sayısının 2li kombinasyonları kadar örnekleme yapıldığında  en iyi sonucu bulmak garantilenmektedir ancak işlem gücüde önemli bir parametre olduğundan ve örnek sayısı genellikle çok fazla olduğundan olasılıksal olarak hesaplanmaktadır.

clip_image006

Burada verilmekte olan formül bize yüksek olasılıkta başarılı olmak için gerekli olan örnek sayısını vermektedir.

Örnek sayısının bu kadar önemli olması RANSAC’ın ne tür uygulamalarda kullanıldığı anlatıldığından daha iyi anlaşılabilmektedir. Bir uygulama alanı olarak motionda kullanılabilmektedir. Resimlerde hareket eden cisimlerin konumları afine trasformda olduğu gibi değişmekte ve cisimler genellikle görünüş itibariyle resimler arasında tanınması zor olmaktadır. Bu nedenle Harris ile mümkün olduğunca fazla köşe tespit edilmeye çalışılmaktadır. Daha sonra bu fazlaca olan dataların Ransac ile kullanılabilir olanları belirlendikten sonra işlemler bunlarla devam etmektedir.

Tags:

Image Processing

Köşe Tespiti

by Ordinaryus 30. October 2009 12:03

Köşe noktaları görüntü işlemenin ileriki konularında sıklıkla kullanılmaktadır ve pek çok yerde performans kriteri olarak rol oynamaktadır.

Köşelerin kısaca bizim için ne ifade ettiğinden bahsedersek görüntüdeki keskin noktalardır ve 2 kenarın birleşme noktasında olduklarını söylemek mümkündür. Köşe tespit etmede Harris detektörü kullanılmaktadır.

clip_image002

clip_image004clip_image006Yukarıdaki denklem Taylor serisine açılarak daha anlamlı hale getirilebilmektedir. Farkın karesi halinde olan ifadedeki ilk terimin Taylor açılımını yapacak olursak.

 

 

 

Yukarıda görüldüğü gibi M matrisi Taylor açılımından sonra ortaya çıkmış olan intensity değerlerinin oluşturduğu matrissel bir ifadedir.

Bu matris ifadesinin özdeğerleri(eigen values) ve özvektörleri(eigen vector) kullanılarak resimdeki noktaların gerçekte köşe, kenar veya yüzey olarak neye karşılık geldiğini görmek mümkündür.

clip_image008

Harris algoritmasında resim üzerinde gezdirilen pencere ile yata ve dikey türev operatörlerine olan ilişikleri ve buradan elde edilen M matrisinin özdeğerleri kullanılmaktadır. Görsel olarak açıklamanın daha kolay olmasından dolayı aşağıdaki şekillere başvurulmuştur. Aşağıda yatay ve dikey türev operatörlerinin farklı özellikteki resimlere etkileri gözlenmiştir.

clip_image010

 

Burada farklı eksenlerde türevler alınmaktadır. Bunların dağılımları eksenler dikey ve yatay türev noktalarının dağılımını gösterecek şekilde düzenlenirse buradaki dağılımın bize yüzeyin özellikleri hakkında bilgi verdiği görülür bu dağılımda yer almakta olan noktaların kapsanmasını sağlayan minimum alana sahip elips ve bunun yarıçapları bizim özdeğerlerle bulduğumuz sonuçla aynıdır. Bu özdeğerlerin farklı veya elipsin yarıçapları bize feature türünü vermektedir.

clip_image012

clip_image014Özdeğerlerin değişimi incelendiğinde aralarındaki farkın az olduğu yani çembere yakın olan bölgelerde gösterdikleri özellikler köşe veya yüzey olmaları yönündedir. Burada yüzey ve köşeleri birbirinden ayıran nokta özdeğelerin büyüklükleridir. Geniş bir alana dağılım gösterilmesi durumunda bu bölgenin köşe olduğu söylenebilmektedir. Bunun dışından eğer özdeğerler arasındaki fark büyükse bu durumlarda yatay veya düşey eksende bir kenarla karşılaşmakta olduğumuz yorumu yapılmaktadır.

clip_image018 clip_image016

 

Yukarıda görülmekte olan formüller yardımıyla hesaplanan R değerinin 2 farklı eşik ile ayrılması sonucunda kenar, köşe, yüzey gibi featurelar belirlenmektedir. Burada k=0.04-0.06 gibi bir değer almaktadır. R değerleri sınırlandırılarak çok büyük R değerlerinin köşeleri, çok büyük değerlerde kenarları ve diğer aralıkta düz yüzeyler görülmektedir.

Harrisler bulunan köşe noktalarının sayısı resmin gürültülü olup olmamasına göre fazlaca değişebilmektedir. Ve bir köse noktası için komşu noktalarda da benzer sonuçlar olduğundan Harris ile olan nokta sayısının çok fazla olduğunu yazdığım programda gözlemlemiştim. Bu tür bir durumda nokta sayısını azaltmaya yönelik olarak yapılabilecekler threshold değerleri ile oynamak yada fazlaca bulanan noktaları belirli komşuluklarda temsil eden daha az sayıda nokta ile temsil etmektir

Tags:

Image Processing

Kenar Tespiti

by Ordinaryus 30. October 2009 12:00

Kenar olarak nitelendirilen bölgeler görüntüdeki renk değerlerinin yüksek hızda azaldığı ve düştüğü noktalardır. Bu noktalardaki değişimin hızlı olması yatay ve dikey olarak farkların kareleri toplamından bulunabilmektedir.
Yatay veya dikey kenarları tespit ederken fark işlemine karşılık gelen bir konvolusyon kullanılır. Fark işlemi yapılmasının sebebi ayrık zamanda işlemler yaptığımızdan bunun matematiksel karşılığının türev olmasıdır.

clip_image002

Yatay ve dikeyde kullanılan işlemlerin matrissel ifadeleri clip_image004 olmaktadır.

Kenar işlemi bir çizgi üstündeki değişimlere hassas olduğundan dolayı fark işlemleriyle hızla olan değişimlerin performans üzerinde etkileri fazladır. Bu nedenle gürültülü resimlerde sonuçlar iyi olmamaktadır. Kenar tespiti için bu nedenle öncelikle resimde yumuşatma ve gürültü giderme işlemleri uygulanmaktadır.

Gürültü giderme ve türev alma işlemleri 2D matrislerde bir arada yapılabilmektedir. Burada kullanılan operatörler kenar tespitinde iyi sonuçlar vermektedir.

clip_image006

Yukarıda görüldüğü gibi yatay ve dikey eksende farklı amaçlarda bu maske kullanılabilmektedir. Dikey kenar tespiti ve yatayda yumuşatma işlemi uygulanmıştır.

Sobel operatörü bu amaçla yaygın olarak kullanılmaktadır. Bu operatörün nasıl çalıştığı aşağıdaki şekilde açıklanmıştır.

clip_image008 

Burada görüldüğü gibi Sobel operatörü yatay ve dikey olarak uygulanmaktadır. Bunun sonucunda resimdeki kenarlar tespit edilmiştir.

clip_image010

Kenar tespiti bu tarz pencere operatörleri yardımıyla yapılmaktadır. Burada kenar tespiti sırasında önemli olan 3 noktaya değinmekte yarar var.

·        Gürültü giderme: Gürültüye hassas türev operasyonu uygulandığından ötürü kenarları doğru tespit etmek adına mümkün olduğunca gürültüden arındırmak önemlidir.

·        Kenar maxima noktalarının tespiti: Burada amaçlanan kenar olabilecek noktaların tespit edilmesidir. Daha sonra buradaki noktalardan tam bir kenar hattı elde edilebilecektir. Kullanılan kernelin boyutuna ve yumuşatma, fark  için kullanılan katsayılara bağlı olarak farklı kenar tespiti maskeleri kullanılabilmektedir.

·        Kenar belirleme: Maskeler yardımıyla bulunan kenar olabilecek noktalar üstünde işlemler uygulanarak gerçek kenar doğrularının bulunması amaçlanmaktadır. Burada inceltme işlemi veya thresholding ile belli eşik değeleri ile hatalı kenar bölgelerinin ayrılması amaçlanmaktadır.

Canny Edge Detection

Canny edge detection en başarılı ve sıklıkla kullanılan kenar tespiti yöntemlerinden biridir. Kullanılan operatörün sürekli zamanda gaussun birinci türevi biçiminde olduğu görülmektedir. Gauss fonksiyonları sahip oldukları özelliklerden ötürü görüntü işlemede sıklıkla kullanılmaktadır.

clip_image012

 

 

Canny algoritması dikey ve yatay eksende türev yapmaktadır. Buradan çıkan gradientlerin kareleri toplamı bize gri seviyede kenarları ortaya çıkarmaktadır. Thresholding yardımıyla bu değerler istenen sınıra çekilmektedir. Bu aşamada kullanılan sonucun daha verimli olmasını sağlayan histerisiz thresholding ve linking yöntemleri de beraberinde kullanılmaktadır.

Histerisiz thresholdingde alt ve üst eşik değerleri belirlenmektedir. Bu değerler arasındaki noktalar kenar noktaları olarak belirlenmektedir. Bu sınırların dışından kalan noktalarda ise komşu olduğu noktalara bakılarak eğer kenar olarak tespit edilmiş bir noktaya bağlantılı olup olmadığına bakılmaktadır. Böyle bir durumda bu noktada bizim için kenar olmaktadır.

clip_image014

Kenar tespiti sırasında kullanılan bir diğer işlem ise thinning işlemidir. Burada kenar olarak belirtilen noktalar tek bir eğri olarak indirgenmeye çalışılmaktadır. Bunun için eğrinin üzerindeki normal vektörleri boyunca olan fazla noktalar ortadan kaldırılmaktadır.

Tags:

Image Processing

Temel İşlemler

by Ordinaryus 30. October 2009 11:56

Görüntü işlerken en öncelikli kullandığımız şeyler temel filtrelerdir. Matlab, OpenCV gibi Image Processing uygulamalarında kullanılan programlar ve kütüphanelerde bu fonksiyonlar hazır olarak gelmektedir. Ancak burada bu işlemlerin nasıl gerçekleştiğini ve mantıgını anlamak açısından bu yazıyı yazma gereği duydum. Burada yazıldığı şekilde kendi fonksiyonlarımızı yazmamız mümkün olmaktadır.

RENKLERİN SİYAH-BEYAZ GÖRÜNTÜSÜNÜ ELDE ETME

                Resimlerin pek çok filtre içerisinde işlenirken detaylarını azaltmak performansın artmasını sağlamaktadır. Bunun için resimlerin renk bilgilerinden kayıp yapılarak performans yükseltilebilir. Grayscale filtresi bu tür işlerde kullanılmaktadır. Kırmızı, yeşil ve mavi renklerin belirli ağırlıklarla çarpılması sonucu elde edilen değerin 0-255 arası bir değer alması sonucu gri renk düzeyine indirgenmiş olur.          

 

void GrayScale()

{

      uchar* imgdata = (uchar*)src->imageData;

      int step = src->widthStep/sizeof(uchar);

      int channels = src->nChannels;

      int pxNum;

 

      for(int i = 0;i<src->height;i++)

      {

            for (int j = 0;j<src->height;j++)

            {

            pxNum = i*step + j*channels;

            imgdata[pxNum] = imgdata[pxNum + 1] = imgdata[pxNum+2] = (uchar)(imgdata[pxNum]*0.299 + imgdata[pxNum+1]*0.114 + imgdata[pxNum + 2]*0.587);

            }

      }

      cvReleaseImage(&frame);

      cvReleaseCapture(&capture);

}

 

clip_image002

                BINARY GÖRÜNTÜ ELDE ETME

                Daha öncesinde grayscale filtresi ile tek renge indirgenen resimlerin bazı durumlarda siyah beyaz olarak kullanılması durumu avantaj sağlayabilmektedir. Belirli bir eşik değerinin altında ve üstünde kalan değerlerin siyah veya beyaz renklere dönüştürülmesi için binary işlemi kullanılmaktadır. Binary görüntü elde etmekte en önemli nokta seçilecek olan eşik (treshold) değerinin doğru seçilmesidir. Çünkü yanlış seçilmiş bir eşik değerinde istenilen ayırt edilecek görüntü hiç gözükmeyebilir veya istenen cisimle beraber bazı ufak boyutlu parazitler veya başka cisimlerde çıkabilir bu nedenle eşik değeri çok iyi seçilmelidir. Pek çok uygulamada eşik değeri adaptif seçilmektedir. Aşağıda binary resim elde etmekte kullanılan kod parçası yeralmaktadır.

void Binary()

{

CvCapture *capture = cvCaptureFromCAM(-1);

      IplImage *frame;

      int j,pxNum;

      if(capture){

                  cvNamedWindow("Video",1);

                  for(;;){   

                        if( frame = cvQueryFrame(capture)){

                             cvErode(frame, frame, NULL,0.5);

                             uchar* imgdata = (uchar*)frame->imageData;

                             int step = frame->widthStep;

                              int channel = frame->nChannels;

                             int width = frame->width;

                             int height = frame->height;               

                               for(int i = 0;i<height;i++)

                               {

                                   for(j = 0;j<width;j++)

                                   {

                                       pxNum = i*step+j*channel;

                                         if(imgdata[pxNum]<125)

                                          {

                                              imgdata[pxNum] = 0;

                                              imgdata[pxNum+1] = 0;

                                              imgdata[pxNum+2] = 0;

                                         }

                                         else

                                         {

                                              imgdata[pxNum] = 255;

                                              imgdata[pxNum+1] = 255;

                                              imgdata[pxNum+2] = 255;

                                         }

 

                                    }

                               }

                             cvShowImage("Video",frame);

                        }

                        else

                             break;

                             }

                  cvDestroyWindow("video");

                  cvWaitKey(0);

                        }

 

      cvReleaseImage(&frame);

      cvReleaseCapture(&capture);

     

}

clip_image004

 

                INVERT FİLTRESİ

                İnvert filtresi aynı fotoğraf filmlerinin negatiflerinde olduğu gibidir renklerin normal koordinat düzlemindeki karşılığına denk gelmektedir. Her bir renk değerinin 255e tümleyeni alınmaktadır.

               

void Invert()

{

      CvCapture *capture = cvCaptureFromCAM(-1);

      IplImage *src;

      if(capture){

 

            if( src = cvQueryFrame(capture)){

            uchar* imgdata = (uchar*)src->imageData;

            int step = src->widthStep, pxNum,j;

            int channels = src->nChannels;

                 

                  for(;;){   

                        if( src = cvQueryFrame(capture)){

 

                             for(int i=0;i<src->height;i++)

                             {

                                   for(j=0;j<src->width;j++)

                                   {

                  pxNum = i*step+j*channels;

                  imgdata[pxNum] = (uchar)(255-imgdata[pxNum]);

                  imgdata[pxNum+1] = (uchar)(255-imgdata[pxNum+1]);

                  imgdata[pxNum+2] = (uchar)(255-imgdata[pxNum+2]);

                                   }

                              }

                        cvNamedWindow("inverted liv",1);

                        cvShowImage("inverted liv",src);

                        }

                        else

                             break;

                  }

      cvDestroyWindow("video");

      }

                 

clip_image006

Burada gösterilen algoritmalar resmin dizi içerisindeki elemanlara erişerek piksel bazlı işlemler yapılmasıdır ve çalışma mantığının anlaşılması açısından önemlidir. Ancak OpenCV içerisinde bu işlemleri gerçekleştiren ve hızlı çalışmakta olan fonksiyonlar bulunduğunun da bilinmesi gerekmektedir. 

Tags:

Image Processing

OpenCV 2.0 Geliyor

by Ordinaryus 26. June 2009 15:36

 

 

Görüntü işleme amacıyla en populer olarak kullanılan ve 1.0 ve 1.1 sürümlerinden sonra OpenCV 2.0 sürümünü çıkarmaya hazırlanıyor. Temmuz 2009da yani bu gunlerde betası çıkıcak olan yeni sürümün ağustos ayında yayınlanacağı duyurulmuş. 

Bu sürümde önceki sürüme göre yenilikler olacağıda internette duyurulmuş. C++ için yeni interfaceler olacağı, 2D ve 3D için yeni özellikler olacağıda duyurulmuş. Bunların ne kadarı gerçekleştirilicek suan için belli olmamakla beraber yakından takip ediyor olacağız. Ayrıca yeni uygulamalarda bununla beraber geleceği yönünde yazılanalr var. Ten rengi tespiti takibi ile alakalı, 3D yapılandırma gibi şeylerde yer alıcakmış.

Ayrıca C++ API dokumantasyonuda yapılmaktaymış Wink

Ayrıntılı bilgiye buradaki linkten ulaşabilirsiniz 

Tags:

Factorization

by Ordinaryus 25. June 2009 02:08

 

Bir ortamı görüntü verilerini kullanarak 3 boyutlu olarak inşa edebilmenin birden çok yolu vardır. Aydınlanmadan, stereodan, hareketten faydalanarak bu işlem gerçekleştirilebilir. Shape from motion kullanılarak bir görüntü dizisindeki veriler yardımıyla 3 boyutlu olarak o ortam yeniden oluşturulabilir. Bu amaçla Kanadenin önerdiği Factorization metodu sıklıkla kullanılmaktadır.

 


 

Burada ortamda yol alan bir kamera ardı ardına olarak aldığı görüntüleri birleştirerek ortamın modelini oluşturabilmekte. Burada kamera ve dünya koordinatları arasında bir dönüşüm uygulanmaktadır. Kamera üzerindeki her bir noktanın dünya üzerinde karşılık geldiği nokta bulunmaya çalışılmaktadır. Bu sisteme kamera parametreleri de dahil edilirse ve gerekli sadeleştirmeler yapılırsa aşağıdaki ifadelerelde edilir.

 

 

 

Burada bu ilişkiler kullanılarak ardışık F adet resimdeki, N adet nokta için bu ilişkiler yazılmaktadır. Ancak F adet görüntüde bunlara karşılık düşen noktalar farklı olduğundan ağırlık merkezi alınarak bu nokta kabul edilir. Denklemlerdeki translition terimi bir eksendeki kaymaya karşılık gelmektedir. Eğer ağrılık merkezi her bir nokta için olan koordinatlardan çıkarılırsa bu terimin kullanılmasına gerek kalmamaktadır.

Bu şekilde bilinmeyen kamera komuyla alakalı parametrelerden kurtulmuş olduk. Bu sayede kalan bilinmeyen verileri daha düzenli bir şekilde matris formundan görmemiz mümkün oldu. Elde edilen büyük boyutlu matris Single Value Decomposition (SVD) ile parçalanmıştır. Bundan sonra bizim için daha doğru sonuçlar vermekte olan ifadeleri elde edebilmek için rank teoremine göre bu ifadelerin öz değerleri içerisinden en büyük olan 3 tanesi seçilmektedir. Hata olmayan durumda sadece 3tanesi sıfırdan farklı olmaktadır ancak hataya açık bir sistemde çalışıldığından en büyük 3 öz değer kullanılmaktadır ve ifade sadeleştiğinde aşağıdaki formda olmaktadır.

 

 

 

Factorization ile yapılmış bir çalışmanın sonuçları etkileyici gözükmekte aşağıda bunları görebilirsiniz.

 

Tags:

Image Processing

Image Processing HW_3

by Ordinaryus 5. April 2009 02:33

In this Project we aim to rebuild the image and construct the missing parts of the surface. There are some methods for this. I used Regularization Method for this.

Regularization method is a theoretical approach to solve ill-posed problems such as early vision problems. Well-posed problems can be defined if there is a solution and this solution is unique and continuously.

Theoretical approach is based imposing the smoothness constraint that means the solution is smooth over the data. Using regularization theory the reconstructed surface must minimize the function that shown below.

 

 

First function is called the energy function. We use this to determine the energy of the membrane which gives us how our image is close to the original image. First term of this equation measures the closeness of the surface. “d” is the original value which we aim to make this value equal to our final values. Second term is used for the smoothness of the image. If image is smooth enough the pictures errors are low but the quality of the image is not same as the original. Making these function work well we change some parameters.

One of the important parameter is 𝜆 value. We use it to make balance between closeness and smoothness. This parameter is called regularization parameter. It effect the operation time to minimizing the error.

If we choose this value too small then the operation time takes longer. It is mostly chosen between 0.5 and 100.

To minimizing the energy function we have to find the local minima of this function. So we get the derivative of the energy function equal to zero.

Then we use this derivation in our algorithm. We calculate the all pixels values by iterating the some function. In this iteration Successive Over Relaxation (SOR) method is used. The gradient value of the energy function multiplied with some constants and subtracted from the previous value of the pixel.

 

 

Second equation there is a relation with the time. U elements which symbolize pixel values in our equation is calculated by using its past value. Gradient of the energy function multiplied by w/T. W is called a relaxation parameter and the T is the constant chosen to ensure convergence of the any w between 0 and 2. T is change in the image by change of the pixel coordinates. There are three case for T. Corner, edge and middle of the image.

By using these formulas I finally use the gradient as shown up as third equation

This equation can be use in the middle of the image, but when we calculate the corner or the edge pixel? We use same format but different formula. Because when we use the corner or the edge we do not have always neighbor pixels. For example when we calculate the corner there are two neighbors, but at the edge point there are three. So there are minor changes in the formula.

T value is relational with the neighbor number. It is calculated by using the number of the neighbors. T is equal to β+4𝜆 in the middle, β+3𝜆 at the edges and β+2𝜆 at the corners.

I wrote the algorithm and checked how well it works with different percentage of the missed pixels.

 

As shown in the examples after the %50 missing pixel we are not getting good image but we can made better approximations by changing some constants.

By changing the error threshold value we get better result but try to change 𝜆 and w is better solution.

We chose 𝜆 value 0.5 before but it is the lower limit of this value. Now I choose different 𝜆 values for result and decide how it effects the image. We used different 𝜆 values for 75% missed pixel image and the result is clear. By heightening the 𝜆 value it continues a little more becoming better. But after some value it has a slightly change. But w value is also important and there is a way to make the w value to become optimum. This formula related to 𝜆 value.

 

Tags:

Image Processing

Distortion Belası :)

by Ordinaryus 14. March 2009 14:37

 

Görüntü işlemenin belkide en büyük sorunlarından biri olabilir. Kalibrasyon problemleri ve distortion gibi durumlarda instrict ve extrinct parametrelerin belirlenmesi. Burada yazın aviyonik labda çalışırken düzenlemiş olduğum bir distortiyon giderme yöntemi vardı. Distorsiyon probleminin ana sorunu olan görüntüdeki noktaların gerçekte karşı düştükleri konumu belirlemeye yönelik. Burada yere bir grid döşüyerek belirli ölçümler yaparak bir eğri uydurmustum.

Yakın zamanda bu işi çok daha guzel gerçekleştiren bir sistemle tanıştım. Sonuçları gerçekten muhtesem. Matlabde bir toolbox olarak hazırlanan bu sistemi kullananların sanırım distortion diye bir problemi kalmayacak artık.

http://www.vision.caltech.edu/bouguetj/calib_doc/   Adresinde yer alan toobox kullanımı oldukça kolay. Damalı bir tahta yardımıyla belirli açılardan görüntüyü alıyor ve her resim için kendi köse noktaları önerilerini gösteriyor. Dogru sonuçlara ulaşıncaya kadar farklı resimler üstünde çalışmaya devam ediyor. Bu şekilde gerçek köse noktalarını yakalamış oluyor. Sonuçlardan biraz bahsedersek sanırım çok daha iyi olucaktır.

 



Burada görmüş olduğunuz arayuz ile istediğin diğer pekçok işlemi gerçekleştirmeniz mümkün. Bunun yanısıra instrinct parametreleride kullanmanız için size vermekte daha sonra kendi matlabdeki görüntü işleme uygulamanızı yazarken bunu rahatlıkla kullanabilirsiniz.

 

 

 

Buradan gördüğümüz sonuçlar çok iyi derecede başarılı olmakta bu nedenle kalibrasyon konusundaki sıkıntıların büyük çoğunluğu ortadan kalkmış durumda. Bu toolboxı bana öneren arkadaşıma buradan teşekkürlerimi iletiyorum. Ve bir sözle kapatıyorum "Kalibrasyon kutsaldır, inek gibi bişi"(Koyuncu E.,2008).

Tags:

Image Processing

Google Picasa

by Ordinaryus 13. March 2009 05:54

 

Google çalışıyor demekten kendimi alamıyorum. Bundan 2 yıl önce düşünmeye başladığım bir proje google tarafından gerçekleniyor sanırım. Günümüzde dijital dunyaya girmeyen hiçbirşey olmadıgını gözönüne alırsak. Fotograflarımızdan, videolarımıza ödevlerimizden mesajlarımıza yakın gelecekte telefon konuşmalarımıza hersey dijital olucak. 

Bu dijital olmak ne demek yani kolayca transfer edilip işlenebilicek. El yazmalarını pdflerden ayıran fark yani kısaca benim için. Ozaman çekildiğim her resim, sölediğim her söz bir sekilde burada bulutta biryerlerde. Ozaman hersey herkese açık demek bir bakıma dogru. Facebook gibi sosyal ağlarda yakında aynı hizmeti kullanıcak sanırım veya belkide var sadece biz bilmiyoruz. Google picasa bu konuda bir ilk olabilir. 

Resimlerimizi paylaşıyoruz ve picasa resimdeki insan yüzlerini tanıyor. Tamam buraya kadarı yapılabilir birde bunları grupluyor yani herbir insanın resmini ayırtedebilme yetenegine sahip. Ben bir arkadaşımın resmini işaretliyipismini giriyorum ve nekadar resim varsa hepsi onşa özdeşleşiyor. Korkunç değilmi =)

Ozaman picasadan alınmış bir screenshot bakalım google daha neler yapıcak diye bekliyorum.

 

Tags:

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

Ordinaryus Hakkında

Hayata gözlerini İzmirde açtı. 3 yaşında legolarla oynadı =) Küçük yaşta baskete başladı zaten başka sporlarla arası hiç olmadı. Orta okulda matematikle ilgilendi. Liseyi Karşıyaka Anadolu Lisesinde okudu. 

İTÜ Elektronik Mühendisliğinden 2010 yılında mezun oldu. Fizik bölümünde çift anadala kabul oldu lisans hayatına Fizikten devam etmekte. Koç Üniversitesinde Bilgisayar Mühedisliği Master programına kabul edildi ve akademik hayatının ilk adımlarını sevdiği bir alanda çalışarak atıyor. Fizik ve Bilgisayarın ortak noktalarını gördü ve bunları geliştirmek amacıyla çalışıyor.

Yazılımı sevdi.. Başlarda herşeyle ilgilendi web programlama da yaptı, sokette programladı yeri geldi ağ yönetimi ile uğraştı. Görüntü işlemeden keyif aldı Makine Öğrenmesi ve Örüntü Tanımada kendisini geliştirmeyi istemekte.

2008te MSP oldu belkide bu blogu yazmaya başlamasında en büyük etken=) Bu görevi 2 sene boyunca sürdürdü. Bir yandan 2008de EuroSkillsde Mobil Robotik alanında Türkiyeyi temsil etti. Ardından 2009da Kanada da tekrardan yarışmacı olarak bulundu. Artık bu alanda hakemlik yaparak ve Robotino hakkında öğrendiklerini paylaşarak faydalı olmaya çalışıyor. 

Yapay Zeka, Görüntü İşleme, Kuantum Mekaniği, İstatistik Mekanik ve Bilişsel Bilimlerle ilgili. Geceleri kafasına göre takılıyo. Sabahlarıda öğrencilik yapıyo =)

gibi gibi... 

 

Page Rank

Loading

Google Translate


Şuan ne okuyorum

Bilişsel Psikoloji

Singularity is Near


Ayrıca okuduklarımdan seçtiğim kitaplara buradan ulaşabilirsiniz..

Okuduklarımı üye olarak takip etmek için ise aşağıdaki RSS bağlantısını kullanabilirsiniz. Ayrıca bana kitapta hediye edebilirsiniz =)


CCL


Copyright © Ordinaryus Says That by http://www.vypro.org/ is licensed under a Creative Commons Attribution-No Derivative Works 3.0