خوانش پلاک خودرو از تصاویر جادهای
(پیاده سازی شده برای پلاک های ایرانی)
این الگوریتم (تشخیص پلاک خودرو) با نرم افزار MATLAB 2011 نوشته شده است برای خواندن پلاک که بدون نویز و خرابی هستند خوب جواب میدهد…البته دیتا بیس کاراکترها رو خودتون به راحتی میتوانید بیشتر کنید تا پاسخ دهی قویتر شود …فعلا فقط یک تصویر به عنوان آزمایش جهت تست برنامه قرار داده شده .
همچنین به علت ضیق وقت قسمت شناسای کاراکترها و تبدیل آنها به عدد و حروف فارسی رو قوی نکردم…شما میتونید این قسمت را برای جوابدهی بهتر دستکاری کنید… در ضمن اگر خواستین از نحوه فرمولبندی و کارکرد برنامه سر دربیارید حدود 20 صفحه هم گزارش تهیه شده ، فایل پاور پوینتی که برای ارائه پروژه تشخیص پلاک خودرو آماده شده نیز آپلود گردیده است.
فقط قبل از اجرای برنامه این مراحل رو طی کنید:
1- مسیر عکس خودرو(glx.jpg) رو وارد کنید
2-دیتا بیس (فایل زیپ) رو دانلود کنید
3-مسیر دیتا-بیس کاراکترها رو درست وارد کنید.
4-برنامه رو اجرا کنید-نتایج رو صفحه کامند matlab نمایش داده میشود.
5-هر جا خواستید از پشت دستور imshow و figure علامت % رو حذف کنید تا کارهای که روی تصویر انجام میشود رو مرحله به مرحله ببینید.
6-برنامه را اجرا کنید و نتایج را در صفحه متلب ببیند.
موضوع: آموزش تشخیص پلاک خودرو های ایرانی توسط نرم افزار متلب
تعداد صفحات پی دی اف : 18
تعداد صفحات پاور پوینت : 18
سورس کد : نرم افزار متلب Matlab
قیمت : رایگان
کلمه عبور فایل : behsanandish.com
نکته : شرکت بهسان اندیش تولید کننده سامانه های هوشمند مفتخر به تولید یکی از دقیقترین و سریعترین سامانه های جامع کنترل تردد خودرو می باشد که می توانید جهت آشنایی با این محصول به لینک :سامانه جامع کنترل تردد خودرو بهسان(پلاک خوان) مراجعه فرمایید.
سورس برنامه در نرم افزار متلب:
clear all close all clc p0=imread('E:\NIT\DIP\dip data proj\car\glx.jpg'); p=rgb2gray(p0); p=im2double(p); f=fspecial('gaussian'); pf=imfilter(p,f,'replicate'); %imshow(pf) %figure Pm=mean2(pf); %Average or mean of matrix elements Pv=((std2(pf))^2); %the variance of an M-by-N matrix is the square of the standard deviation T=Pm+Pv; % taerife astane............................................ [m n]=size(pf); for j=1:n for i=1:m if pf(i,j)>T; pf(i,j)=1; else pf(i,j)=0; end end end ps=edge(pf,'sobel'); %imshow(ps) %figure pd=imdilate(ps,strel('diamond',1)); pe=imerode(pd,strel('diamond',1)); pl=imfill(pe,'holes'); [m n]=size(pl); %barchasb gozary.............................................. pll=bwlabel(pl); stat =regionprops(pll,'Area','Extent','BoundingBox','Image','Orientation','Centroid'); index = (find([stat.Area] == max([stat.Area]))); %meghdare barchasb dakhele bozorgtarin masahat ra mikhanad ppout=stat(index).Image; %imshow(ppout); %figure % biron keshidane mokhtasate pelak............................. x1 = floor(stat(index).BoundingBox(1)); %shomare stone awalin pixel (B = floor(A) rounds the elements of A to the nearest integers less than or equal to A) x2 = ceil(stat(index).BoundingBox(3)); %pahnaye abject dar sathe ofoghi(B = ceil(A) rounds the elements of A to the nearest integers greater than or equal to A) y1 = ceil(stat(index).BoundingBox(2)); %shomare satre avalin pixel(B = ceil(A) rounds the elements of A to the nearest integers greater than or equal to A) y2 = ceil(stat(index).BoundingBox(4)); %pahnaye abject dar sathe amodi(B = ceil(A) rounds the elements of A to the nearest integers greater than or equal to A) bx=[y1 x1 y2 x2]; ppc=imcrop(p0(:,:,:),[x1,y1,x2,y2]); %imshow(ppc) %figure ppg=imcrop(p(:,:),[x1,y1,x2,y2]); %imshow(ppg) %figure %plate enhancment.............................................. ppcg=rgb2gray(ppc); ppcg=imadjust(ppcg, stretchlim(ppcg), [0 1]); % specify lower and upper limits that can be used for contrast stretching image(J = imadjust(I,[low_in; high_in],[low_out; high_out])) ppg=im2double(ppcg); pb=im2bw(ppg);%im2bw(I, level) converts the grayscale image I to a binary image %imshow(pb) %figure %rotate correction.............................................. if abs(stat(index).Orientation) >=1; %The orientation is the angle between the horizontal line and the major axis of ellipse=angle ppouto=imrotate(ppout,-stat(index).Orientation); %B = imrotate(A,angle) rotates image A by angle degrees in a counterclockwise direction around its center point. To rotate the image clockwise, specify a negative value for angle. pbo=imrotate(pb,-stat(index).Orientation); angle = stat(index).Orientation; else pbo=pb; end; %imshow(pbo) pbod=imdilate(pbo,strel('line',1,0)); pbodl=imfill(pbod,'holes'); px = xor(pbodl , pbod); pz= imresize(px, [44 250]); % 4*(57*11)=(chahar barabar size plake khodroye irani) %barchasb zanye plak.......................................... stat1 = regionprops(bwlabel(pz,4),'Area','Image'); index1 = (find([stat1.Area] == max([stat1.Area]))); maxarea =[stat1(index1).Area];%braye hazfe neweshteye iran va khatahaye ehtemali pzc=bwareaopen(pz,maxarea-200); %maxarea(1,1) meghdare structur ra adres dehi mikonad,va migoyad object haye ka mte z an ra hazf konad %histogram plak...... %v=sum(pzc); %plot(v); %biron keshidan karakterha...................................... stat2=regionprops(pzc,'Area','BoundingBox','Image','Orientation','Centroid'); cx=cell(1,8); for i=1:8 x=stat2(i).Image; rx=imresize(x, [60 30]); %imshow(rx) %figure cx{1,i}=rx; %fx=mat2gray(cx{1,1}); %imshow(cx{1,2}) imwrite(rx,['E:\NIT\DIP\dip data proj\char\car\glx\' num2str(i) '.jpg']); end %khandane karakterha.........mini database1................... for i=1:1 for j=1:8 temp=imread(['E:\NIT\DIP\dip data proj\char\car\glx\' num2str(j) '.jpg']); temp=im2bw(temp); nf1=temp.*cx{1,i}; nf2=sum(sum(nf1)); nf(j)=nf2/(sum(sum(temp))); mx=max(nf(j)); if nf(1,1)== mx disp(1); else if nf(1,2)== mx disp(5); else if nf(1,3)== mx disp('j'); else if nf(1,4)== mx disp(6); else if nf(1,5)== mx disp(3); else if nf(1,6)== mx disp(1); else if nf(1,7)== mx disp(7); else if nf(1,8)== mx disp(2); end end end end end end end end end end