赞
踩
①GUI界面:
②图像处理过程展示
( 注:系统可利用matlab界面识别显示和图像处理,并将数据发给Arduinio用于显示显示屏的内容+蜂鸣器+舵机打造全套的门禁系统)
图像处理流程图
建立模板库流程图:
主程序:
case {3,4} I = handles.I;%读取传输文件 % figure; % imshow(I); imwrite(I,'输入原图.jpg'); I = imresize(I, [480 NaN]);%改变图像尺寸宽为480 % figure; % imshow(I); imgray = rgb2gray(I);%RGB转为灰度值 imbin = imbinarize(imgray);%通过对I进行二值化,计算全局阈值输出二值图像 I = edge(imgray, 'sobel');%边缘化 % figure; % imshow(I); imwrite(I,'边缘化图.jpg'); I = imdilate(I, strel('diamond', 2));%扩张膨胀,系数为2 % figure; % imshow(I); imwrite(I,'膨胀后图.jpg'); I = imfill(I, 'holes');%把扩张的洞填满 % figure; % imshow(I); imwrite(I,'把holes填满图.jpg'); I = imerode(I, strel('diamond', 10));%腐蚀图像边缘腐蚀把小于10的去掉 % figure; % imshow(I); imwrite(I,'边缘腐蚀图.jpg'); Iprops=regionprops(I,'BoundingBox','Area', 'Image');%图像区域属性,非常有用 area = Iprops.Area;%计算像素的总数 count = numel(Iprops);%返回数组元素个数为2个,找到两个对象会有腐蚀不全的 maxa= area; boundingBox = Iprops.BoundingBox;%用最小面积的框框中物体 %%比较出像素最大的,即找到车牌的正确位置 I=Iprops(1).Image;%调取找到的第一个对象 % figure; % imshow(I); imwrite(I,'找到有效对象1图.jpg'); I=Iprops(2).Image;%调取找到的第一个对象 imwrite(I,'找到有效对象2图.jpg'); for i=1:count if maxa<Iprops(i).Area maxa=Iprops(i).Area; boundingBox=Iprops(i).BoundingBox; end end %%以上步骤都是为了找到车牌的位置 I = imcrop(imbin,boundingBox);%自定义裁剪出boundingBox区域图像 % figure; % imshow(I); imwrite(I,'裁剪有效对象图.jpg'); %调整尺寸 I = imresize(I, [240 NaN]);%变化尺寸,长变为240 % figure; % imshow(I); %clear dust I = imopen(I, strel('rectangle', [4 4])); % figure; % imshow(I); imwrite(I,'图片剪切成高240.jpg'); %remove some object if it width is too long or too small than 500 %删除一些对象,如果它的宽度太长或太小小于500 I = bwareaopen(~I, 500);%~I逆二值化,删除面积小于500的对象 axes(handles.axes4);%确定显示位置 imshow(I); imwrite(I,'最后图片.jpg'); %%%get width [h, w] = size(I);%计算图片尺寸 %read letter读取,下面提取的是找到车牌后的 Iprops=regionprops(I,'BoundingBox','Area', 'Image'); count = numel(Iprops);%找到所有数字个对象 Code=[]; % Initializing the variable of number plate string. % 正在初始化车牌串变量 I=Iprops(1).Image;%调取找到的第一个对象 I2=Iprops(2).Image; I3=Iprops(10).Image; imwrite(I,'框取第一个对象.jpg'); imwrite(I2,'框取第二个对象.jpg'); imwrite(I3,'框取第十个对象.jpg'); % figure; % imshow(I); for i=1:count ow = length(Iprops(i).Image(1,:));%分别提取图片列、行信息,宽 oh = length(Iprops(i).Image(:,1));%高 if ow<(h/2) & oh>(h/3)%h为图片尺寸文字占据车牌大概的大小不同地区的不同,满足条件输入数据库比对 %disp(Iprops(1).Image); letter=readLetter(Iprops(i).Image); % 读取二值图像'N'对应的字母 % figure; imshow(Iprops(i).Image); Code=[Code letter]; % Appending every subsequent character in noPlate variable. % 在noPlate变量中附加每个后续字符。 end end % handles.edit1.String = str(noPlate); set(handles.edit1,'String',Code);%回传 end % Code = get(handles.edit1);%回溯 % disp('获得舵机'); % disp(Code); String1 = Code(1); %串口通信前的数据处理 if(String1=='陕') %disp('成功'); Rt=strrep(Code,Code(1),'s');%置换字符串的字符 disp(Rt); elseif(String1=='豫'); Rt=strrep(Code,Code(1),'y'); disp(Rt); elseif(String1=='辽') Rt=strrep(Code,Code(1),'l');%替换掉字符串第一位的字符 disp(Rt); else Rt=Code; disp(Rt); end pause(0.1); Bit = '*' Rt = [Rt Bit]; % disp(Rt); %串口通信传输 delete(instrfind({'Port'},{'COM6'})); global u; u = serial('COM6','BaudRate',9600,'DataBits',8);%设定相关的串口参数 fopen(u); set(u,'BytesAvailableFcnMode','Terminator'); set(u,'Terminator','*'); %设立中断 u.BytesAvailableFcn =@ReceiveCallback; for k=1:1:3 fprintf(u,Rt); pause(0.3);%时间间隔不宜过小 end
函数有:模板建立库+字符匹配函数(程序太多在2中)
(记录自用!)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。