資源簡介
基于matlab的條形碼識別,很簡單的一個小程序,幫助建立信心

代碼片段和文件信息
%%------------條碼識別,建立寬度序列--------------%%%
%EAN-13條碼字符集特點:A/B子集為白開頭黑結尾,C子集為黑開頭白結尾
%:一個字符由2個條和2個空構成,故A/B子集就是白黑白黑,C子集就是黑白黑白
function?[numberbar1]=barcognition(Iheightwidth)
bar=zeros(1width);
znum?=?zeros(1width);
onum?=?zeros(1width);
%%%-----------------少數服從多數校正----------------%%%
for?i=1:height
????for?j=1:width
????????if(I(ij)==0)
????????????znum(1j)=znum(1j)+1;%統計每一列0的個數
????????else
????????????onum(1j)=onum(1j)+1;%統計每一列1的個數
????????end
????end
end
%%決定寬度序列的二進制碼
for?i=1:width
????if(znum(1i)>onum(1i))
????????bar(1i)=0;
????else
????????bar(1i)=1;
????end
end
%00011000--010?
%1000000001100000--10000100
%1111111001111100--1110110
%1111100111111100--1101110
%11000001111111000-1001110
%1000111100000000--1011000
%1100001111111000--1001110
%11001100011--10101
%001111111110011---0111101(3)
%0011111001111111--0110111(8)
%00000110000011111-0010011(2)
%0011111111100111--0111101(3)
%0011001111111111--0101111(6)
%0011111110011111--0111011(7)
%0011000--010
%%--------------校正條形碼寬度序列------------------%%
%%%-------------------奇偶校正---------------------%%%
zcout=0;
ocout=0;
count=1;
bar1=zeros(1width+10);
for?i=1:width
????if(bar(1i)==0)
????????if(ocout==1)???????%刪補,讓它成偶數
????????????bar1(1count)=1;%補上1個1;
????????????count=count+1;
????????elseif(ocout>8)????%4/5
????????????for?i=1:(ocout-8)
????????????????count=count-1;
????????????end
????????end
????????ocout=0;
????????zcout=zcout+1;
????????bar1(1count)=0;%累加0
????????count=count+1;
????end
????if(bar(1i)==1)
????????if(zcout==1)????????%判斷前面有多少個0
????????????bar1(1count)=1;%補上1個1;
????????????count=count+1;
????????elseif(zcout>8)?????%多于8個的,刪除多余的
????????????for?i=1:(ocout-8)
????????????????count=count-1;
????????????end
????????end
????????zcout=0;
????????ocout=ocout+1;??????%字符1計數
????????bar1(1count)=1;
????????count=count+1;
????end
end
number=count-1;
%%-----------------字符集分類-------------------%%
%開始數據(3010),左側數據(6)中間符(510101),右側數據(6),結束符(3)
data?=zeros(159);??%起始符有3個字符
ldata?=0;???????????%白黑白黑
count1=1;
oflag=false;
zflag=false;
stflag=true;
for?i=1:number
????if(stflag==true)
????????if(bar1(1i)~=0)%判斷是否為0,如果不是0則不開始統計數據
????????????continue;%跳過去
????????else
????????????stflag?=?false;
????????end????????????
????end
????if(bar1(1i)==0)
????????if(oflag==true)
????????????count1=count1+1;%1切換到0,表示白到黑,換一種類型
????????????oflag=false;
????????end
????????zflag=true;
????????data(1count1)=data(1count1)+1;
????????%count=count+1;
????elseif(bar1(1i)==1)
????????if(zflag==true)
????????????count1=count1+1;???%換一種類型
????????????zflag=false;
????????end
????????oflag=true;
????????data(1count1)=data(1count1)+1;
????????%count=count+1;
????end
end
%[number]?=?findchar(a1b1a2b2pos)
max?=?count1-1;
%pos?=?0;
%[numvalid]=findchar(data(11)data(12)data(13)‘head‘);
%左側數據
lnumber=0;
pos?=1;
for?i=4:4:24??
????[lnumlvalid]=findchar(data
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????2359350??2007-11-07?10:12??www.NewXing.com\w16.bmp
?????文件????2359350??2007-11-07?10:11??www.NewXing.com\w7.bmp
?????文件????2359350??2007-11-07?10:11??www.NewXing.com\w8.bmp
?????文件???????3574??2007-11-12?19:43??www.NewXing.com\barcognition.m
?????文件???????8048??2007-11-12?19:43??www.NewXing.com\codebarreg.m
?????文件???????2409??2007-11-12?19:30??www.NewXing.com\findchar.m
?????文件???????1087??2007-11-08?10:32??www.NewXing.com\ImageEdgePoint.m
?????文件???????4374??2007-11-12?17:40??www.NewXing.com\imagefilter.m
?????文件???????9683??2007-11-10?15:04??www.NewXing.com\point2line.m
?????文件???????1110??2007-11-09?15:27??www.NewXing.com\ThretholdOptimize.m
?????文件???????1282??2007-11-12?19:48??www.NewXing.com\readme.txt
-----------?---------??----------?-----??----
??????????????7109617????????????????????11
- 上一篇:matlab 高階累積量工具箱2015可用
- 下一篇:QQUI設計模板
評論
共有 條評論