- Bakış Açısından Bağımsız Gürbüz Plaka Tanıma Sistemi
View Independent Robust License Plate Recognition System (pdf)
7.5.05
SİU kurultay bildirisi (release)
geçenlerde SİU-2005 için hazırladığımız bildiriyi sunmuştum. bildirimiz kabul edilmiş. basıma hazırlanmış son versiyonunu paylaşacağım. basıma hazır versiyon:
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:
yazdığım kod 4 adet işlemi gerçeklemektedir:
- 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;
}
} - 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? - 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) ); - 5x5 Median Filter
Median Filter şu biçimde çalışır:- nxn'lik bir pencere oluştur ve sol üst köşeden başla
- pencerenin içinde kalan değerleri sırala.
- pencerenin tam ortasındaki pixel'in değerine, sıralanmış değerlerin ortadakini ata.
- resimin sonuna gelinmemişse pencereyi kaydır ve 2'ye git.
- dur
cvSmooth( src, dst, CV_MEDIAN, 5, 0, 0 );
- 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.
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.
- 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) - 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
- 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>
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
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
- Tek sayıların ve çift sayıların kendi aralarındaki sıralamaları önemli değildir.
- Program DIZI adresinden başlayan ve başlangıçtaki dizinin bulunduğu bellek alanı hariç hiçbir bellek alanını kullanmayacaktır.
- 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.
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.
(:
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.
(:
18.1.05
SİU Kurultayı bildirisi
IEEE 13. Sinyal İşleme ve İletişim Uygulamaları Kurultayı (SİU-2005) için hazırladığımız bildiri:
not: bissürü terimin türkçe karşılığını kullanmak zorundaydık, hatırladıklarımdan birkaçını yazayım buraya
hayırlı bayramlar d:o)
- Bakış Açısından Bağımsız Gürbüz Plaka Tanıma Sistemi
View Independent Robust License Plate Recognition System (pdf)
not: bissürü terimin türkçe karşılığını kullanmak zorundaydık, hatırladıklarımdan birkaçını yazayım buraya
- gürbüz: robust
- vektör nicemlemesi: vector quantization
- OKTS: OCR
- bölütleme: segmentation
- ikili ayrışma ağacı: binary spliting tree
- örüntü: texture
- ilgin dönüşüm: affine transformation
- benek: pixel (gürbüz benek!?)
- imge bölgesi: blob
hayırlı bayramlar d:o)
11.1.05
Discrete Event Simulation - Ödev 2
bu ödevde basit bi manufacturing system, GPSS kullanılarak simüle edilecekti. ödev çok basit. eğer az çok GPSS biliyorsanız kolay gelecektir. daha fazla açıklama ihtiyacı duymuyorum.
Ödevin tanımı.
Ödev dosyaları:
Ödevin tanımı.
Ödev dosyaları:
- des_hw2.gps - GPSS'de yazılmış simülasyon dosyası.
- Rapor - rapor işte.
6.1.05
Systems Programming - Ödev 2
Bu ödevde Linux için device driver yazdık. yazdığımız device'ın hardware ile bir işlişkisi yok /dev/null gibi bi device. Bu ödevi son dakikada yaptım, o yüzden rapor falan uğraşamadım, ufacık bi README dosyası var ama zaten dosyaların ne işe yaradığını yazıyor orada da. Ama device çalışıyor, test ettim.
Ödevin tanımı.
Ödev dosyaları:
Bi de aygıtın genel yapısına ilişkin şöyle bi resim var:
30 puanlık bonus kısmı tabi ki yapmadım.
Ödevin tanımı.
Ödev dosyaları:
- statistics.h - statistics device'ını yazarken kullanacağımız başlık dosyası.
- main.c - statistics device'ın genel implemantasyonu(hele hele).
- test.c - device çalışıyor mu test etmek için yaptığım yardımcı bi dosya.
- yap - modülü derlemek için basit bi script.
- stat_load - device ile ilgili ayarlamaları(modülün yüklenmesi, /dev/statistics'in yaratılması) yapan script.
- README - burada yazanların yaklaşık aynısını içeren dosya.
Bi de aygıtın genel yapısına ilişkin şöyle bi resim var:
30 puanlık bonus kısmı tabi ki yapmadım.
5.1.05
Systems Programming - Ödev 1
Bu ödevde random number generator gerçekledik. Bunu yaparken C içinden assembler çağrısı falan yaptık.
Ödevin tanımı.
Ödev dosyaları:
yazmak bunu gerçekten keyifliydi. hele bi gdb ile debug ederken sadece konsoldan böyle yazılar felan, insan kendini bi bok zannediyo.
Ödevin tanımı.
Ödev dosyaları:
- LCG.asm - combinedLCG() ve initLCG() fonksiyonlarını gerçekleyen assembler dosyası.
- lcgmain.c - LCG.asm'nin örnek kullanımı.
- Rapor - Yapılan işlerin ayrıntılı açıklaması.
yazmak bunu gerçekten keyifliydi. hele bi gdb ile debug ederken sadece konsoldan böyle yazılar felan, insan kendini bi bok zannediyo.
Software Engineering
Software Engineering bölümün en sinir bozucu derslerinden birisi. Endüstri mühendisliği gibi organizasyona yönelik bir ders. Kuşkusuz büyük projeler çıkarmanın başka yolu yok gibi ama yine de eğitim böyle olmamalıydı dedirtiyor insana.
Paso atıyosunuz. Şu şöyle olacak, bu böyle olacak diye.
Biz grup olarak Rubik Cube oyananabilecek bi oyun yaptık(?!). Ufacık oyun için de hayvan gibi dökümantasyon çıkarttık. Dökümanlara güvenebilirsiniz kolpa gibi görünse de yüksek notlar aldırdı bize:
Bi de sunum var. Böyle matah bişeymiş gibi anlatmak için yaptığımız işi:
Merak edenleriniz için sxi Open Office formatıdır.
Buradan grup arkadaşlarıma da selam ederim, harcadıkları emekler için çokça teşekkürler.
onlar da mutlu olsun :)
Paso atıyosunuz. Şu şöyle olacak, bu böyle olacak diye.
Biz grup olarak Rubik Cube oyananabilecek bi oyun yaptık(?!). Ufacık oyun için de hayvan gibi dökümantasyon çıkarttık. Dökümanlara güvenebilirsiniz kolpa gibi görünse de yüksek notlar aldırdı bize:
- Report 1: Software Project Plan (doc)
- Report 2: Software Requirements Specification (pdf)
- Report 3: Software Design Specification (doc)
- Report 4: Software Test Plan (pdf)
Bi de sunum var. Böyle matah bişeymiş gibi anlatmak için yaptığımız işi:
Merak edenleriniz için sxi Open Office formatıdır.
Buradan grup arkadaşlarıma da selam ederim, harcadıkları emekler için çokça teşekkürler.
onlar da mutlu olsun :)
Kaydol:
Kayıtlar (Atom)