- Şablon Oluşturma
- Harf Algılama
- Plaka Tespiti
- Araç Plaka Numarası Tespit Sisteminin MATLAB ile Çalışması
ANPR (Otomatik Plaka Tanıma) sisteminin nasıl çalıştığını hiç merak ettiniz mi? Size bunun arkasındaki konsepti anlatayım, ANPR sisteminin kamerası araç plakasının görüntüsünü yakalar ve ardından görüntü, görüntünün bir metin biçimine alfanümerik bir dönüşümünü sağlamak için çok sayıda algoritma ile işlenir. ANPR sistemi, Petrol Pompaları, Alışveriş Merkezleri, Havaalanları, otoyollar, gişeler, Oteller, Hastaneler, Otoparklar, Savunma ve Askeri kontrol noktaları vb. Birçok yerde kullanılmaktadır.
Bu Plaka tespiti için birçok görüntü işleme aracı mevcuttur, ancak burada bu eğitimde araç plaka numarasını metin formatına almak için MATLAB Görüntü İşleme'yi kullanacağız. MATLAB veya görüntü işleme konusunda yeniyseniz, önceki MATLAB projelerimizi inceleyin:
- MATLAB ile Başlarken: Hızlı Bir Giriş
- MATLAB kullanarak Görüntü İşlemeye Başlarken
Öncelikle, plakaları tespit etmek için kullandığımız konsept hakkında size bilgi vereyim. Bu proje için üç program veya '.m' dosyası var.
- Şablon Oluşturma ( template_creation.m ) - Bu, alfanümeriklerin kaydedilmiş görüntülerini çağırmak ve ardından bunları MATLAB belleğine yeni bir şablon olarak kaydetmek için kullanılır.
- Harf Algılama ( Letter_detection.m ) - Giriş görüntüsünden karakterleri okur ve en yüksek eşleşen karşılık gelen alfanümerik olanı bulur.
- Plaka Algılama ( Plate_detection.m ) - Görüntüyü işleyin ve ardından numarayı algılamak için yukarıdaki iki m dosyasını çağırın.
Şimdi, bu m-dosyalarını nasıl kodlayacağınızı ve kodlamaya başlamadan önce ne yapmanız gerektiğini öğreneceğiz. Bu öğreticiyi inceledikten sonra, tüm kod dosyalarını ve çalışma açıklama videosunu bu projenin sonunda bulabilirsiniz.
Şablon Oluşturma
Dosyaları kaydetmek ve saklamak için önce proje için bir klasör oluşturun (benim klasör adım Numara Plaka Algılama ). Tüm harflerin ve sayıların ikili görüntülerini ' alfa' adlı alt klasörde sakladık.
Şimdi, aşağıdaki resimde gösterildiği gibi MATLAB'daki Editor penceresini açın,
MATLAB'ın temel terminolojisine aşina değilseniz, bağlantılı öğreticiyi kontrol etmenizi öneririm.
Şimdi, aşağıdaki kodu template_creation.m dosyasına kopyalayıp yapıştırın ve dosyayı proje klasörüne ( Numara Plaka Algılama ) kaydedin. Resim şablonları dosyaları dahil bu proje ile ilgili tüm dosyalar buradan indirilebilir. Ayrıca bu projenin sonunda verilen videoyu da kontrol edin.
% Alfabe A = imread ('alpha / A.bmp'); B = imread ('alpha / B.bmp'); C = imread ('alpha / C.bmp'); D = imread ('alpha / D.bmp'); E = imread ('alpha / E.bmp'); F = imread ('alpha / F.bmp'); G = imread ('alpha / G.bmp'); H = imread ('alpha / H.bmp'); I = imread ('alpha / I.bmp'); J = imread ('alfa / J.bmp'); K = imread ('alfa / K.bmp'); L = imread ('alfa / L.bmp'); M = imread ('alfa / M.bmp'); N = imread ('alfa / N.bmp'); O = imread ('alfa / O.bmp'); P = imread ('alpha / P.bmp'); Q = imread ('alpha / Q.bmp'); R = imread ('alpha / R.bmp'); S = imread ('alfa / S.bmp'); T = imread ('alfa / T.bmp'); U = imread ('alfa / U.bmp'); V = imread ('alpha / V.bmp'); W = imread ('alpha / W.bmp'); X = imread ('alfa / X.bmp '); Y = imread ('alfa / Y.bmp'); Z = imread ('alfa / Z.bmp'); % Doğal Sayılar bir = imread ('alfa / 1.bmp'); iki = imread ('alfa / 2.bmp'); üç = imread ('alpha / 3.bmp'); dört = imread ('alpha / 4.bmp'); beş = imread ('alfa / 5.bmp'); altı = imread ('alfa / 6.bmp'); yedi = imread ('alpha / 7.bmp'); sekiz = imread ('alpha / 8.bmp'); dokuz = imread ('alfa / 9.bmp'); sıfır = imread ('alfa / 0.bmp'); % Alfabe Dizisi Oluşturma letter =; % Sayılar için Dizi Oluşturma number =; NewTemplates =; save ('Yeni Şablonlar', 'Yeni Şablonlar') tümünü temizle
Burada, yukarıdaki kodda ' imread () ' komutunu kullanarak görüntüleri bir değişkene kaydediyoruz . Bu işlev, görüntüleri klasörden veya PC'nin herhangi bir konumundan MATLAB'a çağırmak için kullanılır. Yukarıdaki koddan bir örnek alalım:
A = imread ('alfa / A.bmp');
Bir değişken olduğunu ve 'içinde nerede alfa / A.bmp' , 'alfa' klasör adıdır ve ' A.bmp' dosya adıdır.
Sonra bir ' harf ' ve ' sayı ' matrisi oluşturun ve ' kaydet (dosya adı, değişkenler)' komutunu kullanarak bunu 'Yeni Şablonlar ' değişkenine kaydedin .
% Alfabe Dizisi Oluşturma letter =; % Sayılar için Dizi Oluşturma number =; NewTemplates =; save ('Yeni Şablonlar', 'Yeni Şablonlar') tümünü temizle
Şimdi yeni bir düzenleyici penceresinde Letter_detection.m'yi kodlamaya başlayın .
Harf Algılama
Burada Letter_detection.m adlı ikinci kod dosyasını oluşturuyoruz . Şimdi, aşağıdaki kodu o dosyaya kopyalayıp yapıştırın ve dosyayı Letter_detection adıyla proje klasörüne kaydedin. Bu dosya buradan indirilebilir, bu ekli zip dosyaları ayrıca bu Plaka tespiti projesiyle ilgili diğer dosyaları da içerir.
function letter = readLetter (snap) load NewTemplates snap = imresize (snap,); rec =; n = 1 için: uzunluk (Yeni Şablonlar) cor = corr2 (Yeni Şablonlar {1, n}, snap); rec =; end ind = bul (rec == max (rec)); display (find (rec == max (rec))); % Alfabe listeleri. ind == 1 - ind == 2 harf = 'A' ise; elseif ind == 3 - ind == 4 harf = 'B'; elseif ind == 5 harf = 'C' elseif ind == 6 - ind == 7 harf = 'D'; elseif ind == 8 harf = 'E'; elseif ind == 9 harf = 'F'; elseif ind == 10 harf = 'G'; elseif ind == 11 harf = 'H'; elseif ind == 12 harf = 'I'; elseif ind == 13 harf = 'J'; elseif ind == 14 harf = 'K'; elseif ind == 15 harf = 'L'; elseif ind == 16 harf = 'M'; elseif ind == 17 harf = 'N'; elseif ind == 18 - ind == 19 harf = 'O'; elseif ind == 20 - ind == 21 harf = 'P'; elseif ind == 22 - ind == 23 harf = 'Q'; elseif ind == 24 - ind == 25 harf = 'R'; elseif ind == 26 harf = 'S'; elseif ind == 27 harf = 'T'; elseif ind == 28 harf = 'U'; elseif ind == 29 harf = 'V'; elseif ind == 30 harf = 'W'; elseif ind == 31 harf = 'X'; elseif ind == 32 mektup = 'Y'; elseif ind == 33 harf = 'Z'; % * - * - * - * - * % Rakamlar listeleri. elseif ind == 34 harf = '1'; elseif ind == 35 harf = '2'; elseif ind == 36 harf = '3'; elseif ind == 37 - ind == 38 harf = '4'; elseif ind == 39 harf = '5'; elseif ind == 40 - ind == 41 - ind == 42 harf = '6'; elseif ind == 43 harf = '7'; elseif ind == 44 - ind == 45 harf = '8'; elseif ind == 46 - ind == 47 - ind == 48 harf = '9'; başka harf = '0'; son sonu
Burada, yukarıdaki kodda, bize ' readLetter ()' komutunu kullanarak ' alpha ' sınıfından girdi görüntüsünün alfanümerik çıktısını veren letter adında bir işlev oluşturduk. Ve sonra kaydedilen şablonları 'NewTemplates komutunu kullanarak yükleyin .
Bundan sonra, 'imresize (dosyaadı, boyut)' komutunu kullanarak şablonun görüntüleriyle karşılaştırılabilmesi için girdi görüntüsünü yeniden boyutlandırdık. Ardından, en iyi eşleşmeyi elde etmek için giriş görüntüsünü şablondaki her görüntüyle ilişkilendirmek için for döngüsü kullanılır.
Aşağıdaki kodda gösterildiği gibi, giriş görüntüsünden karakter şablonuyla her alfanümerik şablon için korelasyon değerini kaydetmek için bir matris ' rec ' oluşturulur
cor = corr2 (Yeni Şablonlar {1, n}, snap);
Daha sonra en yüksek eşleşen karaktere karşılık gelen dizini bulmak için 'bul ()' komutu kullanılır. Daha sonra bu indekse göre karşılık gelen karakter 'if-else' ifadesi kullanılarak yazdırılır.
Şimdi, bunu tamamladıktan sonra, ana programın kodunu başlatmak için yeni bir düzenleyici penceresi açın.
Plaka Tespiti
İşte Plate_detection.m adlı üçüncü ve son kod dosyası aşağıdaki kodu bu dosyaya kopyalayıp yapıştırarak proje klasörüne kaydedin. Hızlı başlangıç için, resim şablonlarını içeren tüm kod dosyalarını buradan indirebilirsiniz.
hepsini kapat; hepsini temizle; im = imread ('Plaka Resimleri / image1.png'); imgray = rgb2gray (im); imbin = imbinarize (imgray); im = kenar (imgray, 'prewitt'); % Aşağıdaki adımlar, plaka Iprops = regionprops (im, 'Sınırlama Kutusu', 'Alan', 'Görüntü'); alan = Iprops.Area; count = numel (Iprops); maxa = alan; boundingBox = Iprops.BoundingBox; i = 1 için: maxa ise
say
Yukarıdaki kodda kullanılan temel komutlar aşağıda belirtilmiştir:
imread () - Bu komut, görüntüyü hedef klasörden MATLAB'a açmak için kullanılır.
rgb2gray () - Bu komut, RGB görüntüsünü gri tonlamalı biçime dönüştürmek için kullanılır.
imbinarize () - Bu komut, 2-D gri tonlamalı görüntüyü ikiye ayırmak için kullanılır veya basitçe görüntüyü siyah beyaz biçime dönüştürdüğünü söyleyebiliriz.
edge () - Bu komut, Roberts, Sobel, Prewitt ve diğerleri gibi çeşitli yöntemler kullanılarak görüntüdeki kenarları tespit etmek için kullanılır.
regionprops () - Bu komut, görüntü bölgesinin özelliklerini ölçmek için kullanılır.
numel () - Bu komut, dizi elemanlarının sayısını hesaplamak için kullanılır.
imcrop () - Bu komut, görüntüyü girilen boyutta kırpmak için kullanılır.
bwareaopen () - Bu komut, küçük nesneleri ikili görüntüden kaldırmak için kullanılır.
Kodda yukarıdaki komutları kullanarak, giriş görüntüsünü çağırıp gri tonlamaya dönüştürüyoruz. Daha sonra gri tonlama ikili görüntüye dönüştürülür ve ikili görüntülerin kenarı Prewitt yöntemi ile tespit edilir .
Ardından, giriş görüntüsünün tamamında plakanın yerini tespit etmek için aşağıdaki kod kullanılır, Iprops = regionprops (im, 'Sınırlayıcı Kutu', 'Alan', 'Resim'); alan = Iprops.Area; count = numel (Iprops); maxa = alan; boundingBox = Iprops.BoundingBox; i = 1 için: maxa ise
say
Bundan sonra, plakayı kırpın ve sırasıyla 'imcrop ()' ve 'bwareaopen ()' komutunu kullanarak ikili görüntüden küçük nesneleri kaldırın.
Daha sonra, aşağıdaki kod, kesilen plaka görüntüsünü işlemek ve algılanan numarayı görüntü ve metin biçiminde (komut penceresinde) görüntülemek için kullanılır.
Iprops = regionprops (im, 'Sınırlayıcı Kutu', 'Alan', 'Resim'); count = numel (Iprops); noPlate =; i = 1 için: sayma ow = uzunluk (Iprops (i).Image (1,:)); oh = uzunluk (Iprops (i).Image (:, 1)); eğer ow <(h / 2) & oh> (h / 3) letter = Letter_detection (Iprops (i).Image); noPlate = bitiş sonu
Araç Plaka Numarası Tespit Sisteminin MATLAB ile Çalışması
Gelen template_creation.m dosyası biz 'olarak adlandırılan bir dizin veya dosya içine alphanumerics tüm ikili görüntülerini kaydetmek için kod tasarım var NewTemplates '. Daha sonra bu dizin Letter_detection.m'de aşağıda görebileceğiniz gibi çağrılır
Ardından Plate_detection.m kod dosyasında Letter_detection.m kod dosyası aşağıdaki resimde gösterildiği gibi görüntüyü işlediğimizde çağrılır,
Şimdi,.m dosyasını çalıştırmak için 'ÇALIŞTIR' düğmesine tıklayın
MATLAB'ın yanıt vermesi birkaç saniye sürebilir, aşağıda gösterildiği gibi sol alt köşede meşgul mesajı görünene kadar bekleyin,
Program başladığında, numara plakası görüntüsü açılır penceresini ve komut penceresinde numarayı alacaksınız. Resmimin çıktısı aşağıda verilen resim gibi görünecek;
Araç Plaka Tespit Sisteminin tam çalışması aşağıdaki Videoda gösterilmekte olup, resim şablonlu tüm kod dosyaları buradan indirilebilir.
Ayrıca, tüm MATLAB Projelerini buradan kontrol edin.