python - 从图像中去除线条伪影
问题描述
我正在创建一个 OCR 应用程序。它以扫描或照片打印形式从盒装部分中提取手写字符,并使用 CNN 读取它。
它使用轮廓成功地提取了字符,但在某些情况下,有些线条也被读取为轮廓。这些线条似乎是纯噪声或裁剪盒装部分时剩余像素的结果。盒装部分使用轮廓裁剪。
基本上,当使用良好的扫描仪扫描表单并以 PNG 格式保存时,它就可以工作。否则,它将无法正常工作。我也需要它来处理 JPEG 文件和废话相机/扫描仪。
那么这更多的是一个问题,即我在理论上可以使用哪些可能的技术。
我想删除行,或者让代码忽略它。
我试过了:
- 用负数n “填充”裁剪的盒装部分。因此,它改为从每一侧删除n 个像素。不过这个不能用太多,因为它也会吃掉角色的像素。
- 使用形态学操作“关闭”。不过,修改内核大小几乎没有什么意义。
- 实施盒装截面面积:字符面积比。如果检索到的轮廓面积与盒装截面面积的比率不在该范围内,则将其忽略。
这是它的样子:
灰色部分勾勒出检测到的轮廓。数字表示轮廓的索引,按检测到的顺序排列。请注意,也检测到了线条。我想摆脱这个。
除了干扰模型并使其在试图解释这些时胡说八道的线条之外,在某些情况下它似乎也会导致此错误:
ValueError: cannot reshape array of size 339 into shape (1,28,28,1)
也许我会在此期间开始调查这个问题。
解决方案
推荐阅读
- c# - 如何将json对象发送到剃须刀模型然后angularjs
- mysql - 将非空 CONCAT_GROUP 连接到 MySQL 中的父列
- java - Tricking Scanner 输入来自用户
- angular-dart - 如何使用选择元素的 onchange 事件在 AngularDart 中传递对象而不是字符串?
- javascript - 重构嵌套的 for...in 语句
- javascript - 添加指向外部网站的链接,它是我的 HTML 中的概要
- javascript - 按下多个键,但需要某些键只触发一次,直到在 JavaScript 中按下
- react-native - react-native init 给出 ESOCKETTIMEDOUT 错误
- assembly - ARM 组装。如何在同一行中同时输入 char 和 decimal
- swift - 试图将双打从一个视图传递到另一个视图,但它不起作用