计算机视觉——基于傅里叶幅度谱文档倾斜度检测与校正

2024-04-06 14:52

本文主要是介绍计算机视觉——基于傅里叶幅度谱文档倾斜度检测与校正,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

在计算机视觉领域,处理文档数据时,OCR算法的性能往往会受到文档的倾斜度影响。如果文档在输入到模型之前没有经过恰当的校正,模型就无法期待模型能够提供准确的预测结果,或者模型预测的精度会降低。例如,在信息提取系统中,如果向OCR模型提供了倾斜的图像,模型可能无法准确地识别出文本内容的同时,文本的对齐方式也可能因此而丢失。特别在一些包含了表格检测文档,如果在进行表格检测之前没有对图像的倾斜度进行校正,那么模型可能无法准确地预测出表格的边界和角落。

文档的倾斜度是指在扫描或数字化捕获过程中,文档图像出现的倾斜或斜度。这种情况通常因为图像获取时的环境或者设备的原因。在文档处理系统中,进行倾斜估计是一项至关重要的工作,尤其对于扫描得到的文档图像而言,因为准确的倾斜估计直接影响到后续处理步骤的效果。
在这里插入图片描述

文档倾斜校正

主要的方法是通过在2D离散傅里叶幅度谱上应用自适应径向投影来提取给定文档图像的主要倾斜角度。这一过程首先通过二维离散傅里叶变换(DFT)将文档图像从空间域转换到频率域,生成一个频谱,其中每个点的强度代表了图像中特定频率的幅度。这一变换揭示了图像倾斜度的关键频率成分。

接着,对傅里叶幅度谱进行分析,因为在幅度谱中,文档的倾斜度表现为主导方向。通过识别这些方向,可以估计出倾斜角度。

自适应径向投影是这个方法的核心创新点,它包括两个独立的步骤:

  1. 初始径向投影:这一步用于估计初步的倾斜角度,通过在傅里叶谱的中心发出的径向线上投影幅度来实现。得到最高投影值的径向线指示了图像中文本的主要方向,从而关联到倾斜角度。
  2. 校正投影:这一步骤对初步估计进行细化,考虑到初步投影可能受到文本对齐或图像中非文本元素等因素的影响。校正投影会适应这些因素,以提供更精确的倾斜角度估计。

在通过径向投影识别出主导方向后,计算出相应的倾斜角度。这个角度指示了需要旋转的角度,以便将图像中的文本与水平或垂直轴对齐,从而有效地校正图像的倾斜。

为了提高方法的准确性,还包括了一些额外的步骤,比如考虑傅里叶谱中的直流分量(DC)和低频成分,这对于处理不同类型文档图像非常重要。

具体实践与算法推导可看论文《Adaptive Radial Projection on Fourier Magnitude Spectrum for Document Image Skew Estimation》。

代码实现

首先,使用_get_fft_magnitude()函数计算快速傅里叶变换的幅度,如下所示:

def _ensure_gray(image):try:image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)except cv2.error:passreturn imagedef _ensure_optimal_square(image):assert image is not None, imagenw = nh = cv2.getOptimalDFTSize(max(image.shape[:2]))output_image = cv2.copyMakeBorder(src=image,top=0,bottom=nh - image.shape[0],left=0,right=nw - image.shape[1],borderType=cv2.BORDER_CONSTANT,value=255,)return output_imagedef _get_fft_magnitude(image):gray = _ensure_gray(image)opt_gray = _ensure_optimal_square(gray)# threshopt_gray = cv2.adaptiveThreshold(~opt_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, -10)# perform fftdft = np.fft.fft2(opt_gray)shifted_dft = np.fft.fftshift(dft)# get the magnitude (module)magnitude = np.abs(shifted_dft)return magnitude

然后使用径向投影计算倾斜角度,该投影沿着各种径向线投影傅里叶谱的幅度:

def _get_angle_radial_projection(m, angle_max=None, num=None, W=None):"""Get angle via radial projection.Arguments:------------:param angle_max : :param num: number of angles to generate between 1 degree:param w: :return:"""assert m.shape[0] == m.shape[1]r = c = m.shape[0] // 2if angle_max is None:passif num is None:num = 20tr = np.linspace(-1 * angle_max, angle_max, int(angle_max * num * 2)) / 180 * np.piprofile_arr = tr.copy()def f(t):_f = np.vectorize(lambda x: m[c + int(x * np.cos(t)), c + int(-1 * x * np.sin(t))])_l = _f(range(0, r))val_init = np.sum(_l)return val_initvf = np.vectorize(f)li = vf(profile_arr)a = tr[np.argmax(li)] / np.pi * 180if a == -1 * angle_max:return 0return a

一旦得到倾斜角度,将使用该倾斜角度来校正上述图像的倾斜度。

def correct_text_skewness(image):"""Method to rotate image by n degree:param image::return:"""# cv2_imshow(image)h, w, c = image.shapex_center, y_center = (w // 2, h // 2)# Find angle to rotate imagerotation_angle = get_skewed_angle(image)print(f"[INFO]: Rotation angle is {rotation_angle}")# Rotate the image by given n degree around the center of the imageM = cv2.getRotationMatrix2D((x_center, y_center), rotation_angle, 1.0)borderValue = (255, 255, 255)rotated_image = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderValue=borderValue)return rotated_image...

这篇关于计算机视觉——基于傅里叶幅度谱文档倾斜度检测与校正的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取