本发明专利技术公开了一种图像扭曲运算的顺序仿存方法、装置、介质及电子设备。本发明专利技术在获得扭曲变换之后,以左上角像素坐标为ID创建链表,链表的节点保存当前位置以及偏移量,并且各链表ID按照地址顺序排列,使用排序后的链表去按序读取输入图像数据,而且由于一个链表可能有多个节点,该链表ID对应的四个相邻像素可被多个节点复用,因此链表ID数是小于图像像素数的,于是读取输入图像的数据量小于读取整幅图像的数据量,因此,本发明专利技术的读取带宽和数据搬运量小于等于传统方法的读取带宽和数据搬运量。量。
【技术实现步骤摘要】
图像扭曲运算的顺序仿存方法、装置、介质及电子设备
[0001]本专利技术属于图像处理
,具体涉及一种图像扭曲运算的顺序仿存方法、装置、介质及电子设备。
技术介绍
[0002]图像扭曲(Image Warping),又称图像扭转、图像变形,是计算机视觉和图像处理中的一种重要技术,其主要目的是通过一定的算法改变图像的几何形状。图像扭曲具有强大的视觉效果和实用价值,它可以帮助我们更好地理解和分析图像,增强图像的视觉效果,甚至创造出全新的视觉效果。例如,通过图像扭曲,我们可以模拟镜头畸变效果,创建全景图像,进行图像矫正,以及实现图像的无缝拼接等。另外,图像扭曲也是许多高级图像处理技术(如图像融合、立体视觉等)的基础。
[0003]所以图像扭曲在许多领域都有广泛的应用,包括但不限于计算机图形学,虚拟现实,医学图像处理,图像配准,以及视频稳定等。例如,在虚拟现实中,图像扭曲被用来调整图像以适应头显的曲面镜头,以提高用户的沉浸感。在医学图像处理中,图像扭曲则可以帮助匹配和比较不同时间点或不同视角的解剖图像。在视频处理中,图像扭曲能够用来校正由于摄像机移动或镜头畸变造成的图像扭曲。
[0004]而图像扭曲操作的具体方法往往基于一组源点和目标点之间的映射关系,通过这种映射关系,源图像中的每个像素点可以被移动到目标图像的一个新位置。这个过程通常涉及到像素的重新采样和插值,以创建一个新的图像输出。
[0005]通常图像扭曲运算可表示为,其中为单通道或多通道输入图像,为扭曲运算后的输出图像,和表示输出图像的坐标到输入图像坐标的反向映射,即输出图像的坐标的像素值,映射为输入图像坐标为的像素值。如果为小数,则一般用临近4像素的插值,作为输出图像的坐标的像素值。
[0006]对于图像扭曲运算,目前所使用的方法原理为:
[0007]反向映射是一个长宽与输入图像相同,通道数为2的张量,记为。两个通道分别保存和的数值。对于给定坐标,查找,取出两个通道的数值和,其中,。在输入图像中取出坐标临近的4个像素,其中为向量,包含了所有通道的值。每个通道做双线性插值,得到每个通道的值。所有通道的值组成输出图像在坐标的像素值,如图1所示。
[0008]如果想得到整个输出图像,则遍历图像所有的坐标,用上述方法求得每个坐标的像素值,即得到整个输出图像。而输入图像由于数据量较大,一般存储于DRAM存储器中,插值运算需要取得一个像素所有通道的数值,因此输入图像一般以通道优先,其次是行或列的数据格式存储。
[0009]针对上述方法,存在以下两个问题:
[0010]一,在读取输入图像时,每个需要读取指向的4个相邻像素的数据,从整图数据量来看,输入图像被读取了四遍,导致严重的带宽浪费。
[0011]输入图像一般存储于DRAM存储器,而不是存储于片上SRAM。在遍历的过程中,查找得到的并不是连续的,因此在读取输入图像的数据时会导致随机寻址。由于相邻4点占了两行两列,如果DRAM中优先存储行,则列不连续,如果优先存储列,则行不连续。因此,无论先存储行或列,两次随机读取总是不可避免。DRAM在连续地址读取时速度很快,但随机寻址时速度严重降低,因此该上述方法导致的随机寻址会使得对全图像的扭曲运算速度严重降低。
技术实现思路
[0012]针对上述现有技术中存在的不足,本专利技术提供一种图像扭曲运算的顺序仿存方法、装置、介质及电子设备。本专利技术在遍历扭曲图像的所有坐标时,构造多个链表,用链表去读取输入图像数据,可以避免随机仿存的问题。
[0013]本专利技术所采用的技术方案为:
[0014]一种图像扭曲运算的顺序仿存方法,获得要输出的扭曲图像的每个坐标位置在输入图像中的反向映射坐标;
[0015]根据反向映射坐标获得当前坐标位置对应的在输入图像中向左上角取整后的像素的坐标;
[0016]以左上角像素的坐标为链表ID创建一个链表,链表的节点保存当前坐标位置和偏移量;所述的偏移量为反向映射坐标与其向左上角取整后像素坐标的偏移量;
[0017]遍历扭曲图像的每个坐标并获得每个坐标位置所对应的输入图像中的反向映射坐标的左上角像素的坐标;
[0018]判断左上角像素的坐标是否已有对应的链表ID,若左上角像素的坐标已经存在对应的链表ID,则将当前坐标位置和偏移量作为新的节点添加到对应的链表中;否则,以该左上角像素的坐标作为新的链表ID创建一个新的链表;
[0019]按序遍历各链表ID,对于每个链表,根据链表ID读取输入图像中该链表ID对应的四个相邻像素并缓存在SRAM中,所述的四个相邻像素分别为链表ID指向的像素以及其右方,下方和右下方的像素;虽然一个链表ID对应四个相邻像素,在遍历链表ID时,取得的像素,同一行或列的像素缓存在SRAM中,供下一行或列在需要时读取。因此从整体来看,整幅图像只需要读一次,不需要读4次;
[0020]遍历该链表中的所有节点,对于对每个节点,取出当前节点的坐标位置和偏移值;并根据所获得的四个相邻像素和当前节点的偏移值进行双线性插值,得到当前节点的坐标
位置的像素值;将该像素值写入扭曲图像的坐标位置。
[0021]作为本专利技术的一种优选方案,在创建链表时,新链表ID对应的坐标与已有链表ID对应的坐标以输入图像存储空间中地址连续的顺序排列。链表ID可以用插入排序。
[0022]所述输入图像和输出图像都存储在DRAM中。
[0023]所述输入图像为单通道或多通道的图像
[0024]本专利技术还提供了一种图像扭曲运算的顺序仿存装置,包括第一获取单元、第二获取单元、链表单元、处理模块、生成模块;
[0025]所述第一获取单元,用于获取要输出图像坐标的反向映射坐标;
[0026]所述第二获取单元,用于根据第一获取单元获得在输入图像中向左上角取整后的像素的坐标、以及反向映射坐标与向左上角取整后的像素坐标的偏移量;
[0027]所述链表单元,用于将左上角像素坐标作为链表ID建立链表并在链表节点存储当前坐标和偏移量;若左上角像素坐标已存在对应的链表ID,则将当前位置和偏移量作为新节点添加到对应链表中;否则,以该左上角像素的坐标作为链表ID创建新的链表;新链表ID对应的坐标与已有链表ID对应的坐标以输入图像存储空间中地址连续的顺序排列;
[0028]所述处理模块,用于按序遍历链表ID,并对每个链表,根据链表ID读取输入图像中该链表ID对应的四个相邻像素、读取该链表各节点;根据当前节点的偏移量和四个相邻像素进行双线性插值得到输出图像在当前位置的像素值;
[0029]所述生成模块,根据各输出图像的像素值得到扭曲后输出图像。
[0030]本专利技术还提供了一种计算机可读介质,所述可读介质存储有计算机程序,计算机程序执行上述方法。
[0031]本专利技术还提供了一种电子设备,所述电子设备包括处理器和存储器,所述存储器用于存储处理器可执行指令,所述可执行指令被处理器执行实现上述方法。
[0032]本专利技术在获本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种图像扭曲运算的顺序仿存方法,其特征在于:获得要输出的扭曲图像的每个坐标位置在输入图像中的反向映射坐标;根据反向映射坐标获得当前坐标位置对应的输入图像中向左上角取整后的像素的坐标;以左上角像素的坐标为链表ID创建一个链表,链表的节点保存当前坐标位置和偏移量;所述的偏移量为反向映射坐标与其向左上角取整后像素坐标的偏移量;遍历扭曲图像的每个坐标并获得每个坐标位置所对应的输入图像中的反向映射坐标的左上角像素的坐标;判断左上角像素的坐标是否已有对应的链表ID,若左上角像素坐标已经存在对应的链表ID,则将当前坐标位置和偏移量作为新的节点添加到对应的链表中;否则,以该左上角像素的坐标作为链表ID创建一个新的链表;按序遍历各链表ID,对于每个链表,根据链表ID读取输入图像中该链表ID对应的四个相邻像素并缓存在SRAM中,所述的四个相邻像素分别为链表ID指向的像素以及其右方,下方和右下方的像素;遍历该链表中的所有节点,对于每个节点,取出当前节点的坐标位置和偏移值;并根据所获得的四个相邻像素和当前节点的偏移值进行双线性插值,得到当前节点的坐标位置的像素值;将该像素值写入扭曲图像的坐标位置。2.根据权利要求1所述的图像扭曲运算的顺序仿存方法,其特征在于:在创建链表时,新链表ID对应的坐标与已有链表ID对应的坐标以输入图像存储空间中地址连续的顺序排列。3.根据权利要求1或2所述的图像扭曲运算的顺序仿存方法,其特征在于:所述输入图像和输出图像都存储在DRAM中。4.根据权利要求3所述的图像扭曲运算的顺序仿存方法,其特征在于:所述输入图像为单通道或多通道的图像...
【专利技术属性】
技术研发人员:张浩,张磊,
申请(专利权)人:瀚博半导体上海有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。