Unprojecting_text_with_ellipses过程分析

news/2024/10/25 19:30:58/

文章目录

  • 一、单应性
    • 1. 图片实例
    • 2. 数学表达式
  • 二、算法思路
    • 1. 算法流程
    • 2. 透视失真具体解决方案
    • 3. 图片旋转具体解决方案
    • 4. 图片文字倾斜具体解决方案
  • 三、实际处理过程
  • 四、算法问题
  • 五、OCR识别

原文链接 https://mzucker.github.io/2016/10/11/unprojecting-text-with-ellipses.html

一、单应性

1. 图片实例

将普通 2D 文本图片转换成类似 3D 文本图片的映射过程叫做单应性。

借用原文中星球大战的图片, 这就是转换之后的图片.

2. 数学表达式

对每个像素点而言, 在 2D 到 3D 转换过程中满足下列式子

x′=ax+by+cgx+hy+1,y′=dx+ey+fgx+hy+1x' = \frac{ax+by+c}{gx+hy+1}, y'=\frac{dx+ey+f}{gx+hy+1} x=gx+hy+1ax+by+c,y=gx+hy+1dx+ey+f

x,yx,yx,y 表示转换前的像素坐标

x′,y′x',y'x,y 表示转换后的像素坐标

有未知参数 a,b,c,d,e,f,g,ha,b,c,d,e,f,g,ha,b,c,d,e,f,g,h

这些参数控制着图片是如何转换的, 其中就有

aaa 控制图片左右拉伸, eee 控制图片上下拉伸

b,db,db,d 控制图片左右倾斜, 类似于矩阵变为平行四边形的过程

ccc 控制图片左右移动, fff 控制图片上下移动

ggg 控制图片左右透视失真, hhh 控制图片透视失真

上面列出的星球大战字幕图片就是由单由参数 hhh 控制转换所得

二、算法思路

1. 算法流程

我们可以找到一个完美的算法求出式子中的所有参数, 然后就能将图片还原,但是这是理想状态. 所以原文提出了一个很棒的思路.

我们现在拍摄了一张照片, 然后对它进行三步骤的处理.

步骤一 : 解决透视失真的问题

步骤二 : 解决图片旋转的问题

步骤三 : 解决图片中文字倾斜的问题

2. 透视失真具体解决方案

首先通过 opencv 获取到图片中字符的轮廓 (这一步可能会有其他干扰).

作者提出了一个观点, 当处理后的图片中每一个字符各占面积几乎相等时就认为解决了透视失真这个问题. 转换成数学表达式则是

通过找到 g,hg,hg,h 两个参数, 使得

Stotal=∑i=1n(Ai−Aˉ)2S_{total} = \sum_{i=1}^{n}(A_i - \bar{A})^2 Stotal=i=1n(AiAˉ)2

最小, 其中 StotalS_{total}Stotal 表示面积差总平方和, AiA_iAi 表示第 iii 个字符的面积, Aˉ\bar{A}Aˉ 表示字符平均面积.

!!! 这里更准确一点应该被称为轮廓面积, 而不是字符面积, 因为通过 opencv 会检测到其他干扰项. 我们假设最佳情况就是只检测到字符. 以下步骤都是居于此来完成.

椭圆方程

f(x,y)=Ax2+Bxy+Cy2+Dx+Ey+F=0f(x,y) = Ax^2 + Bxy + Cy^2 + Dx + Ey + F = 0 f(x,y)=Ax2+Bxy+Cy2+Dx+Ey+F=0

通过一定手段使得列入计算的字符转换成相同面积的椭圆, 用椭圆方程中的A,B,C,D,E,FA,B,C,D,E,FA,B,C,D,E,F六个参数来描述该字符. 由此构建出一个矩阵用于解决透视失真问题.

3. 图片旋转具体解决方案

霍夫变换

4. 图片文字倾斜具体解决方案

用凸包表示一个字符, 构建一个矩阵使得图片中字符宽度最小化. 构建出的矩阵中的参数就是单应性所提到的参数 b,db,db,d

三、实际处理过程

输入图片

获取字符轮廓和面积

字符轮廓进行椭圆化处理, 解决透视失真

霍夫变换, 解决图片旋转问题

凸包代理, 解决文字倾斜问题

处理结果

四、算法问题

当使用如下图片进行处理时

在处理这个图片时就会误把边框进行处理, 且不能检测到所有字符.

五、OCR识别

未处理的图片识别

处理后的图片识别

未处理的图片识别

处理后的图片识别

未处理的图片识别 (不能识别)

处理后的图片识别

未处理的图片识别

处理后的图片识别


http://www.ppmy.cn/news/5751.html

相关文章

手办商城系统|Springboot+vue+ElementUI手办商城系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

【软件测试】概念篇

目录 一、需求 1.1用户需求 1.2软件需求 1.3需求的重要性 二、测试用例 三、BUG 3.1什么是BUG 3.2如何描述一个BUG 4.3BUG优先级 四、软件开发模型 4.1软件生命周期 4.2开发模型 定义:软件测试就是一系列活动,这些活动是为了评估一个程序或者…

git push踩坑记录【看注意事项】

记录一次git push的踩坑过程(详细在注意事项里,列出了具体的解决办法)。 push远程仓库命令 使用命令 git init git add . git commit -m "提交说明写在这里" git remote add origin gitgithub.com:xxx/surgical-robot.git git p…

为什么硬盘在macbook上无法编辑?mac不能往移动硬盘拷东西

为什么硬盘在macbook上无法编辑?如果您只想在Mac上查看NTFS文件,只需将NTFS 外置存储设备连接到mac电脑并查看文件。但要编辑或传输文件,则需要NTFS工具。 NTFS文件格式与Mac不兼容,但许多用户仍然喜欢使用NTFS文件,而…

基于松鼠算法改进的DELM预测-附代码

松鼠算法改进的深度极限学习机DELM的回归预测 文章目录松鼠算法改进的深度极限学习机DELM的回归预测1.ELM原理2.深度极限学习机(DELM)原理3.松鼠算法4.松鼠算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考:https:…

GitHub典藏版,腾讯T14级高级程序员亲码的分布式数据库实践,再次爆火

数据库就是要做好五件事,存储、事务、查询、复制和其他。而对分布式数据库来说,不仅要继续做这五件事,还要多出一件事,分片。在这六件事中,存储和其他这两件事与单体数据库差不多,难点就在事务、查询、复制…

P1220 关路灯(区间dp)

题目描述 某一村庄在一条路线上安装了 nn 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少)。老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯。 为了给村里节省电费&…

你一定要会的JavaFile

File对象就表示一个路径,可以是文件的路径,也可以是文件夹的路径这个路径可以是存在的,也允许是不存在的File的构造 方法名称说明public File(String pathname)根据文件路径创建文件对象public File(String parent,String child)根据父路径名…