图像处理:文档图像矫正DDCP

本文介绍了一种新的文档图像矫正方法DDCP,通过自动提取图像语义信息预测控制点和参考点,利用稀疏映射实现精确矫正,且允许多次编辑,提高了实用性。算法包括编码器结构、控制点与参考点的匹配以及训练策略,旨在降低文档处理中的扭曲影响。
摘要由CSDN通过智能技术生成


前言

文档图像矫正简单来说就是由于纸张的物理变形、拍摄环境和相机位置,相机捕获的文档图像经常会出现扭曲和背景问题。 上述因素将显着增加信息提取和内容分析的难度。 为了减少文档图像处理中失真的影响而采取的措施。本文要介绍的方法为Document Dewarping with Control Points

github: https://github.com/gwxie/Document-Dewarping-with-Control-Points.

一、算法架构

请添加图片描述
文中提出了一种校正失真文档图像并精细去除背景的新方法。如图1(d)所示,我们利用编码器架构从图像中自动提取语义信息,用于预测图1(e)中的控制点和参考点

控制点和参考点由相同数量的顶点组成,分别描述了校正前和校正后文档在图像中的形状。

然后,利用控制点与参考点之间的插值方法,将稀疏映射转换为反向映射,并将原始失真文档图像重新映射为校正后的图像。此外,我们的方法可以在修正效果不理想的情况下进行多次编辑,提高了其实用性,从而缓解了端到端方法可操作性差的缺点。

二、算法细节

1.定义

以往的研究将几何校正任务视为密集网格预测问题,将二维图像作为输入,输出一个正向映射(每个网格表示出扭曲输出图像中像素点的坐标,像素点对应出扭曲输入图像中的像素点)或反向映射(每个网格表示出扭曲输入图像中像素点的坐标)。我们的方法简化了这一过程,直接预测稀疏映射,然后使用插值将其转换为密集向后映射。
为了便于解释,文章定义以下概念:
顶点:表示文档图像中某个点的坐标。在本文中,我们可以通过改变坐标来移动顶点。
控制点:由一组顶点组成。如图2©所示,在失真图像上分布控制点,用以描述文档的几何变形。
参考点:由与控制点相同数量的顶点组成。如图2(d)所示,参考点描述规则形状。通过对控制点和参考点进行匹配,利用解翘曲网格实现文档的去翘曲。
请添加图片描述

2.矫正pipeline

首先,将变形文档的图像输入网络,得到两个输出分支;该方法采用编码器结构作为特征提取器,利用学习到的特征分别预测控制点和参考点,实现多任务预测。其次,如图1(e)所示,通过将控制点移动到参考点的位置并将其转换为像素级位置映射来构建矫正网格。为了移动控制点的位置,将稀疏映射转换为密集映射,在控制点和参考点之间采用了插值方法(TPS, Linear, Cubic等)之后,从原始扭曲文档图像的一个地方提取像素,并映射到矫正图像的另一个位置

3.网络结构

网络模型以扭曲变形文档图像为输入,预测控制点和参考点均为(31 × 31 × 2),每个位置对应了x,y坐标。由于参考点是由一个规则网格组成的,它们可以由水平方向和垂直方向的点间隔( v’ 和 h‘ )来构造。请添加图片描述

3.训练损失函数

文章综合参考点和控制点作为标签,监督训练模型。训练损失函数由两部分组成。一个用于回归控制点点的位置,另一个是两个点在水平和垂直方向上的间隔
参考点使用标准的l1损失。

def loss_fn_l1_loss(self, input, target):
  	return F.l1_loss(input, target, size_average=self.classify_size_average)

控制点损失由两部分组成,第一部分为smooth-l1 loss,第二部分为微分坐标损失。
与人脸重点检测不同,文档图像的内容布局是不规则的。虽然smooth-L1损失指导模型如何将每个顶点放置在一个近似的位置,但很难表示一个点相对于它的邻居或每个表面点的局部细节的关系。为了建立一个容错能力更强的模型来更好地描述形状,使用微分坐标作为中心坐标的替代表示。 δ v \delta_v δv δ h \delta_h δh分别代表中心点在水平和垂直方向上的位移趋势,有助于保持相应方向上的相关性。同理, δ \delta δ表示交叉口与两个方向的局部位置相关性。
请添加图片描述请添加图片描述

    def loss_fn4_v5_r_4(self, input, target, size_average=False):
        i_t = target - input

        '''one'''
        loss_l1 = F.smooth_l1_loss(input, target, size_average=size_average)


        '''two'''
        loss_local = torch.mean(torch.pow(F.conv2d(F.pad(i_t, (4, 4, 4, 4), mode='replicate'), self.kernel_cross_17, padding=0, groups=2) - i_t*17, 2))

        return loss_l1, loss_local, 0, 0

4.code细节

1)模型输入为(1, 3, 992, 992)的tensor,输出下采样32倍,为(1,2,31,31)。对应了31x31个控制点坐标。
2)生成的数据控制点为61x61,可在dataloader中根据间隔来确定模型的控制点标签的数量,比如间隔为2,生成31x31的标签

	def fiducal_points_lbl(self, fiducial_points, segment):

		fiducial_point_gaps = [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60]  # POINTS NUM: 61, 31, 21, 16, 13, 11, 7, 6, 5, 4, 3, 2
		fiducial_points = fiducial_points[::fiducial_point_gaps[self.row_gap], ::fiducial_point_gaps[self.col_gap], :]
		segment = segment * [fiducial_point_gaps[self.col_gap], fiducial_point_gaps[self.row_gap]]
		return fiducial_points, segment
		#fiducial_points为控制点标签,segment为参考点标签。

总结

DDCP是一个简单有效文档矫正的办法,其提出的通过控制点矫正的思想能够精准有效的矫正文档,同时对控制点和参考点预测能够让模型具有对背景去除的能力。此外,文章还提出了用于模型训练的数据生成方法。

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值