21.3.05

OpenCV ile görüntü işlemeye giriş

bir önceki yazımda, OpenCV'nin Visual Studio 6.0 ile birlikte nasıl kullanılacağından bahsetmiştim. bu yazıda, yeni başlayanlar için OpenCV kullanarak nasıl kod yazılacağına dair bir örnek vereceğim.

yazdığım kod 4 adet işlemi gerçeklemektedir:
  1. Threshold I
    threshold: Türkçesi eşikleme. genellikle görüntü işlemedeki karşılığı, resmin belirli bir değerden(threshold value/eşik değeri) daha küçük değere sahip pixellerin siyaha, daha büyük değere sahip pixel değerleri beyaza boyanmasıdır.
    resmin sol üst köşesinden başlayıp, pixel pixel taranır. pixelin değeri eşik değerimizden küçükse 0, değilse 255 yapılır. ilgili kod:
    for(i=0;i<src->height;i++){
    for(j=0;j<src->width;j++){
    src_pixel_ptr = CV_MOVE_TO(pos_src,i,j,1);
    dst_pixel_ptr = CV_MOVE_TO(pos_dst,i,j,1);
    src_pixel_ptr[0]<thresh_val?
    dst_pixel_ptr[0]=0:dst_pixel_ptr[0]=255;
    }
    }

  2. Threshold II
    OpenCV'nin threshold fonksiyonu kullanarak gerçekleştirilen thresholding işlemi. kod:
    cvThreshold( src, dst, thresh_val, 255, CV_THRESH_BINARY);

    ne kadar da basit değil mi?
  3. Sharpen Filter
    3x3'lük bir sharpen kernelinin uygulanması işlemi. uygulanan kernel:
     0 -1  0
    -1 5 -1
    0 -1 0

    kod:
    // kernel icin gerekli alani ayir
    kernel = cvCreateMat(9,9,CV_32FC1);
    //kerneli in$a et
    cvSet2D( kernel, 0, 0, cvRealScalar(0) );
    cvSet2D( kernel, 0, 1, cvRealScalar(-1) );
    cvSet2D( kernel, 0, 2, cvRealScalar(0) );
    cvSet2D( kernel, 1, 0, cvRealScalar(-1) );
    cvSet2D( kernel, 1, 1, cvRealScalar(5) );
    cvSet2D( kernel, 1, 2, cvRealScalar(-1) );
    cvSet2D( kernel, 2, 0, cvRealScalar(0) );
    cvSet2D( kernel, 2, 1, cvRealScalar(-1) );
    cvSet2D( kernel, 2, 2, cvRealScalar(0) );
    // filtreyi/kerneli uygula
    cvFilter2D( src, dst, kernel, cvPoint(-1,-1) );

  4. 5x5 Median Filter
    Median Filter şu biçimde çalışır:
    1. nxn'lik bir pencere oluştur ve sol üst köşeden başla
    2. pencerenin içinde kalan değerleri sırala.
    3. pencerenin tam ortasındaki pixel'in değerine, sıralanmış değerlerin ortadakini ata.
    4. resimin sonuna gelinmemişse pencereyi kaydır ve 2'ye git.
    5. dur
    nxn boyutundaki pencerenin tam ortasındaki değerden bahsedebilmemiz için, n tek olmalıdır. kod:
    cvSmooth( src, dst, CV_MEDIAN, 5, 0, 0 );
gerekli dosyalar:
  • opencv_1.cpp - yukarıda bahsedilen işlemlerin gerçeklendiği C++ dosyası.
  • Lena'nın resmi ;)
    Lena, görüntü işlemede giriş resmi için yaygın olarak kullanılan bir bayandır. ilk olarak 1973'de kullanılmıştır. ünlü fotoğraf Playboy'un Kasım 1972'de yayınladığı dergiden alınmıştır. daha fazla bilgi için buraya.
    normal resim:


    gürültü eklenmiş resim:


19.3.05

Visual C++ 6.0 ile OpenCV kullanımı

OpenCV, görüntü işleme(aka. image processing) için Intel'in geliştirdiği bir kitaplık. Sonradan bunu kamusal alana(public) hibe ediyor; OpenCV, an itibariyle sourceforge'da geliştirilmekte.
Visual C++ ile birlikte OpenCV kullanmak yeni başlayanlar için gayet sancılı bir süreç olabiliyor. Sorunuz olursa çekinmeden sorun, ama tabi ki ilk önce RTFM!!
Bir adet de ayarları yapılmış, taslak workspace hediyesi.
Tüm bu işlere başlamadan önce tabi ki OpenCV'yi edinmek gerekiyor. gerekli dosyaları buradan edinebilirsiniz.

Visual C++ 6.0'ı açtıktan sonra File->New... diyerek yeni bir proje yaratalım.


Karşımıza gelen ekranda, Win32 Console Application seçilir; proje ismi de doldurulduktan sonra, bir sonraki adımda An empty project seçilir.


Workspace'imiz hazır. Şimdi sıra, OpenCV kitaplığının kullanılması için yapılması gereken ayarlara geldi.

Menüden Project->Settings... seçilir. Bu ekranda ayarları yaparken Settings for: All configurations'ın seçili olduğundan emin olun.
  1. C/C++sekmesi seçilir.
    Category->Preprocessor
    seçilir.
    Additional Include Directories şu şekilde ayarlanır:
    C:\Program Files\OpenCV\cv\include,C:\Program Files\OpenCV\cvaux\include,C:\Program Files\OpenCV\cxcore\include,C:\Program Files\OpenCV\otherlibs\highgui



    "C:\Program Files\OpenCV\" dizininin OpenCV'yi kurduğunuz dizin olduğunu söylememe gerek yok sanırım. (söyledim bile)

  2. Link sekmesi seçilir.
    Category->General seçilir.
    Object/library modules bölümüne şunlar eklenir:
    cv.lib highgui.lib cxcore.lib

    Category->Input seçilir.
    Object/library modules bölümüne şunlar eklenir(eklenmediyse):
    cv.lib highgui.lib cxcore.lib
    Additional library path bölümüne şu eklenir:
    C:\Program Files\OpenCV\lib




  3. Son olarak, File->New... seçip, Files sekmesinden yeni bir C++ Source File yaratılır. Bu sizin ana dosyanız olcak.



    yeni oluşturduğumuz dosyaya da OpenCV kitaplığını kullanmak için gerekli header dosyalarını yazmamız lazım:
    #include <cv.h>
    #include <highgui.h>
Viola! İşimiz bitti. artık görüntü işlemeye hazırız.

14.3.05

Bilgisayar Mimarisi - Ödev 1

uzun bir aradan sonra yeni dönemin açılıp, temponun artmasıyla beraber yeni şeyleri koymaya başlıyorum. bunlardan ilki Bilgisayar Mimarisi(aka. Computer System Architecture) ödevi.

tanım:
İçinde 8bitlik işaretsiz sayılar bulunan bir dizi bellekte DIZI adresinden başlayarak yer almaktadır. Dizinin eleman sayısı BOYUT simgeli bellek gözünde yer almaktadır ve eleman sayısı için 16 bitlik yer ayrılmıştır. Bu dizideki verileri önce tek sayılar ardından çift sayılar gelecek şekilde yeniden düzenlemek üzere 68000 simgesel dilinde bir program yazılacaktır. Program bellekte hiçir geçici alan kullanmayacak ve 68000?in en fazla 3 saklayıcısından yaralanacaktır. Tanıtılan programı en az sayıda komutla ve 68000?in adresleme kiplerini en etkin şekilde kullanarak yazınız.

örnek: Sırasıyla 1,12,65,43,59,78,98,34,55,13,23,44,56,67 sayılarından oluşan dizi yukarda istenilen program çalıştıktan sonra 1,67,65,43,59,23,13,55,34,98,78,44,56,12 şeklinde olacaktır.

uyarılar
  1. Tek sayıların ve çift sayıların kendi aralarındaki sıralamaları önemli değildir.
  2. Program DIZI adresinden başlayan ve başlangıçtaki dizinin bulunduğu bellek alanı hariç hiçbir bellek alanını kullanmayacaktır.
ödev doyası:
  • mimari_odev_1.x68 - ödevin gerçeklendiği x68 dosyası. verilen örnek için çalışma süresi 684 saat çevrimidir. Daha verimli bir versiyon ile karşılaşırsam buraya koymaya çalışırım.
motorola 68000 işlemcisi için kullanabileceğiniz bir simülatör programı: EASy68K

3.3.05

okulun sunucuları problemi

burada kullanımınıza açılmış dosyalar, üniversitemin sunucularında yer almaktadır. okulumun sunucuları da sanırım zaman zaman sorun yaşıyor, bu yüzden bazen dosyalara erişemeyebilirsiniz. olası bir sorun için şimdiden kusura bakmayın.

okulun sunucularının çalışır vaziyette olup olmadığını anlamanın kolay bir yolu var. yanda bir yerde profilimle ilgili bir kısım var; orada profil resmim görünüyorsa çalışıyor demektir, değilse dosyalara erişemezsiniz.

(: