基于matlab使用光学字符识别技术识别文本(附源码)

news2024/11/20 14:36:57

一、前言

此示例演示如何使用计算机视觉工具箱中的函数执行光学字符识别。

二、实例

识别图像中的文本在许多计算机视觉应用程序中非常有用,例如图像搜索、文档分析和机器人导航。该函数提供了一种将文本识别功能添加到各种应用程序的简单方法。

函数返回已识别的文本、识别置信度以及文本在原始图像中的位置。您可以使用此信息来标识图像中错误分类文本的位置。

在这里,名片中的徽标被错误地归类为文本字符。在进行任何进一步处理之前,可以使用置信度值识别这些类型的 OCR 错误。

三、获得准确结果的挑战

ocr当文本位于统一背景上并且格式类似于浅色背景上带有深色文本的文档时,性能最佳。当文本出现在不均匀的深色背景上时,需要额外的预处理步骤才能获得最佳 OCR 结果。在示例的这一部分中,您将尝试在键盘上定位数字。虽然键盘图像对于 OCR 来说似乎很容易,但实际上非常具有挑战性,因为文本位于不均匀的深色背景上。

空表示无法识别任何文本。在键盘图像中,文本稀疏且位于不规则背景上。在这种情况下,用于内部文档布局分析的启发式方法可能无法在图像中找到文本块,因此文本识别失败。在这种情况下,使用该参数禁用自动布局分析可能有助于改进结果。

调整参数没有帮助。要了解 OCR 继续失败的原因,您必须调查在 中执行的初始二值化步骤。您可以使用 来检查此初始二值化步骤,因为两者和默认的“全局”方法都使用 Otsu 的图像二值化方法。

阈值化后,二进制图像不包含任何文本。这就是为什么无法识别原始图像中的任何文本的原因。您可以通过预处理图像来改进文本分割来帮助改进结果。示例的下一部分将探讨两种有用的预处理技术。

四、改善结果的图像预处理技术

上面看到的糟糕的文本分割是由图像中的不均匀背景引起的,即浅灰色键被深灰色包围。您可以使用以下预处理技术来删除背景变体并改进文本分割。

删除背景变体后,数字现在在二进制图像中可见。但是,按键边缘和数字旁边的小文本有一些伪影,可能会继续阻碍整个图像的准确 OCR。

现在,反转干净的二值化图像,以在浅色背景上生成包含深色文本的图像,以便进行 OCR。

在这些预处理步骤之后,数字现在与背景很好地分割并产生一些结果。

除了少数字符外,结果看起来基本上不准确。这是由于键盘中字符大小的差异导致自动布局分析失败。

改善结果的一种方法是利用有关图像中文本的先验知识。在此示例中,您感兴趣的文本仅包含数字和 '*#' 字符。您可以通过限制仅从集合“0123456789*#”中选择最佳匹配来改进结果。

结果现在更好,并且仅包含给定字符集中的字符。但是,识别结果中仍然缺少图像中感兴趣的字符。

五、基于投资回报率的处理以改善结果

为了进一步改善这种情况下的识别结果,请确定图像中应处理的特定区域。在键盘示例图像中,这些区域将是仅包含数字、* 和 # 字符的区域。您可以使用 手动选择区域,也可以自动执行该过程。

此示例中感兴趣的最小字符是数字“1”。使用其区域过滤任何异常值。

基于区域的纵横比进行进一步处理,以识别可能包含单个字符的区域。这有助于删除数字旁边混杂在一起的较小文本字符。通常,文本越大越容易识别。

其余区域可以传递到函数中,该函数接受感兴趣的矩形区域作为输入。区域的大小略有增加,以在文本字符周围包含其他背景像素。这有助于改进用于确定背景上文本极性的内部启发式方法(例如,深色背景上的浅色文本与浅色背景上的深色文本)。

通过设置为“无”来禁用自动布局分析。手动提供ROI输入时,设置为“块”,“单词”,“文本行”,“字符”或“无”可能有助于改善结果。需要实证分析来确定最佳布局分析值。

可以使用 在原始图像上显示识别出的文本。该函数用于删除任何尾随字符,例如空格或换行符。

虽然使您能够在键盘图像中找到数字,但它可能不适用于除文本之外还有许多对象的自然场景图像。

六、总结

此示例展示了如何使用该功能来识别图像中的文本,以及看似简单的 OCR 图像如何需要额外的预处理步骤才能产生良好的结果。

七、程序

使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)

程序下载:基于matlab使用光学字符识别技术识别文本资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/726098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS2022配置OpenCV4.7.0

1、下载并解压OpenCV OpenCV与VC版本的对应关系信息:OpenCV解压后在\opencv\build\x64文件夹下可以看到如下文件夹: 其中:vc16 Visual Studio 2019 2、配置环境变量 双击Path进入【编辑环境变量】界面,新建—>浏览将opencv\b…

半导体自动化专用风机风棒的特点

半导体自动化专用离子风机是一种专门用于半导体工业领域的设备。它采用了离子风技术,通过产生带电离子来达到除尘、静电消除、表面清洁等功能。 半导体生产过程中,电子元器件的制造需要保持高度的清洁和静电控制。离子风机通过释放正负电离子对空气中的…

剑指 Offer 41: 数据流中的中位数

这道题用的优先队列非常好,一边维护一个左半边,一边维护一个右半边。(注意:较大的一半不用改变规则,因为出都是默认出小的)。然后每次和小的队列开头的数比较(即偏小那个队列的最大值&#xff0…

【广州华锐互动】医疗健康数字孪生可视化系统有哪些功能?

医疗健康数字孪生可视化系统是一种将现实世界中的医疗设备、医院环境和患者数据与虚拟世界中的数字化副本相连接的技术。通过收集和分析实时数据,医疗健康数字孪生可视化系统可以帮助医疗机构提高运行效率、降低成本、优化资源分配,并为患者提供更好的诊…

2023工业自动化发展十大趋势

凭借着多年的行业经验和各种数据的汇总,推断出了在未来几年中,制药、服务和农业行业可能会在使用协作机器人技术方面处于重要地位,并且预估工业机器人自动化行业会有以下十大趋势变化。 1、对智能传感器的需求增加 质量检查是所有行业的关键组成部分,分析从食品到电话保护…

Spring MVC相关注解运用 —— 下篇

目录 一、ResponseBody、RestController 1.1. JSP页面 1.2 放行静态资源 1.3 编写实体类 1.4 控制器方法 1.5 添加依赖 1.6 测试结果 1.7 RestController 二、静态资源映射 2.1 配置静态资源筛查器 2.2 配置静态资源资源映射器 2.3 配置默认Servlet处理静态资源 三…

Element UI日期组件-选择月份具体到当月最后一天

Element已有的月份选择组件,只能展示开始月份的1号到结束月份的1号(例如:开始月份为3月,结束月份为3月,input框内只能展示2023-03-01至2023-03-01),但是我们的需求想要展示的是2023-03-01至2023…

AIGC - Stable Diffusion 超分辨率插件 StableSR v2 (768x768) 配置与使用

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131582734 论文:Exploiting Diffusion Prior for Real-World Image Super-Resolution StableSR 算法提出了一种新颖的方法&#xff0…

【Java项目】Vue+ElementUI+Ceph实现多类型文件上传功能

文章目录 前端后端Java 前端 ElementUI 文件上传的页面使用的是ElementUI的 下面是index.vue页面&#xff0c;有点小bug&#xff08;但是我真改不动&#xff0c;前端还在学习中&#xff09; <template><div><el-uploadclass"upload-demo":action&qu…

1.浮动 ( float )

学习目标&#xff1a; 1.1 传统网页布局的三种方式 网页布局的本质——用 CSS来摆放盒子&#xff0c;把盒子摆放到相应位置 CSS提供了三种传统布局方式(简单说,就是盒子如何进行排列顺序) : ●普通流(标准流) ●浮动 ●定位 1.2 标准流(普通流/文档流) 所谓的标准流&#xf…

Go基础知识学习

文章目录 介绍背景和起源特点和优势 安装和设置下载和安装Go语言配置Go环境变量GOROOT和GOPATHGOPROXY 编辑器、IDE等工具Hello, World!基本结构和数据类型关键字标识符变量常量基本数据类型类型转换 控制流程数组和切片数组切片 函数定义和调用函数函数参数和返回值 结构体和方…

Jmeter学习笔记

Jmeter学习笔记 1、安装 1.1、下载 官方地址&#xff1a;https://archive.apache.org/dist/jmeter/binaries/ 1.2、环境变量 此电脑 --> 属性 --> 高级系统设置 --> 环境变量 设置JMETER_HOME&#xff0c;值为jmeter的路径D:\apache-jmeter-4.0 设置Path&…

【设计模式】第十四章:策略模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

scanpy sc.pp.normalize_per_cell bug

今天遇到一个很奇怪的bug, 当今天跑covid_atlas数据集的时候&#xff0c;在123服务器总是报错&#xff0c;但是我记得在122服务器上是跑过没问题的 最终的测试结果如下 import scanpy as sc import numpy as np from QUEST import QUEST from QUEST.utils import get_free_…

【MySQL】简介 MySQL 事务

一、事务 ACID 原则 什么是事务呢&#xff1f;事务通常是一个或一组 SQL 组成的&#xff0c;组成一个事务的 SQL 一般都是一个业务操作&#xff0c;例如下单操作&#xff1a;【扣库存数量、增加订单详情记录、插入物流信息】&#xff0c;这一组 SQL 就可以组成一个事务。 而数据…

推特开始限制用户可以阅读的推文数量

推特正在限制用户可以阅读的推文数量&#xff0c;因为埃隆马斯克 (Elon Musk) 拥有的服务长期中断&#xff0c;阻碍了用户跟踪新帖子的能力。 在一条推文中&#xff0c;马斯克详细介绍了修改后的使用配额。 经过验证的帐户持有者每天最多可以浏览 6000 个帖子&#xff0c;而未…

docker的联合文件系统 UnionFS《深入docker底层原理》

介绍 docker最大的贡献就是定义了容器镜像的分层的存储格式&#xff0c;docker镜像技术的基础是联合文件系统(UnionFS)&#xff0c;其文件系统是分层的。这样既可以充分利用共享层&#xff0c;又可以减少存储空间占用。 联合挂载系统的工作原理&#xff1a;读&#xff1a;如果…

结束 guard else 只能使用 return ?

Guard 语句 A guard statement is used to transfer program control out of a scope if one or more conditions aren’t met. 如果一个或者多个条件不成立&#xff0c;可用 guard 语句来退出当前作用域 (guard所在的作用域)。 Statement Form 语句格式 guard condition1, co…

软件设计模式与体系结构-设计模式-行为型软件设计模式-中介者模式

三、中介者模式&#xff08;迪米特法则&#xff09; 概念 模式动机&#xff1a; 为了减少对象两之间复杂的引用关系&#xff0c;使之成为一个松耦合的系统&#xff0c;需要适用中介者模式 定义&#xff1a; 用一个中介对象来封装一系列的对象交互&#xff0c;中介者使各对象…

从0开始,手写Redis

说在前面 从0开始&#xff0c;手写一个Redis的学习价值在于&#xff1a; 可以深入地理解Redis的内部机制和原理&#xff0c;Redis可谓是面试的绝对重点和难点从而更好地掌握Redis的使用和优化帮助你提高编程能力和解决问题的能力手写一个Redis可以作为一个优质的简历轮子项目…