PDA

Tam Sürümünü Görmek İçin : Plaka Tanima


tozlu
20/11/2004, 12:43
plaka tanıma ile ilgili bir projenin henüz araştırma aşamasındayım.
ihtiyacım olan bilgi bir jpeg dosyasının pixellere bölünüp renkleriyle oynamak
şimdiden teşekkürler


ceeyt
20/11/2004, 15:38
Sanirim yapmak istedigin bir imgedeki plakayi tanimak.Ayrica konuyu buraya actigina gore C veya C++ la yapmak istiyorsun.

Oncelikle,asil amac plaka tanimak oldugundan jpeg kullanma cunku jpeg imgenin piksellerine erismek icin ters ayrik cosinus donusumleri ..vs gerekir ki bunlarla ugrasma sana zaman kaybettirir.

Baslangic icin raw formatinda dosyalarla calis.Hehangi bir imgeyi photoshop ile raw dosyasina donusturebilirsin. raw dosyalari bir imgeninen en saf halidir diyebilrim sanirim.Sadece imgenin her pikselinin hic bir isleme tabi tutulmadan dosyaya yan yana dizilmesinden olusur.

Her imgenin basinda imgeyle ilgili bazi ozellikleri belirten (boyutu,cozunurlugu...) baslik kismi bulunur. raw imgelerde baslik yoktur,bu nedenle herhangi bir imgeyi raw a donusturmeden once cozunurlugunu not etmen gerekir ki sonradan acabilesin.

Kullanabilecegin diger bir kolay imge turu tif dosyalaridir.Ancak tif imgelerin basliklari vardir.Bu baslik kısmı islenmemelidir yoksa imgeyi goruntuleyemezsin.

Ornek bir kod yazim,siyah-beyaz ist.tif imgesinide ekledim istersen onu kullanabilirsin. imge siyah-beyaz ve bit derinligi 8 bit,yani her piksel degeri 0-255 arasinda degisen bir sayi,bu nedenle depolayicinin turu unsigned char.

kodun islevi imgenin negatifini almak,yani enbuyuk piksel degerine gore tumleyenini almak. Burada 255 oldugundan her bir piksel icin (255 - pixel_degeri) yapmak negatifini almaya yetiyor.




#include <iostream>
#include <fstream>
#include <vector>



int main(int argv,char *argc[])
{
std::vector<unsigned char> image;

std::filebuf inputFileBuffer;

inputFileBuffer.open("c:\\ist.tif",std::ios::in | std::ios::binary);

std::istream is(&inputFileBuffer);

image.reserve(307200);

char ch_;

while(is)
{
is.get(ch_);
image.push_back(ch_);
}

inputFileBuffer.close();

std::ofstream output("c:\\negatif.tif",std::ios::out | std::ios::binary);

int i_ = 0;

for(std::vector<unsigned char>::iterator itr = image.begin();
itr != image.end();++itr)
{
if(i_ >1000 && i_ <image.size()-2000)
{
output.put(255-*itr);
++i_;
}
else
{
output.put(*itr);
++i_;
}
}

image.~vector();

return 0;

}

neurorebel
20/11/2004, 17:59
Bence image processingle ilgili detaylı bir araştırmaya girişsen iyi olur. JPEG'i hafızada açıp bitmap olarak üzerinde uğraşman makul bi çözüm olur. Tabi veri kaynağın sadece jpeg veriyorsa. OCR ve pattern recognition, image transformation gibi kelimeleri ara konu çok karışık daha spesifik sorular sorarsan memnuniyetle yardımcı olurum geçen yazı bir imza tanıma sistemi yaparak geçirdim belki problemlerine çözüm bulabilirim. şimdiden kolay gelsin :)

tozlu
25/11/2004, 14:25
ilginiz için teşekkürlerarkadaşlar.
projemle ilgili yaptığım araştırmalar sonunda plaka görüntüsünü .bmp uzantılı dosyalardan almaya karak verdim.
ayrıca borland c++ builder ile çalışmaktyayım.
yardımlarınıza ihtiyacım var.
şimdiden teşekkürler:)

tozlu
25/11/2004, 14:29
ayrıca görüntüyü maskelemek için (yani kenar algılama için)sobel masking tekniğini kullanacağım.
kenar algıladıktan sonra plakayı otomobil fotoğrafı içersinden nasıl çıkarmamı önerirsiniz.
ben kenar algılama işlemi tamamlanmış olan image üzerinden dikdörtgenleri bulma yoluna gitmeyi düşünüyorum.ama farklı fikirleri de değerlendirmek istiyorum

hepinize kolay gelsin

ceeyt
25/11/2004, 18:11
Aklima soyle bisey geldi ;

Kenar algilama icin 'canny edge detection' projene uygun gozukuyor,istersen kisa bir arastirma yaparsin.Tabii imgedeki gurultuyu mumkun oldugunca temizlemelisin.

Butun plaka degerleri zaten bellidir,bunlarla ilgili bir veritabani hazirlandiktan sonra buldugun dikdortgenlerle veritabanindaki imgelerin korelasyonuna bakabilirsin.

Hatta plakalarda kullanilan harflerin istatistiklerine ulasabilirsen,bunlarla baglantili bir olasilik-yogunluk fonksiyonu olusturabilirsin.Boylelikle korelasyon isleminde,ilk denemelerde dogru plakayi secme olasiligin artmis olur.

korelasyona sokacagin imgelerin isikliliklarinida ayarlarsan daha guvenilir sonuclar elde edersin.

osx
01/04/2007, 00:13
bu işlem python-PIL ile kolayca yapılabilir...Python'un kolaylığı ve PIL'in yetenekleri de işe eklenince sağlam bir proje olur...
PIL -Python Imaging Library
http://www.pythonware.com/library/pil/handbook/index.htm

bluekid
02/04/2007, 08:58
Aradığın Herşey OpenCVde var

metingulcan
02/04/2007, 10:15
baba bi konu bu

cskli
02/04/2007, 11:58
bu konuyla lisansta bitirme projesi olarak uğraşmıştım..
sobel filan düşünebilirsin aynı yol dan gitmiştim ama unutmaman gereken birşey var
plaka yere paralel olmayabilir en büyük sorunun bence bu olacak sınırlarını belirle
ve yöntemini ona göre geliştir...
tanıdığım t özlü isen ımage processinge bak transformasyonlar ve filtreler adaptif thres hold bilinmeden yapılacak proje değil..