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

这篇具有很好参考价值的文章主要介绍了计算机视觉——基于傅里叶幅度谱文档倾斜度检测与校正。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

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

文档的倾斜度是指在扫描或数字化捕获过程中,文档图像出现的倾斜或斜度。这种情况通常因为图像获取时的环境或者设备的原因。在文档处理系统中,进行倾斜估计是一项至关重要的工作,尤其对于扫描得到的文档图像而言,因为准确的倾斜估计直接影响到后续处理步骤的效果。
图片中的径向线,计算机视觉,计算机视觉,OpenCV,文档校正,python,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:
        pass
    return image


def _ensure_optimal_square(image):
    assert image is not None, image
    nw = 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_image


def _get_fft_magnitude(image):
    gray = _ensure_gray(image)
    opt_gray = _ensure_optimal_square(gray)

    # thresh
    opt_gray = cv2.adaptiveThreshold(
        ~opt_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, -10
    )

    # perform fft
    dft = 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] // 2

    if angle_max is None:
        pass

    if num is None:
        num = 20

    tr = np.linspace(-1 * angle_max, angle_max, int(angle_max * num * 2)) / 180 * np.pi
    profile_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_init

    vf = np.vectorize(f)
    li = vf(profile_arr)

    a = tr[np.argmax(li)] / np.pi * 180

    if a == -1 * angle_max:
        return 0
    return a

一旦得到倾斜角度,将使用该倾斜角度来校正上述图像的倾斜度。文章来源地址https://www.toymoban.com/news/detail-846594.html

def correct_text_skewness(image):
    """
    Method to rotate image by n degree
    :param image:
    :return:
    """
    # cv2_imshow(image)
    h, w, c = image.shape
    x_center, y_center = (w // 2, h // 2)

    # Find angle to rotate image
    rotation_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 image
    M = 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
    ...

到了这里,关于计算机视觉——基于傅里叶幅度谱文档倾斜度检测与校正的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机视觉】基于OpenCV计算机视觉的摄像头测距技术设计与实现

    在当今技术日益进步的时代,计算机视觉已成为我们生活中不可或缺的一部分。从智能监控到虚拟现实,计算机视觉技术的应用范围日益广泛。在这篇博客中,我们将探索一个特别实用的计算机视觉案例:使用OpenCV实现摄像头测距。这一技术不仅对专业人士有用,也为编程爱

    2024年02月04日
    浏览(36)
  • 基于计算机视觉的手势识别技术

    一个不知名大学生,江湖人称菜狗 original author: Jacky Li Email : 3435673055@qq.com Time of completion:2023.5.2 Last edited: 2023.5.2 手语是一种主要由听力困难或耳聋的人使用的交流方式。这种基于手势的语言可以让人们轻松地表达想法和想法,克服听力问题带来的障碍。 这种便捷的交流方式

    2024年02月04日
    浏览(37)
  • 基于计算机视觉的葡萄检测分级系统

    【摘要】设计了一套基于计算机视觉的葡萄检测分级系统,包括驱动装置、输送机构、夹持机构、图像釆集与 处理系统和分级控制系统,葡萄以悬挂方式连续输送,两个 CCD 摄像机在外触发模式下实时采集葡萄的两面图像。 基于 RGB 色彩空间计算果面着色率,采用投影面积法和

    2024年02月19日
    浏览(25)
  • 基于计算机视觉的学生上课姿态识别

    数据集 1.1  A VA 数据集介绍 AVA数据集为目前行为数据集中背景最复杂、人体目标最多的数据集,是由Google在2018年所发表的一个用于训练动作检测的数据集,该数据集注释430个15分钟电影切片中的80个原子视觉动作,在空间和时间上定位了动作,从而产生了1.62万个动作标签。这

    2024年02月02日
    浏览(47)
  • 基于机器视觉的车道线检测 计算机竞赛

    🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的视频多目标跟踪实现 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 理解车道检测的概念 那么什么是车道检测?以下是百度百科对车道的定义:

    2024年02月08日
    浏览(39)
  • 计算机竞赛 - 基于机器视觉的图像拼接算法

    图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧,你用你的手机对某一场景拍照,但是你没有办法一次将所有你

    2024年02月13日
    浏览(53)
  • 基于计算机视觉的坑洼道路检测和识别

    本研究论文提出了一种使用深度学习和图像处理技术进行坑洼检测的新方法。所提出的系统利用VGG16模型进行特征提取,并利用具有三重损失的自定义Siamese网络,称为RoadScan。该系统旨在解决道路上的坑洼这一关键问题,这对道路使用者构成重大风险。由于道路上的坑洼造成

    2024年02月05日
    浏览(40)
  • 计算机竞赛 基于机器视觉的行人口罩佩戴检测

    简介 2020新冠爆发以来,疫情牵动着全国人民的心,一线医护工作者在最前线抗击疫情的同时,我们也可以看到很多科技行业和人工智能领域的从业者,也在贡献着他们的力量。近些天来,旷视、商汤、海康、百度都多家科技公司研发出了带有AI人脸检测算法的红外测温、口罩

    2024年02月10日
    浏览(40)
  • 基于计算机视觉的物流和供应链管理

    作者:禅与计算机程序设计艺术 物流、供应链是一个非常重要的现代经济活动,许多企业都面临着如何提高效率,降低成本,改善供应链服务质量的问题。目前,人们已经在探索如何通过人工智能、物联网等新兴技术,实现自动化运输过程和管理。基于计算机视觉技术的物流

    2024年02月10日
    浏览(29)
  • 计算机视觉 - 基于黄金模板比较技术的缺陷检测

            基于黄金模板比对的检测是一种常见的视觉应用。当进行缺陷检查而其他缺陷检测方法是不可行的时候,使用金模板比较。另外当物体的表面或物体的形状非常复杂时,此技术特别有用。          虽然说黄金模板比较的技术的思路很简单,但是真正落地实施确

    2024年02月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包