车牌识别系统Matlab算法实现

来源:互联网 发布:java开发软件有哪些 编辑:程序博客网 时间:2024/05/16 15:21

车牌识别系统Matlab算法实现

标签: 车牌识别
1408人阅读 评论(0)收藏举报
本文章已收录于:
分类:
作者同类文章X
    [plain] view plain copy
    print?在CODE上查看代码片派生到我的代码片
    1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    2. % 字符分割模块算法  
    3. % 定位剪切后的彩色车牌图像--灰度--二值化--统一到黑底白字--去除上下边框  
    4. % --切割出最小范围--滤波--形态学处理--分割出7个字符  
    5.   
    6. % 去除上下边框算法:  
    7. % 1.黑白跳变小于阈值则被视为背景;2.连续白线大于某阈值则该白线被认为是背景  
    8. % 3.单行白色大于阈值则被认为是背景,考虑FLAG的值;  
    9. % 4.做完以上处理后,上边1/2 中搜索连续两条黑线,认为该黑线以上为背景;在下边1/2 中搜索连续两条黑线,认为该黑线以下为背景  
    10. % 归一化为 40*20 ,商用系统程序中归一化为 32*16 ,此处仅演示作用  
    11. function [d]=lpcseg(jpg)  
    12. I=imread('car1.jpg');  
    13. I1=rgb2gray(I);  
    14. I2=edge(I1,'robert',0.15,'both');  
    15. se=[1;1;1];  
    16. I3=imerode(I2,se);  
    17. se=strel('rectangle',[25,25]);  
    18. I4=imclose(I3,se);  
    19. I5=bwareaopen(I4,2000);  
    20. [y,x,z]=size(I5);  
    21. myI=double(I5);  
    22. tic  
    23.  white_y=zeros(y,1);  
    24.  for i=1:y  
    25.     for j=1:x  
    26.              if(myI(i,j,1)==1)   
    27.                 white_y(i,1)= white_y(i,1)+1;   
    28.             end    
    29.      end         
    30.  end  
    31.  [temp MaxY]=max(white_y);  
    32.  PY1=MaxY;  
    33.  while ((white_y(PY1,1)>=5)&&(PY1>1))  
    34.         PY1=PY1-1;  
    35.  end      
    36.  PY2=MaxY;  
    37.  while ((white_y(PY2,1)>=5)&&(PY2<y))  
    38.         PY2=PY2+1;  
    39.  end  
    40.  IY=I(PY1:PY2,:,:);  
    41.  white_x=zeros(1,x);  
    42.  for j=1:x  
    43.      for i=PY1:PY2  
    44.             if(myI(i,j,1)==1)  
    45.                 white_x(1,j)= white_x(1,j)+1;                 
    46.             end    
    47.      end         
    48.  end  
    49.     
    50.  PX1=1;  
    51.  while ((white_x(1,PX1)<3)&&(PX1<x))  
    52.        PX1=PX1+1;  
    53.  end      
    54.  PX2=x;  
    55.  while ((white_x(1,PX2)<3)&&(PX2>PX1))  
    56.         PX2=PX2-1;  
    57.  end  
    58.  PX1=PX1-1;  
    59.  PX2=PX2+1;  
    60.   dw=I(PY1:PY2-8,PX1:PX2,:);  
    61.  t=toc;   
    62. figure(1),subplot(3,2,1),imshow(dw),title('定位剪切后的彩色车牌图像')  
    63. imwrite(dw,'dw.jpg');  
    64. [filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像');  
    65. jpg=strcat(filepath,filename);  
    66. a=imread(jpg);  
    67. %figure(1);subplot(3,2,1),imshow(a),title('1.定位剪切后的彩色车牌图像')  
    68. b=rgb2gray(a);  
    69. imwrite(b,'2.车牌灰度图像.jpg');  
    70. figure(1);subplot(3,2,2),imshow(b),title('2.车牌灰度图像')  
    71. g_max=double(max(max(b)));  
    72. g_min=double(min(min(b)));  
    73. T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值  
    74. [m,n]=size(b);  
    75. d=(double(b)>=T);  % d:二值图像  
    76. imwrite(d,'3.车牌二值图像.jpg');  
    77. figure(1);subplot(3,2,3),imshow(d),title('3.车牌二值图像')  
    78.   
    79. % 旋转  
    80. rotate=0;  
    81. d=imread('3.车牌二值图像.jpg');  
    82. bw=edge(d);  
    83. [m,n]=size(d);  
    84. theta=1:179;  
    85. % bw 表示需要变换的图像,theta 表示变换的角度  
    86. % 返回值 r 表示的列中包含了对应于 theta中每一个角度的 Radon 变换结果  
    87. % 向量 xp 包含相应的沿 x轴的坐标  
    88. [r,xp]=radon(bw,theta);  
    89. i=find(r>0);  
    90. [foo,ind]=sort(-r(i));  
    91. k=i(ind(1:size(i)));  
    92. [y,x]=ind2sub(size(r),k);  
    93. [mm,nn]=size(x);  
    94. if mm~=0 && nn~=0  
    95.     j=1;  
    96.     while mm~=1 && j<180 && nn~=0  
    97.         i=find(r>j);  
    98.         [foo,ind]=sort(-r(i));  
    99.         k=i(ind(1:size(i)));  
    100.         [y,x]=ind2sub(size(r),k);  
    101.         [mm,nn]=size(x);  
    102.         j=j+1;  
    103.     end  
    104.     if nn~=0  
    105.         if x   % Enpty matrix: 0-by-1 when x is an enpty array.  
    106.             x=x;  
    107.         else  % 可能 x 为空值  
    108.             x=90; % 其实就是不旋转  
    109.         end  
    110.         d=imrotate(d,abs(90-x)); % 旋转图像  
    111.         rotate=1;  
    112.     end  
    113. end  
    114. imwrite(d,'4.Radon 变换旋转后的二值图像.jpg');  
    115. figure(1),subplot(3,2,4),imshow(d),title('4.Radon 变换旋转后的二值图像')  
    116.   
    117. % 统一到白底黑字  
    118. [m,n]=size(d);  
    119. % flag=0 表示原来就是白底黑字,否则表示原来是黑底白字  
    120. flag=0;  
    121. c=d([round(m/3):m-round(m/3)],[round(n/3):n-round(n/3)]);  
    122. if sum(sum(c))/m/n*9>0.5  
    123.     d=~d;flag=1;  
    124. end  
    125. % 对反色后的图像预处理,整列几乎为白的认为是背景  
    126. if flag==1  
    127.     for j=1:n  
    128.         if sum(sum(d(:,j)))/m>=0.95  
    129.             d(:,j)=0;  
    130.         end  
    131.     end  
    132.     % 对以上处理后的图像再处理  
    133.     % 在左边 1/2 处找连续两条黑线,认为该黑线左边为背景;在右边 1/2 处找连续两条黑线,认为该黑线右边是背景  
    134.     % 左边 1/2  
    135.     jj=0;  
    136.     for j=1:round(n/2)  
    137.         if sum(sum(d(:,[j:j+0])))==0  
    138.             jj=j;  
    139.         end  
    140.     end  
    141.     d(:,[1:jj])=0;  
    142.     % 右边 1/2  
    143.     for j=n:-1:round(n/2)  
    144.         if sum(sum(d(:,[j-0:j])))==0  
    145.             jj=j;  
    146.         end  
    147.     end  
    148.     d(:,[jj:n])=0;  
    149. end  
    150. imwrite(d,'5.统一成黑底白字.jpg');  
    151. figure(1),subplot(3,2,5),imshow(d),title('5.背景色统一成黑底白字')  
    152. figure(2),subplot(5,1,1),imshow(d),title('5.黑底白字的二值车牌图像')  
    153.   
    154. % 去除上下边框  
    155. % STEP 1  黑白跳变小于阈值则被视为背景  
    156. % 上面 2/5  
    157. y1=10;  % y1: 跳变阈值  
    158. for i=1:round(m/5*2)  
    159.     count=0;jump=0;temp=0;  
    160.     for j=1:n  
    161.         if d(i,j)==1  
    162.             temp=1;  
    163.         else  
    164.             temp=0;  
    165.         end  
    166.         if temp==jump  
    167.             count=count;  
    168.         else  
    169.             count=count+1;  
    170.         end  
    171.         jump=temp;  
    172.     end  
    173.     if count<y1  
    174.         d(i,:)=0;  
    175.     end  
    176. end  
    177. % 下面 2/5  
    178. for i=3*round(m/5):m  
    179.     count=0;jump=0;temp=0;  
    180.     for j=1:n  
    181.         if d(i,j)==1  
    182.             temp=1;  
    183.         else  
    184.             temp=0;  
    185.         end  
    186.         if temp==jump  
    187.             count=count;  
    188.         else  
    189.             count=count+1;  
    190.         end  
    191.         jump=temp;  
    192.     end  
    193.     if count<y1  
    194.         d(i,:)=0;  
    195.     end  
    196. end  
    197. imwrite(d,'6.黑白跳变小于某阈值的行则被视为背景.jpg');  
    198. figure(2),subplot(5,1,2),imshow(d),title('6.黑白跳变小于某阈值的行则被视为背景')  
    199.   
    200. % STEP 2  单行白色大于阈值则被认为是背景,考虑 FLAG 的值  
    201. % 上面 2/5  
    202. y2=round(n/2); % y2: 阈值  
    203. for i=1:round(m/5*2)  
    204.     if flag==0  
    205.         temp=sum(d(i,:));y2=round(n/2);  
    206.         if temp>y2  
    207.             d(i,:)=0;  
    208.         end  
    209.     else  
    210.         temp=m-sum(d(i,:));y2=m-round(n/2);  
    211.         if temp<y2  
    212.             d(i,:)=0;  
    213.         end  
    214.     end  
    215. end  
    216. % 下面 2/5  
    217. for i=round(3*m/5):m  
    218.     if flag==0  
    219.         temp=sum(d(i,:));y2=round(n/2);  
    220.         if temp>y2  
    221.             d(i,:)=0;  
    222.         end  
    223.     else  
    224.         temp=m-sum(d(i,:));y2=m-round(n/2);  
    225.         if temp<y2  
    226.             d(i,:)=0;  
    227.         end  
    228.     end  
    229. end  
    230. imwrite(d,'7.单行白色点总数大于某阈值则该行被认为是背景.jpg');  
    231. figure(2),subplot(5,1,3),imshow(d),title('7.单行白色点总数大于某阈值则该行被认为是背景')  
    232. % STEP 3  单行白色大于阈值则被认为是背景,考虑 FLAG 的值  
    233. % 上面 2/5  
    234. y2=round(n/2); % y2: 阈值  
    235. for i=1:round(m/5*2)  
    236.     if flag==0  
    237.         temp=sum(d(i,:));y2=round(n/2);  
    238.         if temp>y2  
    239.             d(i,:)=0;  
    240.         end  
    241.     else  
    242.         temp=m-sum(d(i,:));y2=m-round(n/2);  
    243.         if temp<y2  
    244.             d(i,:)=0;  
    245.         end  
    246.     end  
    247. end  
    248. % 下面 2/5  
    249. for i=round(3*m/5):m  
    250.     if flag==0  
    251.         temp=sum(d(i,:));y2=round(n/2);  
    252.         if temp>y2  
    253.             d(i,:)=0;  
    254.         end  
    255.     else  
    256.         temp=m-sum(d(i,:));y2=m-round(n/2);  
    257.         if temp<y2  
    258.             d(i,:)=0;  
    259.         end  
    260.     end  
    261. end  
    262. imwrite(d,'8.单行白色点总数大于某阈值则该行被认为是背景.jpg');  
    263. figure(2),subplot(5,1,4),imshow(d),title('8.单行白色点总数大于某阈值则该行被认为是背景')  
    264. %  STEP 4 做完以上处理后,上边 1/2 中搜索连续两条黑线,认为该黑线以上为背景;  
    265. % 在下边 1/2 中搜索连续两条黑线,认为该黑线以下为背景  
    266. % 上边 1/2  
    267. for i=1:round(m/2)  
    268.     if sum(sum(d([i,i+0],:)))==0  
    269.         ii=i;  
    270.     end  
    271. end  
    272. d([1:ii],:)=0;  
    273. % 下边 1/2  
    274. for i=m:-1:round(m/2)  
    275.     if sum(sum(d([i-0:i],:)))==0  
    276.         ii=i;  
    277.     end  
    278. end  
    279. d([ii:m],:)=0;  
    280. imwrite(d,'9.搜索上下两条黑线后的结果.jpg');  
    281. figure(2),subplot(5,1,5),imshow(d),title('9.搜索上下两条黑线后的结果')  
    282.   
    283. % 反旋转  
    284. if rotate==1  
    285.     d=imrotate(d,-abs(x-90));  
    286. end  
    287. imwrite(d,'10.反旋转去毛刺后.jpg');  
    288. figure(3),subplot(3,2,1),imshow(d),title('10.反旋转去毛刺后')  
    289. % 切割处最小范围  
    290. d=qiege(d);e=d;  
    291. imwrite(d,'11.切割处最小范围.jpg');  
    292. figure(3),subplot(3,2,2),imshow(d),title('11.切割处最小范围')  
    293. figure(3),subplot(3,2,3),imshow(d),title('11.均值滤波前')  
    294.   
    295. % 滤波  
    296. h=fspecial('average',3);  
    297. d=im2bw(round(filter2(h,d)));  
    298. imwrite(d,'12.均值滤波后.jpg');  
    299. figure(3),subplot(3,2,4),imshow(d),title('12.均值滤波后')  
    300.   
    301. % 某些图像进行操作  
    302. % 膨胀或腐蚀  
    303. % se=strel('square',3);  % 使用一个3X3的正方形结果元素对象对创建的图像进行膨胀  
    304. % 'line'/'diamond'/'ball'...  
    305. se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵  
    306. [m,n]=size(d);  
    307. if bwarea(d)/m/n>=0.365  
    308.     d=imerode(d,se);  
    309. elseif bwarea(d)/m/n<=0.235  
    310.     d=imdilate(d,se);  
    311. end  
    312. imwrite(d,'13.膨胀或腐蚀处理后.jpg');  
    313. figure(3),subplot(3,2,5),imshow(d),title('13.膨胀或腐蚀处理后')  
    314.   
    315. % 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割  
    316. d=qiege(d);  
    317. [m,n]=size(d);  
    318. figure,subplot(2,1,1),imshow(d),title(n)  
    319. k1=1;k2=1;s=sum(d);j=1;  
    320. while j~=n  
    321.     while s(j)==0  
    322.         j=j+1;  
    323.     end  
    324.     k1=j;  
    325.     while s(j)~=0 && j<=n-1  
    326.         j=j+1;  
    327.     end  
    328.     k2=j-1;  
    329.     if k2-k1>=round(n/6.5)  
    330.         [val,num]=min(sum(d(:,[k1+5:k2-5])));  
    331.         d(:,k1+num+5)=0;  % 分割  
    332.     end  
    333. end  
    334. % 再切割  
    335. d=qiege(d);  
    336. % 切割出 7 个字符  
    337. y1=10;y2=0.25;flag=0;word1=[];  
    338. while flag==0  
    339.     [m,n]=size(d);  
    340.     left=1;wide=0;  
    341.     while sum(d(:,wide+1))~=0  
    342.         wide=wide+1;  
    343.     end  
    344.     if wide<y1   % 认为是左侧干扰  
    345.         d(:,[1:wide])=0;  
    346.         d=qiege(d);  
    347.     else  
    348.         temp=qiege(imcrop(d,[1 1 wide m]));  
    349.         [m,n]=size(temp);  
    350.         all=sum(sum(temp));  
    351.         two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));  
    352.         if two_thirds/all>y2  
    353.             flag=1;word1=temp;   % WORD 1  
    354.         end  
    355.         d(:,[1:wide])=0;d=qiege(d);  
    356.     end  
    357. end  
    358. % 分割出第二个字符  
    359. [word2,d]=getword(d);  
    360. % 分割出第三个字符  
    361. [word3,d]=getword(d);  
    362. % 分割出第四个字符  
    363. [word4,d]=getword(d);  
    364. % 分割出第五个字符  
    365. [word5,d]=getword(d);  
    366. % 分割出第六个字符  
    367. [word6,d]=getword(d);  
    368. % 分割出第七个字符  
    369. [word7,d]=getword(d);  
    370. subplot(5,7,1),imshow(word1),title('1');  
    371. subplot(5,7,2),imshow(word2),title('2');  
    372. subplot(5,7,3),imshow(word3),title('3');  
    373. subplot(5,7,4),imshow(word4),title('4');  
    374. subplot(5,7,5),imshow(word5),title('5');  
    375. subplot(5,7,6),imshow(word6),title('6');  
    376. subplot(5,7,7),imshow(word7),title('7');  
    377. [m,n]=size(word1);  
    378. % 商用系统程序中归一化大小为 32*16,此处演示  
    379. word1=imresize(word1,[40 20]);  
    380. word2=wordprocess(word2);  
    381. word3=wordprocess(word3);  
    382. word4=wordprocess(word4);  
    383. word5=wordprocess(word5);  
    384. word6=wordprocess(word6);  
    385. word7=wordprocess(word7);  
    386.   
    387.   
    388. subplot(5,7,15),imshow(word1),title('1');  
    389. subplot(5,7,16),imshow(word2),title('2');  
    390. subplot(5,7,17),imshow(word3),title('3');  
    391. subplot(5,7,18),imshow(word4),title('4');  
    392. subplot(5,7,19),imshow(word5),title('5');  
    393. subplot(5,7,20),imshow(word6),title('6');  
    394. subplot(5,7,21),imshow(word7),title('7');  
    395. imwrite(word1,'14.字符分割归一化后 1.jpg');  
    396. imwrite(word2,'14.字符分割归一化后 2.jpg');  
    397. imwrite(word3,'14.字符分割归一化后 3.jpg');  
    398. imwrite(word4,'14.字符分割归一化后 4.jpg');  
    399. imwrite(word5,'14.字符分割归一化后 5.jpg');  
    400. imwrite(word6,'14.字符分割归一化后 6.jpg');  
    401. imwrite(word7,'14.字符分割归一化后 7.jpg');  
    402.   
    403.   
    404. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    405. clc  
    406. word='';  
    407. word(1)=wordrec(word1);  
    408. word(2)=wordrec(word2);  
    409. word(3)=wordrec(word3);  
    410. word(4)=wordrec(word4);  
    411. word(5)=wordrec(word5);  
    412. word(6)=wordrec(word6);  
    413. word(7)=wordrec(word7);  
    414. clc  
    415. save I  'word1' 'word2' 'word3' 'word4' 'word5' 'word6' 'word7'  
    416. clear  
    417. load I;  
    418. load bp net;  
    419. word='';  
    420. word(1)=wordrec(word1);  
    421. word(2)=wordrec(word2);  
    422. word(3)=wordrec(word3);  
    423. word(4)=wordrec(word4);  
    424. word(5)=wordrec(word5);  
    425. word(6)=wordrec(word6);  
    426. word(7)=wordrec(word7);  
    427. word=strcat('识别结果:',word);  
    428. subplot(5,3,14),imshow([]),title(word,'fontsize',24)  
    429.   
    430. % 该子程序用于切割出最小范围  
    431. function e=qiege(d)  
    432. [m,n]=size(d);  
    433. top=1;bottom=m;left=1;right=n;   % init  
    434. while sum(d(top,:))==0 && top<=m  
    435.     top=top+1;  
    436. end  
    437. while sum(d(bottom,:))==0 && bottom>=1  
    438.     bottom=bottom-1;  
    439. end  
    440. while sum(d(:,left))==0 && left<=n  
    441.     left=left+1;  
    442. end  
    443. while sum(d(:,right))==0 && right>=1  
    444.     right=right-1;  
    445. end  
    446. dd=right-left;  
    447. hh=bottom-top;  
    448. e=imcrop(d,[left top dd hh]);  
    449.   
    450. % 分割字符  
    451. function [word,result]=getword(d)  
    452. word=[];flag=0;y1=8;y2=0.5;  
    453. % if d==[]  
    454. %   word=[];  
    455. % else  
    456.     while flag==0  
    457.         [m,n]=size(d);  
    458.         wide=0;  
    459.         while sum(d(:,wide+1))~=0 && wide<=n-2  
    460.             wide=wide+1;  
    461.         end  
    462.         temp=qiege(imcrop(d,[1 1 wide m]));  
    463.         [m1,n1]=size(temp);  
    464.         if wide<y1 && n1/m1>y2  
    465.             d(:,[1:wide])=0;  
    466.             if sum(sum(d))~=0  
    467.                 d=qiege(d);  % 切割出最小范围  
    468.             else word=[];flag=1;  
    469.             end  
    470.         else  
    471.             word=qiege(imcrop(d,[1 1 wide m]));  
    472.             d(:,[1:wide])=0;  
    473.             if sum(sum(d))~=0;  
    474.                 d=qiege(d);flag=1;  
    475.             else d=[];  
    476.             end  
    477.         end  
    478.     end  
    479. %end  
    480.           result=d;  
    481.         
    482. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    483. % 该子程序用于字符归一化处理  
    484. function d=wordprocess(d)  
    485. [m,n]=size(d);  
    486. %top 1/3, bottom 1/3  
    487. for i=1:round(m/3)  
    488.     if sum(sum(d([i:i+0],:)))==0  
    489.         ii=i;d([1:ii],:)=0;  
    490.     end  
    491. end  
    492. for i=m:-1:2*round(m/3)  
    493.     if sum(sum(d([i-0:i],:)))==0  
    494.         ii=i;d([ii:m],:)=0;  
    495.     end  
    496. end  
    497. if n~=1  
    498.     d=qiege(d);  
    499. end  
    500. % d=..这个可以通过训练过程设置大小  
    501. % d=imresize(d,[32 16]); % 商用系统程序中归一划大小为:32*16  
    502. d=imresize(d,[40 20]);   
    503.   
    504.   
    505. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    506. % 编号:A-Z 分别为 1-26; 0-9 分别为 27-36;  
    507. % 京  津  沪  渝  港  澳  吉  辽  鲁  豫  冀  鄂  湘  晋  青  皖  苏  
    508. % 赣  浙  闽  粤  琼  台  陕  甘  云  川  贵  黑  藏  蒙  桂  新  宁  
    509. % 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59   
    510. % 60 61 62 63 64 65 66 67 68 69 70  
    511. % 使用 BP 网络  
    512. function word=wordrec(xx)  
    513. % clear  
    514. % clc  
    515. load bp net;  
    516. xx=im2bw(xx);xx=double(xx(:));  % 使用阈值将图像转换为二进制图像  
    517. a=sim(net,xx);  % 归一划为: 32*16,则 xx=512*1;  
    518. [val,num]=max(a);  
    519. if num<=26  
    520.     word=char(double('A')+num-1);  
    521. elseif num<=36  
    522.     word=char(double('0')+num-1-26);  
    523. else  
    524.     switch num  
    525.         case 37  
    526.             word='京';  
    527.         case 38  
    528.             word='津';  
    529.         case 39  
    530.             word='沪';  
    531.         case 40  
    532.             word='渝';  
    533.         case 41  
    534.             word='港';  
    535.         case 42  
    536.             word='澳';  
    537.         case 43  
    538.             word='吉';  
    539.         case 44  
    540.             word='辽';  
    541.         case 45  
    542.             word='鲁';  
    543.         case 46  
    544.             word='豫';  
    545.         case 47  
    546.             word='冀';  
    547.         case 48  
    548.             word='鄂';  
    549.         case 49  
    550.             word='湘';  
    551.         case 50  
    552.             word='晋';  
    553.         case 51  
    554.             word='青';  
    555.         case 52  
    556.             word='皖';  
    557.         case 53  
    558.             word='苏';  
    559.         case 54  
    560.             word='赣';  
    561.         case 55  
    562.             word='浙';  
    563.         case 56  
    564.             word='闽';  
    565.         case 57  
    566.             word='粤';  
    567.         case 58  
    568.             word='琼';  
    569.         case 59  
    570.             word='台';  
    571.         case 60  
    572.             word='陕';  
    573.         case 61  
    574.             word='甘';  
    575.         case 62  
    576.             word='云';  
    577.         case 63  
    578.             word='川';  
    579.         case 64  
    580.             word='贵';  
    581.         case 65  
    582.             word='黑';  
    583.         case 66  
    584.             word='藏';  
    585.         case 67  
    586.             word='蒙';  
    587.         case 68  
    588.             word='桂';  
    589.         case 69  
    590.             word='新';  
    591.         case 70  
    592.             word='宁';  
    593.     end  
    594. end  
    595.   
    596.   
    597.   
    0 0
    原创粉丝点击