首页 > 编程知识 正文

人脸识别matlab程序(基于matlab的人脸识别程序)

时间:2023-05-04 11:39:09 阅读:65036 作者:1899

感谢大家的支持! 目前,该公众号已启动评论消息功能。 你们对各条推文的留言和提问,可以通过【写评论】给圈主留言。 圈主马上回复你的信息。

要查看以前的文章,请单击右上角,关注并确认历史消息。 谢谢您的支持。

该推文主要识别的认证码是该:

第一步骤:二值化

二值化是指去除背景、噪声线、噪声像素等所有不需要的信息,仅留下应识别的文字,使图像成为二进制点。

步骤:字符分割

为了识别文字,需要分割识别的文字图像,将各文字作为单独的图像来处理。

步骤:标准化

一些特殊的验证码需要对分割的图像进行标准化。 也就是说,必须尽量使相同的字符采用相同的形式,减少随机性。 最简单的是旋转还原,复杂的点是扭曲还原等。 例如,在本文分割的数字1和8的宽度不一致的情况下,使它们的宽度一致是标准化的一种。

可以看到,上面剪切后的字符1的最右列的像素都是0。

步骤:学习认识

这个步骤有很多种方法,最简单的是模板比较,对出现的每个字符进行处理,使点成为字符串,指示是什么样的字符后,通过字符串比较来判断相似度。

在文章的后半部分详细说明我采用的算法。

训练集学习tran.m

width=132; height=20;

%共计10张验证码x 11个数字加起来分割成110张文字图像

%每个字符图像的高度20 x宽9,共180像素

data=zeros (110,180 );

chars=zeros (180,10 ); 用于存储字符数字的固有值为每个字符20x9

for name=0:9

im=imread(sprintf('%d.jpg ',name ) ); %读取图像

im=im2bw(im )==0; %第一步:将黑色1白0二值化

%步骤2 :拆分

布莱克=sum (im )~=0; 如果从上向下合计x132矩阵而1x132不为0,则在与横坐标对应的一列中有字符像素

wite=sum(im )==0; 如果将x132矩阵从上到下合计为1x132,则与横坐标相对应的列中没有字符像素

lower=find(min([black0],[1 white] ); 获取字符的开头下标

UPER=find(min([0black],[white 1] )- 1; 获取字符的结束下标

for i=1:11

ch=im(:lower(I ) :upper(i ) I ); %将剪切一个字符

ch (20,9 )=0; %步骤3 :将字符二值化矩阵的大小标准化为20x9

数据(name * 11i, )=ch ) : %字符图像数据存储在data中

结束

结束

%步骤4 :学习认识

class=集群数据(数据,10 ); 将110个字符的图像分为10种

%对应于每个分类号的实际数字(由人识别并填写---- () ) ) ) ) ) ) ) ) )

num=[5 3 6 8 9 0 7 2 1 4];

for i=1:10

%各类别的文字图像取平均值

im=mean (数据(class==I, ) ) 0.5;

chars(3360,num(I )1)=im; %存储

结束

验证码识别ocr.m

function ret=ocr (文件名)

加载;

ret=zeros (1,11 );

im=imread(filename;

im=im2bw(im )==0; %第一步:二值化

%步骤2 :拆分

布莱克=sum (im )~=0;

wite=sum(im )==0;

lower=find(min([black0],[1 white] );

UPER=find(min([0black],[white 1] )- 1;

for i=1:11

ch=im(:lower(I ) :upper(i ) I );

ch=ch(3360;

ch(180 )=0; %步骤3标准化

%步骤4 :识别

[~,num]=max(sum(min(repmat(ch,1,10 ),chars ) )

ret(I )=num-1;

结束

结束

过去的文章

量化投资和机器学习

知识、能力、深度、专业

勤奋、天赋、耐得住寂寞

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。