CN117078548A - 一种基于fpga的相机图像畸变校正方法 - Google Patents

一种基于fpga的相机图像畸变校正方法 Download PDF

Info

Publication number
CN117078548A
CN117078548A CN202311051835.5A CN202311051835A CN117078548A CN 117078548 A CN117078548 A CN 117078548A CN 202311051835 A CN202311051835 A CN 202311051835A CN 117078548 A CN117078548 A CN 117078548A
Authority
CN
China
Prior art keywords
correction
coordinates
coordinate
image
point
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311051835.5A
Other languages
English (en)
Inventor
代景欢
徐霄
鲁耀杰
任杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yuanxiang Technology Suzhou Co ltd
Metoak Technology Beijing Co ltd
Original Assignee
Yuanxiang Technology Suzhou Co ltd
Metoak Technology Beijing Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Yuanxiang Technology Suzhou Co ltd, Metoak Technology Beijing Co ltd filed Critical Yuanxiang Technology Suzhou Co ltd
Priority to CN202311051835.5A priority Critical patent/CN117078548A/zh
Publication of CN117078548A publication Critical patent/CN117078548A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Image Processing (AREA)

Abstract

本发明公开了一种基于FPGA的相机图像畸变校正方法,包括:步骤1、对接收到的原始畸变图像进行帧缓存,并读取预设二次拟合曲线系数;步骤2、根据预设二次拟合曲线系数以及预设FPGA本地行缓存容量,通过坐标计算的方式,确定分块区域;步骤3、根据分块区域,逐行确定原始畸变图像中的回读区域;步骤4、根据回读区域,对原始畸变图像进行回读,记作回读图像,并读取回读图像中校正坐标周围像素点的像素值,其中,校正坐标由预设二次拟合曲线系数确定;步骤5、根据回读图像中校正坐标周围像素点的像素值,确定待校正点的像素值,并根据待校正点的像素值,生成校正图像。通过对畸变图像的回读以分块形式处理,解决了对FPGA本地大量存储资源的需求问题。

Description

一种基于FPGA的相机图像畸变校正方法
技术领域
本发明涉及图像处理领域,尤其涉及一种基于FPGA的相机图像畸变校正方法。
背景技术
相机是计算机视觉领域中的重要传感器,但相机所拍摄到的图像或多或少会存在图像畸变,如桶形畸变、枕形畸变。产生此类图像畸变直接原因是镜头的边缘部分与中心部分的放大倍率不一样,属于光学透镜的固有特性。这种畸变造成相机拍摄出的图像中只有通过中心区域的图像可以保持平直,其他部分的图像会变得弯曲,且越远离图像中心形变程度越大。因此,在进行图像检测/识别之前,需要消除图像畸变带来的不良影响。
现有的图像畸变校正技术方案大多采用向后映射或向前映射两种实现方式,其中,向后映射是将校正图像整数坐标映射到畸变图像中,通过映射点周围的像素来插值得到相应的新像素。在向后映射的实现过程中,需要缓存一定大小的图像数据,缓存图像的大小与图像畸变程度、图像分辨率成正比,且随着相机分辨率越来越高、图像畸变程度越来越大,这就会导致对相机中对硬件存储资源的需求也越来越大。
以FPGA芯片为例,由于一般器件在其他逻辑设计/处理时同样需要一定的存储资源,不可能将大部分存储资源用于图像缓存;即使其他逻辑占用存储资源相对较少,用FPGA芯片中大量存储资源来做图像缓存也会造成资源浪费,并增加布局布线难度。所以大多设计方案会采用外挂SDRAM(同步动态随机存储器)或使用DDR(双倍速率同步动态随机存储器)来做图像缓存,但由于外挂存储器的方式在进行图像畸变校正时需要实时访问,这样又引入了频繁访问总线过程带来的时延问题和DDR带宽占用问题,进而造成了FPGA芯片处理帧率的下降以及与其共用DDR的SOC处理速度的下降。
因此,对于如何解决FPGA硬件实现图像畸变校正时,特别是对于大畸变、大分辨率图像,向后映射方式占用FPGA芯片大量存储资源的问题,以及使用DDR或SDRAM等外挂存储器做图像缓存时带来的时延和带宽利用率不高的问题,是本领域技术人员亟需解决的。
发明内容
本申请所要解决的技术问题是:如何解决FPGA硬件实现图像畸变校正时,特别是对于大畸变、大分辨率图像,向后映射方式占用FPGA芯片大量存储资源的问题,以及使用DDR或SDRAM等外挂存储器做图像缓存时带来的时延和带宽利用率不高的问题。
为了解决上述技术问题,本申请提出一种基于FPGA的相机图像畸变校正方法,该校正方法包括:步骤1、对接收到的原始畸变图像进行帧缓存,并读取预设二次拟合曲线系数;步骤2、根据预设二次拟合曲线系数以及预设FPGA本地行缓存容量,通过坐标计算的方式,确定分块区域;步骤3、根据分块区域,逐行确定原始畸变图像中的回读区域;步骤4、根据回读区域,对原始畸变图像进行回读,记作回读图像,并读取回读图像中校正坐标周围像素点的像素值,其中,校正坐标由预设二次拟合曲线系数确定;步骤5、根据回读图像中校正坐标周围像素点的像素值,确定待校正点的像素值,并根据待校正点的像素值,生成校正图像。
在一些实施例中,任一组预设二次拟合曲线系数对应于校正图像中的一行像素点,步骤2,具体包括:步骤201、根据任一组预设二次拟合曲线系数,构建对应的校正坐标计算方程;步骤202、根据校正坐标计算方程,通过坐标计算的方式,依次计算原始畸变图像中的各个校正坐标;步骤203、根据预设FPGA本地行缓存容量,按照校正坐标的顺序,依次确定各组预设二次拟合曲线系数对应的第一分块区域的第一起始点和最大分块位置;步骤204、选取各个最大分块位置中列坐标的最小值,并将相应的最大分块位置作为第一分块区域的第一终止点,并根据第一起始点和第一终止点,确定第一分块区域;步骤205、根据第一终止点以及校正坐标,确定第二分块区域的第二起始点,重复执行步骤203,依次确定原始畸变图像的各个分块区域;其中,第一起始点为预设二次拟合曲线系数对应的第一个校正坐标,第二起始点为校正坐标中第一终止点右侧的第一个校正坐标,或者,第二起始点为与校正坐标中与第一终止点列坐标相同的校正坐标。
在一些实施例中,步骤203中,具体包括:选取各组预设二次拟合曲线系数对应的第一个校正坐标,记作第一分块区域的第一起始点;按照校正坐标的顺序,依次计算第一起始点之后的各个校正坐标的行坐标与第一个校正坐标的行坐标的行差值;当行差值大于预设FPGA本地行缓存容量时,选取前一个校正坐标,记作第一分块区域的最大分块位置。
在一些实施例中,任一组预设二次拟合曲线系数对应于校正图像中的一行像素点,步骤2,具体包括:步骤2.1、根据任一组预设二次拟合曲线系数,构建对应的校正坐标计算方程;步骤2.2、根据校正坐标计算方程以及预设FPGA本地行缓存容量,通过坐标计算的方式,依次确定各组预设二次拟合曲线系数对应的第一分块区域的第一起始点和最大分块位置;步骤2.3、选取各最大分块位置中列坐标的最小值,并将相应的最大分块位置作为第一分块区域的第一终止点,并根据第一起始点和第一终止点,确定第一分块区域;步骤2.4、根据第一终止点以及对应的校正坐标计算方程,确定第二分块区域的第二起始点,重复执行步骤2.2,依次确定原始畸变图像的各个分块区域;其中,第一起始点由预设二次拟合曲线系数中的常数项系数确定。
在一些实施例中,步骤2.2还包括:对第一起始点向上取整;根据预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向上或向下移动;根据移动后的行坐标,利用对应的校正坐标计算方程,计算对应的列坐标;对计算出的列坐标向上取整,根据移动后的行坐标和取整后的列坐标,确定最大分块位置。
在一些实施例中,根据预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向上或向下移动,具体包括:根据校正坐标计算方程,获取第一起始点后预设数量个校正坐标;根据预设数量个校正坐标的行坐标变化趋势,确定行坐标移动方向;根据预设FPGA本地行缓存容量以及行坐标移动方向,移动取整后的第一起始点的行坐标。
在一些实施例中,步骤2.4,根据第一终止点以及对应的校正坐标计算方程,确定第二分块区域的第二起始点,具体包括:利用坐标计算的方式,根据校正坐标计算方程,判断第一终止点的列坐标是否对应于校正坐标的列坐标,若是,则将校正坐标对应的像素点作为第二分块区域的第二起始点,若否,则将第一分块区域中包含的最后一个校正坐标对应的像素点作为第二分块区域的第二起始点。
在一些实施例中,步骤2.2还包括:统计第一分块区域中第一起始点至最大分块位置之间包含的校正坐标的个数;判断个数是否小于或等于预设本地坐标缓存容量,若是,执行步骤2.3,若否,根据预设本地坐标缓存容量,选取最后一个校正坐标更新最大分块位置,执行步骤2.3。
在一些实施例中,预设二次拟合曲线系数包括x轴拟合系数、y轴拟合系数,x轴拟合系数由原始畸变图像中相应校正坐标的横轴坐标拟合确定,y轴拟合系数由原始畸变图像中相应校正坐标的纵轴坐标拟合确定,校正坐标计算方程的计算公式为:
式中,Fx(z)是第z个待校正点对应于原始畸变图像中校正坐标的行坐标计算值,ax、bx、cx分别是x轴拟合系数中的二次项系数、一次项系数、常数项系数,Fy(z)是第z个待校正点对应于原始畸变图像中校正坐标的列坐标,ay、by、cy分别是y轴拟合系数中的二次项系数、一次项系数、常数项系数,z为待校正点的编号,z=0,1,2,...,n,n为设定的待校正点的个数。
在一些实施例中,步骤4中,读取回读图像中校正坐标周围像素点的像素值,具体包括:对当前待校正点对应于回读图像中的校正坐标进行向下取整;根据取整后的校正坐标,确定其左上角的像素点为第一个待读取像素点,并以第一个待读取像素点为起始点,按顺时针方向,选取第一个待读取像素点相邻的其余三个坐标点,作为第二至第四个待读取像素点;从回读图像中读取四个待读取像素点的像素值。
与现有技术相比,本申请具有的有益效果如下:
1、本申请所提供的一种基于FPGA的相机图像畸变校正方法,引入将畸变图像的回读以分块的方式从硬件存储中回读到本地并缓存的方法,根据预设二次拟合曲线系数以及预设FPGA本地行缓存容量,通过坐标计算的方式,确定畸变图像需要回读的区域,根据回读区域,读取回读图像中校正坐标周围像素点的像素值,并确定待校正点的像素值,以此生成校正图像;通过将畸变图像以分块的方式从硬件存储中回读到FPGA本地并缓存,每块图像只缓存少数几行,解决了对FPGA本地大量存储资源的需求问题,即使在大畸变、大分辨率的要求下,也尽可能地减少了实现畸变校正功能对FPGA本地存储资源占用,提高了FPGA资源利用率。
2、本申请所提供的一种基于FPGA的相机图像畸变校正方法,在利用硬件存储缓存整帧图像的基础上,回读部分图像到FPGA本地存储并用于校正运算,从而避免了直接操作存储器本身带来的时延问题,且整个过程使用流水线处理方式,大大提高了处理速度,畸变校正的处理帧率得到了大幅度提升。
3、本申请所提供的一种基于FPGA的相机图像畸变校正方法,相比于传统方案中直接操作DDR时每处理一个点就需要访问DDR一次或多次,回读的数据量较大,频繁的总线操作占用较多DDR带宽,导致的操作系统处理速度的下降的问题,本申请中对畸变图像的回读以分块形式处理,每块回读图像数据量最多为本地所缓存行数,一般情况下只需要回读当前行与上一行在当前块内的行差的数据量,大大减少了实现畸变校正功能对DDR带宽的占用,保证了DDR的使用效率。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,从而可依照说明书的内容予以实施,并且为了让本申请的上述和其他目的、特征和优点能够更明显易懂,以下以本申请的较佳实施例并配合附图详细说明如后。
根据下文结合附图对本申请具体实施例的详细描述,本领域技术人员将会更加明了本申请的上述及其他目的、优点和特征。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在所有附图中,类似的元件或部分一般由类似的附图标记标识。附图中,各元件或部分并不一定按照实际的比例绘制。
图1为本申请中基于FPGA的相机图像畸变校正方法流程图;
图2为本申请实施例中校正坐标、二次拟合系数构成示意图;
图3为本申请实施例中对畸变图像进行分块过程的一个示意图;
图4为本申请实施例中对畸变图像进行分块过程的另一个示意图;
图5为本申请实施例中确定回读位置过程示意图;
图6为本申请实施例中畸变图像的block划分和缓存示意图;
图7为本申请实施例中双线性插值原理图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。在下面的描述中,提供诸如具体的配置和组件的特定细节仅仅是为了帮助全面理解本申请的实施例。因此,本领域技术人员应该清楚,可以对这里描述的实施例进行各种改变和修改而不脱离本申请的范围和精神。另外,为了清楚和简洁,实施例中省略了对已知功能和构造的描述。
应该理解,说明书通篇中提到的“一个实施例”或“本实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“一个实施例”或“本实施例”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。
此外,本申请可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身并不指示所讨论各种实施例和/或设置之间的关系。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,单独存在B,同时存在A和B三种情况,本文中术语“/和”是描述另一种关联对象关系,表示可以存在两种关系,例如,A/和B,可以表示:单独存在A,单独存在A和B两种情况,另外,本文中字符“/”,一般表示前后关联对象是一种“或”关系。
本文中术语“至少一种”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和B的至少一种,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含。
实施例1
现有的图像畸变校正方法可以采用向后映射的方式实现畸变校正,向后映射是将校正图像整数坐标映射到畸变图像中,通过映射点周围的像素来插值得到相应的新像素。在向后映射的实现过程中,需要缓存一定大小的图像数据,缓存图像的大小与图像畸变程度、图像分辨率成正比,且随着相机分辨率越来越高、图像畸变程度越来越大,这就会导致对相机中对硬件存储资源的需求也越来越大。因此,对于大畸变、大分辨率的情况畸变图像,向后映射方式对FPGA存储资源的占用较大,并且在使用外挂硬件存储器做图像缓存时,还会带来较大的时延,且带宽利用率不高。
为此,本实施例提供一种基于FPGA的相机图像畸变校正方法,在该校正方法中引入了将畸变图像的回读图像以分块的方式从硬件存储中回读到本地并缓存的思路,解决了图像畸变校正时对FPGA本地存储资源占用较大的问题,即使在大畸变、大分辨率的情况下,也可以有效的减少畸变校正对FPGA本地存储资源占用,提高了FPGA资源利用率。
结合附图1所示,本实施例中的该校正方法包括:步骤1、对接收到的原始畸变图像进行帧缓存,并读取预设二次拟合曲线系数;步骤2、根据预设二次拟合曲线系数以及预设FPGA本地行缓存容量,通过坐标计算的方式,确定分块区域;步骤3、根据分块区域,逐行确定原始畸变图像中的回读区域;步骤4,根据回读区域,对原始畸变图像进行回读,记作回读图像,并读取回读图像中校正坐标周围像素点的像素值,其中,校正坐标由预设二次拟合曲线系数确定;步骤5、根据回读图像中校正坐标周围像素点的像素值,确定待校正点的像素值,并根据待校正点的像素值,生成校正图像。
本领域技术人员能够理解的是,对于一款相机而言,校正图像与原始畸变图像中各像素点之间校正前后的坐标对应关系,是依赖相机标定获取的相机内参与畸变参数,基于针孔相机数学模型以及相机畸变数学模型,通过计算得到。因此,在相机的上述参数确定后,校正图像中每一个像素点映射至畸变图中的坐标是固定的。
本实施例中,将相机拍摄获得的图像记作原始畸变图像,将畸变校正后生成的图像记作校正图像,校正图像中的像素点记作待校正点,对应的坐标记作待校正点坐标,待校正点坐标映射至原始畸变图像中的坐标被记作校正坐标。
考虑到畸变校正处理时若直接使用校正坐标,将校正坐标存放到DDR所需要的内存大小、从DDR读回需要占用的带宽都会随着图像分辨率的增加变得很大。因此,本实施例依据若干个校正坐标的x轴坐标和y轴坐标分别拟合成两条二次曲线,记作预设二次拟合曲线,在DDR中只存储预设二次拟合曲线的系数(预设二次拟合曲线系数),在进行畸变校正时从DDR读取预设二次拟合曲线系数到FPGA本地后,再通过拟合逆运算即可解析得到校正坐标。
如图2所示,本领域技术人员能够理解的是,每个点的位置坐标8byte,包含横纵坐标各4byte,每个横纵坐标包含2byte整数部分和2byte小数部分;每条二次拟合曲线需要3个系数,每个系数4byte。本实施例可以设定使用每64个校正点坐标拟合成横纵坐标的2条预设二次拟合曲线。以64个校正点坐标为单位计算,直接使用坐标需要512byte,而使用二次拟合方案仅需要24byte,此例下,本实施例提出的读取预设二次拟合曲线系数方案较直接使用校正坐标的传统方案在DDR的内存和带宽占用上减少了约95%的资源。
需要说明的是,任一组预设二次拟合曲线系数对应于校正图像中的一行像素点坐标。
具体的,当校正图像的分辨率为1920*1080时,每行像素点由左至右按照每64个为一组,可划分成30段,每一段像素点可拟合得到一段二次拟合曲线,对应一段二次拟合曲线系数,且每一组像素点(待校正点)均被依次标记为0-63。
因此,每30段二次拟合曲线系数可组成一组预设二次拟合曲线系数,对应于校正图像中的一行像素点。因此,就可以共得到30*1080段、1080组预设二次拟合曲线系数。
通过回读获得取预设二次拟合曲线系数后,依次带入待校正点的标号,通过坐标计算的形式,即可获得原始畸变图像中对应的校正坐标,之后,可以采用分块的形式,根据预设FPGA本地行缓存容量,例如8行,将每一组预设二次拟合曲线系数对应的第一个校正坐标作为分块区域的起始点,移动8行后,对应行数的最后一个校正坐标作为当前分块区域的终止点,再将这个终止点相应的校正坐标作为下一个分块区域的起始点,重复上述过程,直至确定完所有组预设二次拟合曲线系数对应的分块区域。
之后,针对每一帧原始畸变图像进行校正时,图像的分块区域将保持不变,基于确定好的分块区域,逐行确定校正图像对应于原始畸变图像中的回读区域。首先,将校正坐标在原始畸变图像中的列坐标与分块区域比较,判断出其所在分块,获得需要回读图像的列起始位置和列数;然后,需要找出当前行在各个分块区域中的所有校正坐标在原始畸变图像中的最小行坐标,作为回读区域的行起始位置;最后,向下或向上确定预设FPGA本地行缓存容量大小的行数,即向下或向上移动8行,从而确定了原始畸变图像需要回读的区域,即回读区域。
在校正下一行时,重复上述过程,此时得到的回读区域与上一个校正行的回读区域比较,只发生了少数行或未发生变化,只需要将发生变化的部分图像行数进行更新,即可满足当前待校正行的校正处理需求。例如,当前回读区域与上一个校正行的回读区域比较仅发生了2行变化,此时仅需读取变化的2行即可。
因此,分块后每个校正行需要回读的图像最多为本地设置的行缓存容量,整帧校正完成需要回读的图像数据量不超过一帧图像大小,与传统DDR方案中至少需要回读4帧图像的数据量相比,对DDR带宽的占用减少了75%以上。
进而,根据上述确定出的回读区域,即可对原始畸变图像进行回读,再根据校正坐标周围像素点的像素值,进行像素值运算(如插值运算),即可计算出相应待校正的像素值,生成最终所要输出的校正图像,完成图像的畸变校正。
在一些实施例中,示出了上述实施例1中的一种确定分块区域的方法,该步骤2中具体包括:步骤201、根据任一组预设二次拟合曲线系数,构建对应的校正坐标计算方程;步骤202、根据校正坐标计算方程,通过坐标计算的方式,依次计算原始畸变图像中的各个校正坐标;步骤203、根据预设FPGA本地行缓存容量,按照校正坐标的顺序,依次确定各组预设二次拟合曲线系数对应的第一分块区域的第一起始点和最大分块位置;步骤204、选取各个最大分块位置中列坐标的最小值,并将相应的最大分块位置作为第一分块区域的第一终止点,并根据第一起始点和第一终止点,确定第一分块区域;步骤205、根据第一终止点以及校正坐标,确定第二分块区域的第二起始点,重复执行步骤203,依次确定原始畸变图像的各个分块区域;其中,第一起始点为预设二次拟合曲线系数对应的第一个校正坐标,第二起始点为校正坐标中第一终止点右侧的第一个校正坐标,或者,第二起始点为与校正坐标中与第一终止点列坐标相同的校正坐标。
具体的,回读获取到的预设二次拟合曲线系数,可以拟合出相应曲线及对应的校正坐标计算方程,再通过坐标计算的方式,即可计算出原始畸变图像中用于像素校正用的全部校正坐标。
首先,每组预设二次拟合曲线系数对应的第一个校正坐标作为第一起始点,根据预设FPGA本地行缓存容量(如8行),按照校正坐标的顺序,当选取的校正坐标与第一起始点的行坐标差值达到8时,该校正坐标即为对应于该第一起始点的最大分块位置。
然后,为了使有限的回读图像能够满足校正最大畸变情况所需,将原始畸变图像在水平方向上划分成若干个列数相同的区域(分块),将原始畸变图像中每行对应区域位置进行统一,减少区域分块位置的参数个数,选取每组预设二次拟合曲线系数对应的各个最大分块位置中列坐标的最小值,将对应的坐标点作为第一终止点。根据第一起始点及第一终止点即可确定出第一分块区域。
最后,确定好第一分块区域后,该区域中包含的最后一个校正坐标可能位于区域的边界上(校正坐标与最大分块位置中列坐标的最小值相同),也可能位于区域边界的右侧,因此,选取第一终止点右侧的第一个校正坐标,或者与第一终止点列坐标相同的校正坐标作为第二分块区域(下一个分块区域)的第二起始点,重复执行步骤203,确定各个第二起始点对应的最大分块位置,重复上述过程,依次确定原始畸变图像的各个分块区域。
之后,再逐行确定校正图像对应于原始畸变图像中的回读区域即可。
在一些实施例中,该步骤203中,具体包括:选取各组预设二次拟合曲线系数对应的第一个校正坐标,记作第一分块区域的第一起始点;按照校正坐标的顺序,依次计算第一起始点之后的各个校正坐标的行坐标与第一个校正坐标的行坐标的行差值;当行差值大于预设FPGA本地行缓存容量时,选取前一个校正坐标,记作第一分块区域的最大分块位置。
为了使有限的回读图像能够满足校正最大畸变情况所需,将畸变图像在水平上划分成若干个列数相同的区域,且为了减少分块位置的参数个数,引入确定最大分块位置的思想,以便对每行分块区域的位置进行统一,在一些实施例中,还示出了上述实施例1中的另一种确定分块区域的方法,该步骤2包括:步骤2.1、根据任一组预设二次拟合曲线系数,构建对应的校正坐标计算方程;步骤2.2、根据校正坐标计算方程以及预设FPGA本地行缓存容量,通过坐标计算的方式,依次确定各组校正坐标计算方程对应的第一分块区域的第一起始点和最大分块位置;步骤2.3、选取各最大分块位置中列坐标的最小值,并将相应的最大分块位置作为第一分块区域的第一终止点,并根据第一起始点和第一终止点,确定第一分块区域;步骤2.4、根据第一终止点以及对应的校正坐标计算方程,确定第二分块区域的第二起始点,重复执行步骤2.2,依次确定原始畸变图像的各个分块区域;其中,第一起始点由预设二次拟合曲线系数中的常数项系数确定。
具体的,如图3和图4所示,以桶形畸变为例,原始畸变图像的水平中线将畸变图像划分为上下两部分,以每一组预设二次拟合曲线系数对应的第一个校正坐标作为第一起始点(如点A),其中,第一起始点包括行坐标、列坐标。
对于上部分图像,根据预设FPGA本地行缓存容量(如8行),将第一起始点的行坐标向上移动8行,即坐标值-8,列坐标保持不变,可以确定上移后的第8行与该行二次拟合曲线系数对应的曲线的交点,该交点即为最大分块位置。对于下部分图像而言,则向下移动8行,其余过程相同。
需要说明的是,对于枕形畸变而言,则上部分图像向下移动,下半部分图像向上移动。
之后再确定下一组预设二次拟合曲线系数的第一起始点及最大分块位置,直至确定出所有组预设二次拟合曲线系数最大分块位置。
为了保证分块区域大小的一致性,减小图像回读时占用DDR的带宽,选取上述各最大分块位置中列坐标的最小值,作为第一终止点的列坐标,将移动8行后的行坐标作为第一终止点的行坐标,组合得到所有组预设二次拟合曲线系数对应的第一分块区域的第一终止点(如点B),进而得到第一分块区域。
再根据第一终止点的列坐标以及对应的校正坐标计算方程,计算第一分块区域与预设二次拟合曲线系数对应二次拟合曲线的交点(如点C),将该交点作为第二分块区域的第二起始点,重复执行上述过程,即可确定原始畸变图像的各个分块区域。
在一些实施例中,考虑到映射至原始畸变图像中的校正坐标并不连续,且可能为小数,因此,分块区域的左边界有可能与某个校正坐标的列坐标相同,此时校正坐标对应的像素点位于分块区域的左边界上;分块区域的左边界也有可能位于两个校正坐标对应的像素点之间。因此,为了保证下一个分块区域起始点的准确性以及后续进行像素校正运算能够获取准确的像素值,上述步骤2.4还包括:利用坐标计算的方式,根据校正坐标计算方程,判断第一终止点的列坐标是否对应于校正坐标的列坐标,若是,则表明该校正坐标对应的像素点位于分块区域的左边界上,因此将该像素点作为第二分块区域的第二起始点;若否,则表明分块区域的左边界位于两个校正坐标对应的像素点之间,此时,将第一分块区域(上一个分块区域)中包含的最后一个校正坐标对应的像素点作为第二分块区域的第二起始点,以保证下一个分块区域中,能够包含相应校正坐标校正时所需的全部像素点,保证后续进行像素校正运算能够获取准确的像素值。
在一些实施例中,预设二次拟合曲线系数包括x轴拟合系数、y轴拟合系数,x轴拟合系数由原始畸变图像中相应校正坐标的横轴坐标拟合确定,y轴拟合系数由原始畸变图像中相应校正坐标的纵轴坐标拟合确定,校正坐标计算方程的计算公式为:
式中,Fx(z)是第z个待校正点对应于原始畸变图像中校正坐标的行坐标,ax、bx、cx分别是x轴拟合系数中的二次项系数、一次项系数、常数项系数,Fy(z)是第z个待校正点对应于原始畸变图像中校正坐标的列坐标,ay、by、cy分别是y轴拟合系数中的二次项系数、一次项系数、常数项系数,z为待校正点的编号,z=0,1,2,...,n,n为设定的待校正点的个数。
在一些实施例中,步骤2.2还包括:对第一起始点向上取整;根据预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向上或向下移动M行;根据移动后的行坐标,利用对应的校正坐标计算方程,计算对应的列坐标;对计算出的列坐标向上取整,根据移动后的行坐标和取整后的列坐标,确定最大分块位置。
在一些实施例中,根据预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向上或向下移动M行,具体包括:当判定原始畸变图像的畸变类型为桶形畸变时,判断取整后的第一起始点的行坐标是否小于或等于原始畸变图像行数的1/2;若是,根据预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向上移动M行;若否,根据预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向下移动M行。当判定原始畸变图像的畸变类型为枕形畸变时,判断取整后的第一起始点的行坐标是否小于或等于原始畸变图像行数的1/2;若是,根据预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向下移动M行;若否,根据预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向上移动M行。
在一些实施例中,根据预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向上或向下移动,具体包括:根据校正坐标计算方程,获取第一起始点后预设数量个校正坐标,其中,预设数量可以进行人为设定;根据预设数量个校正坐标的行坐标变化趋势,确定行坐标移动方向,即当行坐标呈现减小的趋势时,表明相应的二次拟合曲线向上弯曲,此时行坐标移动方向应为向上移动,而当行坐标呈现增大的趋势时,表明相应的二次拟合曲线向下弯曲,此时行坐标移动方向应为向下移动;根据预设FPGA本地行缓存容量以及行坐标移动方向,移动取整后的第一起始点的行坐标。
在一些实施例中,确定最大分块位置的方式,还可以为:依次统计第一起始点之后相邻的校正坐标中行坐标的取值,当行差达到预设FPGA本地行缓存容量时,对应的位置处为最大分块位置。如假设本地行缓存容量为M行,畸变图像中各个点在曲线上的坐标可以计算得知,确定一个起始点,以该起始点作为曲线上第1个坐标点,并计算第1个坐标点与第2个坐标点之间的行差是否大于或等于M,若否继续计算第1个坐标点与第3个坐标点之间的行差,直至在曲线上的最后一个坐标点与第一个坐标点之间的行差大于或等于M,此时,把最后一个坐标点作为最终的最大分块位置。
在一些实施例中,上述步骤2.2还包括:统计第一分块区域中第一起始点至最大分块位置之间包含的校正坐标的个数;判断统计得出的个数是否小于或等于预设本地坐标缓存容量N,若是,执行步骤2.3;若否,根据预设本地坐标缓存容量N,以第一起始点开始,选取N个校正坐标中最后一个校正坐标更新最大分块位置,执行步骤2.3。
本实施例中,通过对畸变图像的回读以分块形式处理,每块回读图像数据量最多为本地所缓存行数,一般情况下只需要回读当前行与上一行在当前块内的行差的数据量,大大减少了实现畸变校正功能对硬件存储器带宽的占用,保证了存储器的使用效率。
在一些实施例中,步骤4中,读取回读图像中校正坐标周围像素点的像素值,具体包括:对当前待校正点对应于回读图像中的校正坐标进行向下取整;根据取整后的校正坐标,确定其左上角的像素点为第一个待读取像素点,并以第一个待读取像素点为起始点,按顺时针方向,选取第一个待读取像素点相邻的其余三个坐标点,作为第二至第四个待读取像素点;从回读图像中读取四个待读取像素点的像素值。
在一些实施例中,步骤5中,根据回读图像中校正坐标周围像素点的像素值,确定待校正点的像素值,具体包括:根据从回读图像中读取出的校正坐标对应的四个待读取像素点的像素值,采用插值的方式,确定待校正点的像素值,插值原理如图7所示。其中,待校正点的像素值的计算公式如下:
X=Xlu*(1-a)*(1-b)+Xru*a*(1-b)+Xld*(1-a)*b+Xrd*a*b
式中,X为待校正点的像素值,Xlu、Xru、Xld、Xrd分别为四个待读取像素点的像素值,a、b分别为校正坐标中列坐标的小数部分和行坐标的小数部分。
本实施例提出的这一种基于FPGA的相机图像畸变校正方法,无论图像畸变程度多大,都只需要缓存少数几行即可,使用的FPGA本地存储资源相对固定且有限。较未分块前畸变有多大就需要缓存多少行的缓存方案,在分辨率大、畸变程度大的情况下,可以极大的缓解FPGA存储资源压力。
实施例2
基于实施例1,本实施例以桶形畸变为例,具体展开说明一种基于FPGA的相机图像畸变校正方法,该校正方法包括以下步骤:
步骤100:对接收到的原始畸变图像进行帧缓存;该步骤1是为了接收原始畸变图像,再将原始畸变图像通过高速数据总线接口写入DDR中预留的帧缓存区域。
在步骤1的实现过程中,FPGA中包括2个模块,一个是image_cache模块,用来接收图像、缓存一次burst发送长度、完成axi发送数据控制;另一个是axi_datamover模块,用来处理与axi高速数据接口的数据交互工作。
步骤200:读取预设二次拟合曲线系数;该步骤2的主要作用是从DDR中的系数缓存区将校正坐标对应的预设二次拟合系数读取到FPGA本地。实现时FPGA中包括两个模块,一个是fit_coef_read模块,用来控制读取DDR中左右图拟合系数的命令交替发出;另一个是axi_datamover模块,用来处理与axi高速数据接口的数据交互工作。
本实施例中采用向后映射的实现方式,校正前后的像素点坐标对应关系,是依赖相机标定获取的相机内参与畸变参数,基于针孔相机数学模型以及相机畸变数学模型,通过计算得到,计算过程在此不作赘述。因此,在相机的上述参数确定后,校正图像中每一个像素点映射至原始畸变图中的坐标是固定的。
将校正图像中像素点坐标映射到原始畸变图像中的坐标记作校正坐标。但考虑到校正处理时若直接使用校正坐标,校正坐标存放到DDR需要的内存大小、从DDR读回需要占用的带宽都会随着分辨率的增加变得很大。因此,在本实施中,依据若干个待校正点的x轴坐标和y轴坐标分别拟合成两条二次曲线,在DDR中只存储二次拟合曲线系数,将二次拟合曲线系数从DDR读回到FPGA本地后,再通过拟合逆运算解析得到校正坐标。该校正坐标由二次拟合曲线的系数确定。
在二次拟合以及拟合逆运算的过程中,因为图像畸变使得校正图像中每行像素点映射至原始畸变图像后,各校正坐标的连线本身就接近于一条曲线,因此,二次拟合以及拟合逆运算过程产生的误差的数量级可以为10-4-10-5,能够保证在校正过程中校正点像素值(灰度值)的计算只有较小的精度损失,不影响计算出的像素值的整数位。
如图2所示,每个待校正点的位置坐标8byte,包含横纵坐标各4byte,每个横纵坐标包含2byte整数部分和2byte小数部分。每条二次拟合曲线需要3个系数,每个系数4byte,使用每64个待校正点拟合成横纵坐标的两条二次曲线。以64个待校正点坐标为单位计算,直接使用坐标需要512byte,而使用二次拟合方案仅需要24byte。
步骤300:计算待校正点在原始畸变图像中的坐标;具体的,将步骤2读取到的校正坐标拟合系数缓存到本地,按照协议解析横纵坐标对应的每组二次项系数、一次项系数、常数项系数等;通过离散的拟合逆运算,每组系数可以得到若干待校正点的坐标;其中,待校正点的坐标包含其在原始畸变图像中的整数坐标和小数坐标。
假设从DDR读回并解析出的每条曲线是由64个待校正点拟合得到的,那么每条二次拟合曲线同样可以反向计算出这64个待校正点的坐标,对于任意组64个待校正点而言,对应的计算公式如下:
Fx(z)=ax*z2+bx*z+cx
Fy(z)=ay*z2+by*z+cy
上述式中,Fx(z)是第z个待校正点对应于原始畸变图像中校正坐标的行坐标,ax、bx、cx分别是x轴拟合系数中的二次项系数、一次项系数、常数项系数,Fy(z)是第z个待校正点对应于原始畸变图像中校正坐标的列坐标,ay、by、cy分别是y轴拟合系数中的二次项系数、一次项系数、常数项系数,z为待校正点的编号,z=0,1,2,...,n,n为设定的待校正点的个数。因此,反向计算出的待校正点在原始畸变图像中的坐标为(Fx(z),Fy(z))。
步骤400:根据预设二次拟合曲线系数以及预设FPGA本地行缓存容量,通过坐标计算的方式,确定回读区域。步骤400是为了确定从DDR帧存中回读可以完成当前行校正所需要的原始畸变图像的位置信息。
本实施例以桶形畸变为例,先将整幅原始畸变图像划分成了若干个块,如附图3、4所示,对于一张待进行桶形畸变校正的原始畸变图像而言,划分块的过程包括以下步骤:
步骤410:以每一行二次拟合曲线系数对应的第一个待校正点在原始畸变图像中的坐标为起始点,根据预设的FPGA本地行缓存容量(如8行)以及FPGA本地坐标缓存容量(如100个坐标点),依次确定各行二次拟合曲线系数对应的第一个待校正点的最大分块位置,为列坐标。
在本实施例中,原始畸变图像的水平中线将原始畸变图像划分为上下两部分;
对于上部分图像,确定好第一个待校正点在原始畸变图像中的坐标后,将其作为第一起始点,根据预设的FPGA本地行缓存容量,向上移动8行(对于枕形畸变则向下移动8行),即行坐标值-8、列坐标值不变,此时结合对应的二次拟合曲线系数,可以确定上移后的第8行与该行二次拟合曲线系数对应的曲线的交点。
需要说明的是,由于待校正点在原始畸变图像中的坐标可能为小数,因此在确定起始点之前,对该第一起始点进行向上取整,将取整之后的第一起始点进行移动,这样做能够保证在回读时能够得到该点下方的数据,作为插值的依据。
因为在步骤300已经计算出待校正点在原始畸变图像中的坐标,所以可以统计该交点与第一起始点之间待校正点的数量,该数量若小于或等于设定的FPGA本地坐标缓存容量,则确定该交点对应的列坐标为该组二次拟合曲线系数的当前起始点对应的最大分块位置。
如果该数量大于设定的FPGA本地坐标缓存容量,则从该起始点开始,选取FPGA本地坐标缓存容量个待校正点,并将选取出的最后一个待校正点对应的校正坐标的列坐标作为该组二次拟合曲线系数的当前起始点对应的最大分块位置。
对于下部分图像,则向下移动8行,重复上述过程。
之后再对下一行二次拟合曲线系数重复上述过程,直至确定出所有行的二次拟合曲线系数对应的最大分块位置。
步骤420:选取各个最大分块位置中的最小值作为各行二次拟合曲线系数的第一个纵向分块界线。
步骤430:统计当前纵向分块界线对应的各行二次拟合曲线系数的最后一个待校正点的校正坐标,判断该坐标是否在该纵向分块界线上;若在,以该坐标为起始位置,重新执行步骤410,依次确定各行的下一个最大分块位置;若不在,以当前行的下一个待校正点作为起始位置,重新执行步骤410,依次确定各行的下一个最大分块位置。
循环执行步骤410-430,直到对该桶形原始畸变图像完成分块。分块完成后,将得到块的最左侧列坐标(col1、col2、...、coln)及列数(col_num1、col_num2、...、col_numn-1)写到FPGA本地缓存,如图5所示。
上述过程在实现时FPGA中包括三个模块,一个是column_block模块,用来存储上述block划分算法得到的结果;一个是column_point模块,用来对步骤3得到的坐标进行预处理和延迟;还有一个是readback_positin模块,该模块首先需要将待校正点在原始畸变图像中的列坐标与分块位置比较,判断出其所在块,获得需要回读的列起始位置和列数;然后需要找出当前行在各个block中的所有待校正点在原始畸变图像中的最小行坐标,作为回读的行起始位置,从而确定需要回读原始畸变图像的区域。
如图5所示,对图5中曲线①进行校正,在第一个block(块)内需要回读的部分原始畸变图像为实线框区域。其中,block的最左侧列坐标col1、col2等及列数col_num1、col_num2等已经通过上述分块过程得到并缓存到FPGA本地RAM中。
遍历曲线①在第一个block中的所有点,可以得到此部分曲线在原始畸变图像中的最小行位置,即row1,以此作为回读的行起始位置;再结合列数col_num1即可确定出此时需要回读的列数。
读取的行数由FPGA本地行缓存容量(如8行)决定,即由row1向下移动8行。
综上,就可以得到当前校正行在当前block需要回读的原始畸变图像区域。以此类推,第二个block需要回读的部分原始畸变图像为虚线框区域。
步骤500:从DDR回读原始畸变图像并缓存到本地。其中,将回读的原始畸变图像记作回读图像。
FPGA实现该过程时包括三个模块,一个是image_readback模块,该模块将步骤400得到的位置做了进一步的判断,若当前block需要更新原始畸变图像,则发出axi命令从DDR中取回相应部分的原始畸变图像,反之则不需要发起回读操作;一个是axi_datamover模块,用来处理与axi高速数据接口的数据交互工作;另一个是line_buffer模块,用来存储从DDR取回的原始畸变图像。
为了在执行回读原始畸变图像时尽量少的占用DDR带宽提高利用率,先将整幅原始畸变图像划分成了若干个block,如图6所示。假设待校正行在畸变图中的分布曲线如图6中曲线①所示,本实施中划分的block会将曲线①拆分成了若干个部分,对应到每个部分的曲线只需要从DDR中取回对应的若干行原始畸变图像就能够完成当前行的校正处理,输出校正图像的第一行校正后的像素点。
若图6中曲线②是曲线①的下一个待校正行分布曲线,同样也会被划分的block拆分成几个部分,根据曲线对应的row1,确定最小行起始位置,同样向下移动8行,确定当前block需要回读的原始畸变图像区域。
通过对比曲线①与曲线②需要回读的原始畸变图像区域,需要从DDR取回对应的若干行原始畸变图像只发生了少数行或未发生变化,只需要将发生变化的部分图像更新,即可满足曲线②对应待校正行的校正处理需求。
上述过程可通过对比row的取值确定。
以此类推,分块后每个校正行需要回读的图像最多为本地设置的行缓存容量,整帧校正完成需要回读的图像数据量不超过一帧图像大小,与传统DDR方案中至少需要回读4帧图像的数据量相比,本申请对DDR带宽的占用减少了75%以上。解决了传统方案中直接操作DDR时每处理一个点就需要访问DDR一次或多次,回读的数据量比较大,频繁的总线操作就会较多占用DDR带宽,可能会导致操作系统处理速度的下降的问题。
在一些实施例中,在划分block时还需要注意:
1)每个校正行在同一block中所有待校正点对应到原始畸变图像中的最大行差不超过FPGA本地行缓存容量,控制原始畸变图像缓存占用的存储资源;
2)若上一个block中有待校正点处于划分边界,下一个block图像回读时需要读回上一个block边界点校正所需要的右侧图像,保证校正的正确性;
3)每个block所包含的最大待校正点数不超过FPGA本地坐标缓存容量,控制坐标缓存占用的存储资源。
步骤600:读取回读图像中校正坐标周围像素点的像素值;
在本实施例中,步骤600需要根据步骤300得到的待校正点在原始畸变图像中位置,从步骤500的line_buffer中读出坐标周围点的像素值。
在确定周围像素点时,对当前待校正点的校正坐标进行向下取整,根据取整后的校正坐标,确定其左上角的像素点为第一个待读取像素点,并以第一个待读取像素点为起始点,按顺时针方向,选取第一个待读取像素点相邻的其余三个坐标点,作为第二至第四个待读取像素点;再从步骤500的回读图像中中读出四个待读取像素点的像素值。
步骤700:根据回读图像中校正坐标周围像素点的像素值,确定待校正点的像素值,并根据待校正点的像素值,生成校正图像。具体包括:根据从回读图像中读取出的校正坐标对应的四个待读取像素点的像素值,采用插值的方式,确定待校正点的像素值,插值原理如图7所示。其中,待校正点的像素值的计算公式如下:
X=Xlu*(1-a)*(1-b)+Xru*a*(1-b)+Xld*(1-a)*b+Xrd*a*b
式中,X为待校正点的像素值,Xlu、Xru、Xld、Xrd分别为四个待读取像素点的像素值,a、b分别为校正坐标中列坐标的小数部分和行坐标的小数部分。
本实施例,为了在FPGA本地缓存回读原始畸变图像时尽量少的占用FPGA本地的存储资源,提出的分块缓存方案,先将整幅原始畸变图像划分成了若干个块,从DDR取回的原始畸变图像,对应到相应块,并按照行的相对位置进行存储。无论图像畸变程度多大,都只需要缓存少数几行即可,大大减少了实现畸变校正功能对DDR带宽的占用,保证了DDR的使用效率,较未分块前畸变有多大就需要缓存多少行的缓存方案,在分辨率大、畸变程度大的情况下,可以极大的缓解FPGA存储资源压力。
以上所述仅为本申请的优选实施例而已,其并非因此限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,通过常规的替代或者能够实现相同的功能在不脱离本申请的原理和精神的情况下对这些实施例进行变化、修改、替换、整合和参数变更均落入本申请的保护范围内。

Claims (10)

1.一种基于FPGA的相机图像畸变校正方法,其特征在于,所述校正方法包括:
步骤1、对接收到的原始畸变图像进行帧缓存,并读取预设二次拟合曲线系数;
步骤2、根据所述预设二次拟合曲线系数以及预设FPGA本地行缓存容量,通过坐标计算的方式,确定分块区域;
步骤3、根据所述分块区域,逐行确定所述原始畸变图像中的回读区域;
步骤4、根据所述回读区域,对所述原始畸变图像进行回读,记作回读图像,并读取所述回读图像中校正坐标周围像素点的像素值,其中,所述校正坐标由所述预设二次拟合曲线系数确定;
步骤5、根据所述回读图像中校正坐标周围像素点的像素值,确定待校正点的像素值,并根据所述待校正点的像素值,生成校正图像。
2.根据权利要求1所述的基于FPGA的相机图像畸变校正方法,其特征在于,任一组所述预设二次拟合曲线系数对应于所述校正图像中的一行像素点,所述步骤2,具体包括:
步骤201、根据任一组所述预设二次拟合曲线系数,构建对应的校正坐标计算方程;
步骤202、根据所述校正坐标计算方程,通过坐标计算的方式,依次计算所述原始畸变图像中的各个校正坐标;
步骤203、根据所述预设FPGA本地行缓存容量,按照所述校正坐标的顺序,依次确定各组所述预设二次拟合曲线系数对应的第一分块区域的第一起始点和最大分块位置;
步骤204、选取各个所述最大分块位置中列坐标的最小值,并将相应的最大分块位置作为所述第一分块区域的第一终止点,并根据所述第一起始点和所述第一终止点,确定第一分块区域;
步骤205、根据所述第一终止点以及所述校正坐标,确定第二分块区域的第二起始点,重复执行所述步骤203,依次确定所述原始畸变图像的各个分块区域;
其中,所述第一起始点为所述预设二次拟合曲线系数对应的第一个校正坐标,
所述第二起始点为所述校正坐标中所述第一终止点右侧的第一个校正坐标,或者,所述第二起始点为与所述校正坐标中与所述第一终止点列坐标相同的校正坐标。
3.根据权利要求2所述的基于FPGA的相机图像畸变校正方法,其特征在于,所述步骤203中,具体包括:
选取各组所述预设二次拟合曲线系数对应的第一个校正坐标,记作所述第一分块区域的第一起始点;
按照所述校正坐标的顺序,依次计算所述第一起始点之后的各个校正坐标的行坐标与所述第一个校正坐标的行坐标的行差值;
当所述行差值大于所述预设FPGA本地行缓存容量时,选取前一个校正坐标,记作所述第一分块区域的最大分块位置。
4.根据权利要求1所述的基于FPGA的相机图像畸变校正方法,其特征在于,任一组所述预设二次拟合曲线系数对应于所述校正图像中的一行像素点,所述步骤2,具体包括:
步骤2.1、根据任一组所述预设二次拟合曲线系数,构建对应的校正坐标计算方程;
步骤2.2、根据所述校正坐标计算方程以及所述预设FPGA本地行缓存容量,通过坐标计算的方式,依次确定各组所述预设二次拟合曲线系数对应的第一分块区域的第一起始点和最大分块位置;
步骤2.3、选取各所述最大分块位置中列坐标的最小值,并将相应的最大分块位置作为所述第一分块区域的第一终止点,并根据所述第一起始点和所述第一终止点,确定第一分块区域;
步骤2.4、根据所述第一终止点以及对应的校正坐标计算方程,确定第二分块区域的第二起始点,重复执行所述步骤2.2,依次确定所述原始畸变图像的各个分块区域;
其中,所述第一起始点由所述预设二次拟合曲线系数中的常数项系数确定。
5.根据权利要求4所述的基于FPGA的相机图像畸变校正方法,其特征在于,所述步骤2.2还包括:
对所述第一起始点向上取整;
根据所述预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向上或向下移动;
根据移动后的行坐标,利用对应的所述校正坐标计算方程,计算对应的列坐标;
对计算出的所述列坐标向上取整,根据移动后的行坐标和取整后的列坐标,确定所述最大分块位置。
6.根据权利要求5所述的基于FPGA的相机图像畸变校正方法,其特征在于,所述根据所述预设FPGA本地行缓存容量,将取整后的第一起始点的行坐标向上或向下移动,具体包括:
根据所述校正坐标计算方程,获取所述第一起始点后预设数量个校正坐标;
根据所述预设数量个校正坐标的行坐标变化趋势,确定行坐标移动方向;
根据所述预设FPGA本地行缓存容量以及所述行坐标移动方向,移动取整后的第一起始点的行坐标。
7.根据权利要求4所述的基于FPGA的相机图像畸变校正方法,其特征在于,所述步骤2.4,所述根据所述第一终止点以及对应的校正坐标计算方程,确定第二分块区域的第二起始点,具体包括:
利用坐标计算的方式,根据所述校正坐标计算方程,判断所述第一终止点的列坐标是否对应于所述校正坐标的列坐标,若是,则将所述校正坐标对应的像素点作为所述第二分块区域的第二起始点,
若否,则将所述第一分块区域中包含的最后一个校正坐标对应的像素点作为所述第二分块区域的第二起始点。
8.根据权利要求4所述的基于FPGA的相机图像畸变校正方法,其特征在于,所述步骤2.2还包括:
统计所述第一分块区域中所述第一起始点至所述最大分块位置之间包含的校正坐标的个数;
判断所述个数是否小于或等于预设本地坐标缓存容量,若是,执行步骤2.3,
若否,根据所述预设本地坐标缓存容量,选取最后一个校正坐标更新最大分块位置,执行步骤2.3。
9.根据权利要求1至8中任一项所述的基于FPGA的相机图像畸变校正方法,其特征在于,所述预设二次拟合曲线系数包括x轴拟合系数、y轴拟合系数,
所述x轴拟合系数由所述原始畸变图像中相应校正坐标的横轴坐标拟合确定,
所述y轴拟合系数由所述原始畸变图像中相应校正坐标的纵轴坐标拟合确定,
所述校正坐标计算方程的计算公式为:
式中,Fx(z)是第z个待校正点对应于原始畸变图像中校正坐标的行坐标计算值,ax、bx、cx分别是所述x轴拟合系数中的二次项系数、一次项系数、常数项系数,
Fy(z)是第z个待校正点对应于原始畸变图像中校正坐标的列坐标,ay、by、cy分别是所述y轴拟合系数中的二次项系数、一次项系数、常数项系数,
z为所述待校正点的编号,z=0,1,2,...,n,n为设定的所述待校正点的个数。
10.根据权利要求1至8中任一项所述的基于FPGA的相机图像畸变校正方法,其特征在于,所述步骤4中,读取所述回读图像中校正坐标周围像素点的像素值,具体包括:
对当前待校正点对应于所述回读图像中的校正坐标进行向下取整;
根据取整后的校正坐标,确定其左上角的像素点为第一个待读取像素点,并以所述第一个待读取像素点为起始点,按顺时针方向,选取所述第一个待读取像素点相邻的其余三个坐标点,作为第二至第四个待读取像素点;
从所述回读图像中读取四个所述待读取像素点的像素值。
CN202311051835.5A 2023-08-21 2023-08-21 一种基于fpga的相机图像畸变校正方法 Pending CN117078548A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311051835.5A CN117078548A (zh) 2023-08-21 2023-08-21 一种基于fpga的相机图像畸变校正方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311051835.5A CN117078548A (zh) 2023-08-21 2023-08-21 一种基于fpga的相机图像畸变校正方法

Publications (1)

Publication Number Publication Date
CN117078548A true CN117078548A (zh) 2023-11-17

Family

ID=88719073

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311051835.5A Pending CN117078548A (zh) 2023-08-21 2023-08-21 一种基于fpga的相机图像畸变校正方法

Country Status (1)

Country Link
CN (1) CN117078548A (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120020821A (ko) * 2010-08-31 2012-03-08 이성원 영상 왜곡 보정 장치 및 방법
CN110958362A (zh) * 2019-11-27 2020-04-03 湖南海森格诺信息技术有限公司 基于分块查表的图像校正系统及其方法
CN116433535A (zh) * 2023-06-12 2023-07-14 合肥埃科光电科技股份有限公司 一种二次曲线拟合的点坐标去畸变方法、系统及存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120020821A (ko) * 2010-08-31 2012-03-08 이성원 영상 왜곡 보정 장치 및 방법
CN110958362A (zh) * 2019-11-27 2020-04-03 湖南海森格诺信息技术有限公司 基于分块查表的图像校正系统及其方法
CN116433535A (zh) * 2023-06-12 2023-07-14 合肥埃科光电科技股份有限公司 一种二次曲线拟合的点坐标去畸变方法、系统及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
汪乐意: "基于FPGA的双目立体视觉图像采集及预处理系统的设计", 《中国优秀硕士学位论文全文数据库 信息科技辑》, 15 January 2020 (2020-01-15), pages 3 *

Similar Documents

Publication Publication Date Title
US10224955B2 (en) Data compression and decompression method of demura table, and mura compensation method
KR101785027B1 (ko) 화면 왜곡 보정이 가능한 디스플레이 장치 및 이를 이용한 화면 왜곡 보정 방법
US20150262344A1 (en) Method And System For Correcting A Distorted Input Image
JP4781229B2 (ja) 歪曲収差補正装置、撮像装置、及び歪曲収差補正装置の制御方法
CN110958362A (zh) 基于分块查表的图像校正系统及其方法
US11593913B2 (en) Method and system for correcting a distorted input image
EP2997539B1 (en) Method and device for processing input image data
JP2008512767A (ja) 一般的な2次元空間変換の表現システム及び方法
CN112801904B (zh) 一种基于卷积神经网络的混合退化图像增强方法
JP5602532B2 (ja) 画像処理装置および画像処理方法
CN108280801A (zh) 基于双线性插值的重映射方法、装置和可编程逻辑器件
CN117078548A (zh) 一种基于fpga的相机图像畸变校正方法
CN107995488A (zh) 一种基于直线扩展收缩模式的图像缩放方法
CN109064435B (zh) 一种基于多光谱影像的Gram-Schmdit融合快速处理方法
CN105427235A (zh) 一种图像浏览方法及系统
CN115601223A (zh) 一种图像预处理装置、方法和芯片
CN110738615B (zh) 鱼眼图像校正方法、装置、系统及可存储介质
US10866907B2 (en) Eviction prioritization for image processing
US20230022878A1 (en) Cache-based warp engine
CN114449170B (zh) 一种基于可编程芯片的实时图像处理系统
CN115967785A (zh) 基于fpga仿射逆变换的数据加速处理系统
JP4465844B2 (ja) 画像処理装置および方法、並びに記録媒体
JP4465570B2 (ja) 画像処理装置および方法、並びに記録媒体
CN115880141A (zh) 基于fpga仿射逆变换的数据处理系统
CN117057983A (zh) 一种灰度图像快速三次样条插值方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination