博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matlab 车牌分割的算法
阅读量:7133 次
发布时间:2019-06-28

本文共 3011 字,大约阅读时间需要 10 分钟。

function Touying(g)f=rgb2gray(g);% [m n]=size(f);[row col]=size(f);% T=graythresh(f)% T=T*255% for i=1:row%     for j=1:col%        if(f(i,j)>T)%            f(i,j)=255;%        else f(i,j)=0;%        end%     end% endf=im2bw(f,0.85);figure,imshow(f);a=zeros(row,1);b=zeros(col,1); % h=fspecial('average',3); %均值滤波器% f=im2bw(round(filter2(h,f)));% imshow(f)for i=1:row    for j=1:col        a(i)=a(i)+f(i,j);%横向投影    endend% for j=1:col%     for i=1:row%         b(j)=b(j)+f(i,j);%纵向投影%     end% end% figure,plot(1:col,b)%%以上是白色像素点在行列里面的投影%%%%%%%%%%%%%%原版%%%%%%%%%%%%%%% for i=1:row%从上往下%     if (a(i)>60)%横向投影大于50的地方进行切割%         break;%     end% end% p=i;%记录此时的值% for i=row:-1:1%     if (a(i)>60)%         break;%     end% end% q=i;%%%%%%%%%%%自己改版%%%%%%%%%%%%%c=0;d=0;for i=1:row%从上往下    if (a(i)>50)%横向投影大于50的地方进行切割        c=c+1;        if(c>20)            break        end    endendp=i-20;%记录此时的值for i=row:-1:1    if (a(i)>50)        d=d+1;        if(d>20)           break        end    endendq=i+20;f=f(p:q,:);%%%%%%%%改版结束,成功%%%%%%%%%figure,imshow(f)%%%%%%%%继续新增%%%%%%%%%%%x=0;y=0; [row1 col1]=size(f);for j=1:col1    for i=1:row1        b(j)=b(j)+f(i,j);%纵向投影    endendfigure,plot(1:col1,b)for j=1:col1%从左往右    if (b(j)>7)%纵向投影大于50的地方进行切割        x=x+1;        if(x>15)            break        end    endendm=j-20;for j=col1:-1:1%从右往左    if (b(j)>7)%纵向投影大于50的地方进行切割        y=y+1;        if(y>15)            break        end    endendn=j+20;m,n,col1,row1f=f(:,m:n);figure,imshow(f);%plot(1:row,a),figure,plot(1:col,b)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wide=0;% flag=0;% if sum(f(:,wide+1))~=0%         flag=1;%         wide=wide+1;% end% if flag==1%     while sum(f(:,wide+1))~=0%         wide=wide+1;%     end% end% if (wide<10) %  认为是干扰% 	    f(:,[1:wide])=0;% end %%%%%%%%%%第二改版%%%%%%%%%%%%%%%%% figure,imshow(f)c=zeros(16);k=1;if (k<17)    for i=(c(k)+1):n        if (mod(k,2))            if (b(i)>1)%投影的阈值为3                c(k)=i;                k=k+1;            end        else if (b(i)<1)               c(k)=i;               k=k+1;            end        end     endend% c(1),c(2),c(3),c(4),c(5),c(6),c(7),c(8),c(9),c(10),c(11),c(12),c(13),c(14)    z1=f(1:end,c(1):c(2));    z2=f(1:end,c(3):c(4));    z3=f(1:end,c(5):c(6));    z4=f(1:end,c(7):c(8));    z5=f(1:end,c(9):c(10));    z6=f(1:end,c(11):c(12));    z7=f(1:end,c(13):c(14));%   z8=f(1:end,c(15):c(16));   figure,subplot (241) ,imshow(z1) ,title ('one') ;hold onsubplot (242) ,imshow(z2) ,title ('two') ;subplot (243) ,imshow(z3) ,title ('three') ;subplot (244) ,imshow(z4) ,title ('four') ;subplot (245) ,imshow(z5) ,title ('five') ;subplot (246) ,imshow(z6) ,title ('six') ;subplot (247) ,imshow(z7) ,title ('seven') ;%subplot (248) ,imshow(z8) ,title ('eight') ;%imwrite(z1,'z1.jpg')%imwrite(z2,'z2.jpg')%imwrite(z3,'z3.jpg')%imwrite(z4,'z4.jpg')%imwrite(z5,'z5.jpg')%imwrite(z6,'z6.jpg')%imwrite(z7,'z7.jpg')%imwrite(z8,'z8.jpg')

  这段代码经过几次修改,还是失败告终,不知道是不是投影出现了问题。不过如果阈值调得够好的话,是能切出字符的。

转载于:https://www.cnblogs.com/BIGShengun/p/5173621.html

你可能感兴趣的文章
【symfoware OPEN】数据库基本操作
查看>>
iphone:截屏
查看>>
Mac 下 VirtualBox ubuntu 共享空间
查看>>
CENTOS6.3利用Keepalived构建双主MySQL+双机热备
查看>>
常用算法收集
查看>>
listview的简单使用(Baseadapter)
查看>>
Oracle导入程序Imp的使用详解
查看>>
******技术宝典Web实战篇(第2版)英文版PDF格式
查看>>
Java多线程设计模式(4)线程池模式
查看>>
软件打包卖 虚拟化管理成重点
查看>>
backtrack学习之路之前绪
查看>>
RAID磁盘阵列的原理
查看>>
查询数据库所有依赖
查看>>
git常用命令
查看>>
两个无符号数相减 可以得到负数
查看>>
Mysql数据库的基本概念
查看>>
浅谈axios
查看>>
[20190213]测试服务端打开那些端口.txt
查看>>
[Django学习] Django基础(3)_templates与static配置
查看>>
Linux知识补充点
查看>>