首页 > 其他分享 >基于 MATLAB 的图片中文字的提取及识别

基于 MATLAB 的图片中文字的提取及识别

时间:2024-10-29 22:45:57浏览次数:9  
标签:文字 字符 end ii MATLAB 图像 提取 识别

摘要

随着现代社会的发展,信息的形式和数量正在迅猛增长。其中很大一部分是图像,图像可以把事物生动地呈现在我们面前,让我们更直观地接受信息。同时,计算机已经作为一种人们普遍使用的工具为人们的生产生活服务。从图像中提取文字属于信息智能化处理的前沿课题,是当前人工智能与模式识别领域中的研究热点。由于文字具有高级语义特征, 对图片内容的理解、索引、检索具有重要作用,因此,研究图片文字提取具有重要的实际意义。又由于静态图像文字提取是动态图像文字提取的基础,故着重介绍了静态图像文字提取技术。

关键词:MATLAB 图像处理 文字提取 文字识别

一.引言

随着计算机科学的飞速发展,以图像为主的多媒体信息迅速成为重要的信息传递媒介, 在图像中,文字信息(如新闻标题等字幕) 包含了丰富的高层语义信息,提取出这些文字, 对于图像高层语义的理解、索引和检索非常有帮助。图像文字提取又分为动态图像文字提取和静态图像文字提取两种,其中,静态图像文字提取是动态图像文字提取的基础,其应用范围更为广泛,对它的研究具有基础性,

所以本文主要讨论静态图像的文字提取技 术。静态图像中的文字可分成两大类: 一种是图像中场景本身包含的文字, 称为场景文字; 另一种是图像后期制作中加入的文字, 称为人工文字,如右图所示。场景文字由于其出现的位置、小、颜色和形态的随机性, 一般难于检测和提取;而人工文字则字体较规范、大小有一定的限度且易辨认,颜色为单色, 相对与前者更易被检测和提取,

又因其对图像内容起到说明总结的作用,故适合用来做图像的索引和检索关键字。对图像中场景文字的研究难度大,目前这方面的研究成果与文献也不是很丰富,本文主要讨论图像中人工文字提取技术。

二.静态图像中文字的特点

静态图像中文字(本文特指人工文字,下同)具有以下主要特征:

  1. 文字位于前端,且不会被遮挡;
  2. 文字一般是单色的;
  3. 文字大小在一幅图片中固定,并且宽度和高度大体相同,从满足人眼视觉感受的角度来说,图像中文字的尺寸既不会过大也不会过小;
  4. 文字的分布比较集中;
  5. 文字的排列一般为水平方向或垂直方向;
  6. 多行文字之间,以及单行内各个字之间存在不同于文字区域的空隙。在静态图片文字的检测与提取过程中, 一般情况下都是依据上述特征进行处理的。

三.文字提取、识别的一般流程

静态图像文字提取一般分为以下步骤:文字区域检测与定位、文字分割与文字提取、文字后处理。其流程如图1所示。

end

countY(i,1)=countY(i,1)+1;

[maxY indexY]=max(countY); tempY1=indexY;

while (countY(tempY1,1)>3) && (tempY1>1) tempY1=tempY1-1;

end tempY2=indexY;

while (countY(tempY2,1)>3) && (tempY2<m) tempY2=tempY2+1;

end tempY1=tempY1-1; tempY2=tempY2+1;

iiY=I(tempY1:tempY2,:); %确定了Y方向上的文字区域

%figure(5);imshow(iiY);title('Y方向区域大致确定后的图像','color','b');

%横向扫描countX=zeros(1,n); for j=1:n

for i=tempY1:tempY2 if ii(i,j)==0

countX(1,j)=countX(1,j)+1;

end

end

end

tempX1=1;

while (countX(1,tempX1)<3) && (tempX1<n) tempX1=tempX1+1;

end tempX2=n;

while (countX(1,tempX2)<3) && (tempX2>1) tempX2=tempX2-1;

end tempX1=tempX1-1; tempX2=tempX2+1;

iiXY=iiY(:,tempX1:tempX2); %确定了整体的文字区域

%figure(6);imshow(iiXY);title('X、Y方向区域都大致确定后的图像','color','b');

ii=(iiXY~=1);%黑色背景,白色字体

%figure(7);imshow(ii);title('背景和文字交换颜色的图像','color','b'); ii=bwareaopen(ii,200); %删除面积小于200的杂质图像

%figure(8);imshow(ii);title('删除杂质干扰的图像','color','b');

myI=charslice(ii); %限定文字区域

%figure(9);imshow(ii);title('限定文字区域的图像','color','b');

y1=10;y2=0.25;flag=0;

maxnum=40;k=1; %maxnum为字符个数限定值,k用于统计实际字符个数word=cell(1,maxnum); %建立单元阵列,用于储存字符

figure(10)

while size(myI,2)>10 %当myI的长度小等于10,可确定没有字符了[word{k},myI]=getword(myI); %获取字符

k=k+1;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%

if k==2

subplot(5,1,1);imshow(myI);title('第一次切割后的图像','color','b');

end

if k==3

subplot(5,1,2);imshow(myI);title('第二次切割后的图像','color','b');

end

if k==5

subplot(5,1,3);imshow(myI);title('第四次切割后的图像','color','b');

end

if k==16

subplot(5,1,4);imshow(myI);title('第十五次切割后的图像','color','b');

end

end

subplot(5,1,5);imshow(myI);title('最后一次切割后的图像','color','b');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%

cnum=k-1; %实际字符总个数

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%

figure(11); for j=1:cnum

subplot(5,8,j),imshow(word{j}),title(int2str(j)); %显示字符end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%

for j=1:cnum

word{j}=imresize(word{j},[40 40]); %字符规格化成40×40的

end figure(12); for j=1:cnum

subplot(5,8,j),imshow(word{j}),title(int2str(j)); %显示字符end

for j=1:cnum

imwrite(word{j},[int2str(j),'.jpg']); %保存字符end

defx=40;defy=40;

code=char('由于作者水平有限书中难免存在缺点和疏漏之处恳请读批评指正,。');%创建字符集

codenum=size(code,2); %获取字符集中字符个数for i=1:cnum

ch=int2str(i); %数字转化为字符tempbw=imread([ch '.jpg']); %打开预匹配字符for k=1:codenum

fname=strcat('C:\Users\Administrator\Desktop\ 数字图像处理大作业\ 字符匹配库

\',code(k),'.jpg'); %字符匹配库中的字符sample=imread(fname); subsam=abs(tempbw-sample); %作比较

count=sum(sum(subsam)); %匹配误差统计

err(k)=count;

end

end erro=err(1:codenum);

minerror=min(erro); %找出误差最小的模板字符findc=find(erro==minerror); %获取模板字符序号Code(i)=code(findc); %将字符装入Code

figure(13); imshow(ii);

tt=title(['文字信息: ', Code(1:cnum)],'Color','b'); %显示字符信息set(tt,'fontsize',24); %设置字体

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%将图片文字写入newtxt文本new=['newtxt','.txt']; c=fopen(new,'a+'); fprintf(c,'%s\n',Code(1:cnum)); fclose(c);

t=toc

charslice(字符分割)函数源代码:

%字符分割

function y=charslice(ii) [m,n]=size(ii); top=1;bottom=m;left=1;right=n; while sum(ii(top,:))==0 && top<m

top=top+1;

end

while sum(ii(bottom,:))==0 && bottom>=1 bottom=bottom-1;

end

while sum(ii(:,left))==0 && left<n left=left+1;

end

while sum(ii(:,right))==0 && right>=1 right=right-1;

end

ydiff=bottom-top; xdiff=right-left;

y=imcrop(ii,[left top xdiff ydiff]);

getword(字符获取)函数源代码:

%字符获取

function [word,result]=getword(ii) word=[];flag=0;y1=8;y2=0.5; while flag==0

[m,n]=size(ii); wide=0;

while sum(ii(:,wide+1))~=0 && wide<=n-2 wide=wide+1;

end

temp=charslice(imcrop(ii,[1 1 wide m])); [m1,n1]=size(temp);

if wide<y1 && n1/m1>y2 ii(:,1:wide)=0;

if sum(sum(ii))~=0

ii=charslice(ii); % 切割出最小范围

else word=[];flag=1; end

else

word=charslice(imcrop(ii,[1 1 wide m])); ii(:,1:wide)=0;

end

end

if sum(sum(ii))~=0; ii=charslice(ii); flag=1;

else ii=[]; end

result=ii;

标签:文字,字符,end,ii,MATLAB,图像,提取,识别
From: https://blog.csdn.net/2401_84458964/article/details/143352081

相关文章

  • 变电站设备状态识别监测智能巡视系统
    变电站设备状态识别监测智能巡视系统利用先进的图像处理和机器学习技术,变电站设备状态识别监测智能巡视系统通过变电站现场的监控摄像机对设备状态进行实时监测。系统能够自动识别配电箱闸刀的开合状态。通过与旁边的标准位置线进行比较,系统能够准确判断配电箱闸刀的开合情况。此......
  • 使用 Smalltalk 进行基础图像识别
    Smalltalk是一种面向对象的编程语言,以其简单而优雅的语法而闻名。虽然它不是传统的图像处理语言,但通过一些图形库,我们仍然可以实现基础的图像识别功能。本文将演示如何在Smalltalk中加载图像、进行灰度转换和实现边缘检测。Smalltalk的优势Smalltalk提供了强大的面向对象特......
  • 使用 Nim 进行基础图像识别
    Nim是一门现代编程语言,具有静态类型、编译型、效率高且易于阅读的语法。Nim支持多种编程范式,非常适合用于图像处理和机器学习等任务。本文将演示如何使用Nim进行基础图像识别,包括图像加载、灰度转换和边缘检测。Nim的优势Nim语言具备强大的性能和简洁的语法,使得它在数据处......
  • 工作牌佩戴监测识别系统
    工作牌佩戴监测识别系统充分利用了工厂现场已有的摄像头设备,无需额外的硬件投入。工作牌佩戴监测识别系统采用AI视频智能分析算法,实时对监控区域内的工作人员进行识别和检测。系统可以准确识别出人员是否佩戴了工作牌,并判断其是否符合要求。工作牌佩戴监测识别系统一旦监测到进入......
  • 用Python将 UE5内存分析日志 提取到Excel表
            上篇文章我们已经实现了 “使用Python批量提取文本中,当某一行存在 “×××××”时获取这一行文字,并将所有提取的内容按顺序保存到一个新的文件中”。而后来我发现这个功能已经不能满足我的需求了,所以本次我们将重新对一个更复杂文件的内容进行批量提......
  • 基于深度学习+pytorch+Flask+SpringBoot+Vue+MySQL的水果识别系统
    目录前言1.登陆注册2.水果识别3.识别记录4.用户管理5.个人中心6.模型训练7.模型测试源码获取前言本系统是一个完整的基于深度学习+pytorch+Flask+SpringBoot+Vue+MySQL的水果识别系统。包括LeNet、AlexNet、VGG、GoogLeNet、ResNet、MobileNetV2网络模型。可以直接......
  • 基于深度学习+pytorch+Flask+SpringBoot+Vue+MySQL的动物识别系统
    目录前言1.登陆注册2.动物识别3.识别记录4.用户管理5.个人中心6.模型训练7.模型测试源码获取前言本系统是一个完整的基于深度学习+pytorch+Flask+SpringBoot+Vue+MySQL的动物识别系统。包括LeNet、AlexNet、VGG、GoogLeNet、ResNet、MobileNetV2网络模型。可以直接......
  • 明星人脸识别基于VGG、MTCNN、RESNET深度学习卷积神经网络应用|附数据代码
    全文链接:https://tecdat.cn/?p=38046原文出处:拓端数据部落公众号分析师:XinzuDu 人脸识别技术作为生物特征识别技术的重要组成部分,在近三十年里得到了广泛的关注和研究,已经成为计算机视觉、模式识别领域的研究热点。然而由于存在光线、背景、人脸遮挡等问题,如何准确识别出人......
  • 如何训练自己的数据集之,大量火灾烟雾识别数据集,识别
    大量火焰烟雾识别数据集,46000余张图像,22GB数据量,提供voc标注,yolo标注,涵盖高位摄像头,无人机拍摄,日常场景拍摄等多种场景,+yolo训练代码火焰数据集烟雾数据集森林火灾数据集大规模火焰与烟雾识别数据集规模:46,000余张图像,数据量约22GB类别:主要检测两类目标火焰烟雾标注格......
  • 基于ResNet50模型的船型识别与分类系统研究
    项目源码获取方式见文章末尾!600多个深度学习项目资料,快来加入社群一起学习吧。《------往期经典推荐------》项目名称1.【LSTM模型实现光伏发电功率的预测】2.【卫星图像道路检测DeepLabV3Plus模型】3.【GAN模型实现二次元头像生成】4.【CNN模型实现mnist手写数字......