camscanner(扫描全能王)功能解析与复现 - 页面矫正

朋友邀我协作一个免费简易扫描APP,于是这几天把页面矫正提上来思考。整理一些心得,以此录之,填充下这块被我冷落到凋零的园区(希望后面能勤快点)。

不少blog给出边缘+hough,可以解决部分情况。就通用性而言,有很多细节需要考虑:

- 比如页面里本身就自带很多线,或者背景本身有线干扰

- 比如页面本身不完整,不完全存在4边

-比如页面有弧度,hough下直线响应不明显

我的思路(有借鉴,基本原创,如雷同了,真不是抄的):

- 输入图像(来自网上,如有不妥请留言,我尽快更换掉;选这个,主要想看线条复杂,边界不是很明晰的测试,前处理灰度化了)

  

- 边缘与线段分割:我选用 Edge Drawing / Edge Line (也可以利用canny + hough给出)

  亮绿为边缘,暗绿+红色端点为线段,我控制线段比较严格,线段比较碎,所以我加了后面的合并步骤

  

- 把夹角小于设定值且端点距离相近的线合并 (同时给出每条线的响应值:梯度值越高得分也高,线越长也有相应加成)

  把长度很短的去掉

  

- 通过提取的线,由响应值排序,获取前面N条线(我自己 N = 16,也就是最多保留N条),为了通用性,把输入图像的4个边,分配一个小的响应值,也加入到候选线集(N = 20 最多情况)

  

- 设计候选矩形框评估函数准则 (给定任意4个直线方程):

*通过相邻直线夹角最大为原则,进行排列(预处理)

  *组合四边形4个角越接近90度,得分越高

*把非凸的四边形去掉

   *把面积小于页面某个设定值的去掉(我设了 0.2 * W * H)

  *线段(前面提取的线段)对应计算边(2直线计算所得)重叠率越高,得分有加成

   *宽高比越接近0.707,得分有轻微加成

   *越满足平行四边形,得分有轻微加成

    *4个线段响应值越高,得分越高

- 通过上述准则,暴力【(N-4)*(N-5)*(N-6)*(N-7) 最多这么多个矩形组合】检索,获得最佳的4条线,输出角点,并对角点按形变最小原则进行顺时针排序, 主要是些几何运算,其实速度很快

  中间一些组合框示意

  

  最高得分

   

- 几何校正与增强

  

刚编了.so。等我不懒的时候,弄个win版的给大家试试。

如果路过的你有更好的思路,欢迎留言!

原文地址:https://www.cnblogs.com/cvdream/p/12571134.html

时间: 2024-10-02 00:33:34

camscanner(扫描全能王)功能解析与复现 - 页面矫正的相关文章

蓝叠模拟器(BlueStacks4)+扫描全能王在PC上处理扫描文件

------------恢复内容开始------------ 刚好今天有小朋友问如何把扫描文件美化的问题,于是尝试着用安卓模拟器来解决. 首先就是模拟器和PC之间文件互传的问题. 上网搜了一堆解决方法都不靠谱,最后自己摸索出来并且成功. 我的这种方法只需3步:1.安装模拟器和PC互传文件 第一步:安装ES文件浏览器(模拟器) 第二步:新建共享文件夹(PC) 第三步:ES - 网络 - 局域网 - 新建(模拟器) 服务器:PC的IP地址 用户名:默认是Administrator 密 码:登陆密码

扫描全能王 v5.13.0.20190916 官方中文去广告版

说明 1.先安装1(安装完不要打开),再安装2,然后打开2,参考下图: 2.不要登录扫描全能王账号,否则会导致失败! 下载地址 城通网盘 原文地址:https://www.cnblogs.com/coco56/p/12069427.html

Matlab中plot函数全功能解析

Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName',PropertyValue,...)plot(axes_handle,...)h = plot(...)hlines = plot('v6',...) 描述 plot(Y)如果Y是m×n的数组,以1:m为X横坐标,Y中的每一列元素为Y坐标,绘制n条曲线:如果Y是n×1或者1×n的向量,则以1:n

Unity5 新功能解析--物理渲染与standard shader

Unity5 新功能解析--物理渲染与standard shader http://blog.csdn.net/leonwei/article/details/48395061 物理渲染是UNITY5最大的亮点之一,物理渲染的采用绝对是下一个世代游戏的热点,UNITY5的大范围使用是一个可喜可贺的事情,关于什么是物理渲染,本人曾经写过一篇博客专门讨论,详见http://blog.csdn.net/leonwei/article/details/44539217. 物理渲染和当今的主流光照计算最大

学习笔记之rpm程序包管理功能解析

Rpm包管理功能全解 软件包管理的功能:将编译好的程序的各组成文件打包成一个或几个程序包文件,为了方便的实现程序包的安装.升级.卸载.查询.校验.数据库维护. 下面我们来看看RPM包管理的解析 Rpm包在redhat和S.U.S.E中有很大的应用 我们接下来就以centos系统中rpm包的管理做一些详细的功能解析 使用yum(rhel系列)安装时可以自动解决依赖关系d rpm包命名格式: name-VERSION-release.arch.rpm VERSION:major.minor.rele

【原创】Matlab中plot函数全功能解析

[原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName',PropertyValue,...)plot(axes_handle,...)h = plot(...)hlines = plot('v6

优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:XPath无效怎么办?

XPath无效怎么办?明明XPath是通过定位子节点,copy xpath得到的,理论上是正确的 XPath无效怎么办?明明XPath是通过按F12定位符再copy XPath得到的,可是放在代码里就是不对呢? 前提:优酷电视剧爬虫代码实现一:下载解析视频网站页面(2)工作量已经完成.基于这个基础,进一步完善代码 1.新建页面解析接口. package com.dajiangtai.djt_spider.service; import com.dajiangtai.djt_spider.enti

php中调用这个功能可以在web页面中显示hello world这个经典单词

php程序写的时间长了,自然对他所提供的功能了如指掌,他所提供的一大堆功能,真是觉得很好用,但有时候会发现php也缺少一些功能,自己总是会产生为php添加一些自定义的功能的想法.久而久之,终于今天憋不住了,开始动手研究如何添加. 下载一个php的源代码包,这里使用的是php 4.0.5版,解压后会看到php的根目录下会有README.EXT_SKEL这样一个文件,打开详细阅读了一下,发现了一个非常好用的工具,这个工具可以帮你构建一个空的php扩展,然后你向里面添加相应的代码就可以完成你自己的功能

python解析远程web页面的代码

把写代码过程中经常用到的一些代码段珍藏起来,下面的代码段是关于python解析远程web页面的代码. import htmllib, urllib, formatter, sys def parse(url, formatter): f = urllib.urlopen(url) data = f.read() f.close() p = htmllib.HTMLParser(formatter) p.feed(data) p.close() fmt = formatter.AbstractFo