LDC 用户指南


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 07/13/2022
    1.1
  • 新增对于Rotate参数的说明
  • 06/19/2023

    1. 概述


    1.1. 基本概念


    1.1.1. 视场角

    用于描述画面的视野范围,分别称为水平视场角α和垂直视场角β。对于带有畸变的镜头,视场角由于镜头折射的光学关系,会具有更大的视场角。


    图 1-1 无畸变视场角示意图

    图 1-2 有畸变视场角示意图

    视场角的移动表现为画面内容的变化,视场角的移动不会改变视场角的大小,是绕光心旋转的过程。


    图 1-3 视场角水平向右移动示意图

    图 1-4 市场角垂直向上移动示意图

    1.1.2. 桶形畸变

    越靠近边角图像越向外向后延伸,失真越厉害,视觉上造成中间拱起的桶形效果。


    无畸变图像

    桶形畸变

    1.1.3. 枕形畸变

    越靠近边角图像越向外向前延伸,失真越厉害,视觉上造成中间凹陷的枕形效果。


    无畸变图像

    枕形畸变

    1.1.4. 镜头

    镜头作为摄像头的一个重要光学器件,其透光率,焦距、视场角、畸变等都会直接影响图像的整体效果,表 1-1针对LDC功能描述其一些特性和推荐的矫正模式。

    表 1-1 镜头和矫正模式的推荐
    镜头类型 样例 说明
    无畸变镜头 畸变可以忽略,无需进行畸变矫正。
    广角镜头 带有一定程度的畸变,具有更广的视场角,由于视场角不够大使用360/180全景矫正无法获得很好的视野效果。推荐使用Normal矫正消除畸变。
    鱼眼镜头 视场角极大,可以囊括整个视野平面,但畸变程度较大。推荐使用180度全景矫正和360度全景矫正对画面进行处理以获得更多的视野,或者使用多region配合Normal矫正的方式来处理。

    1.1.5. 图像无效区域

    无效区域指在LDC处理生成输出图像时,超出原图像素范围内的区域,如通过模拟移动视场角将视野范围移出了原图的视场范围外。无效区域会被填充为黑色。


    无效区域示意图

    1.1.6. 绘制区域

    输出图像我们可以将其视为一个输出的屏幕(screen),可以在上面根据实际的需求在指定区域(region)绘制我们经过LDC模块处理之后的图像(view)。绘制的区域之间相交、相切、相离均可。区域(region)的宽高对齐限制保持和屏幕(screen)一致,例如screen宽对齐要求16pixel,则region的宽也要求16pixel对齐。

    表 1-2 绘制区域相互关系和效果
    绘制区域之间的关系 效果
    相交 序号大的区域(后绘制)将会覆盖重叠区域的图像
    相离 空洞区域将会被绘制为背景色
    相切 各个区域图像各自显示。无空洞区域;无重叠区域。

    如图 1-6 为用于展示绘制区域的视图关系。黑色部分为空洞区域,可自由配置背景色进行填充。


    图 1-6 绘制区域视图关系

    2. 调试指南


    2.1. 基础参数

    对于 LDC 功能需要进行一些基础参数的配置以用于进行功能的正常输出,如表 2-1 所示。

    表 2-1 LDC 基础参数配置
    RegionAttr参数 说明 参数范围
    RegionMode 当前区域的所使用的LDC功能
    360 度全景矫正 畸变矫正功能
    参考 2.2 章节进行详细参数的配置
    1
    180度全景矫正 2
    Normal 矫正 3
    映射表模式(Map2bin) 参考 2.3 章节进行详细参数的配置 4
    旁路模式(No Transformation) 参考 2.5 章节进行详细参数的配置 5
    OutRect 在输出图像中选定一块区域用于绘制当前区域的输出图像。
  • 该参数并非配置最终的输出图像大小,而是当前区域的输出大小。如果只想要一个输出区域且铺满屏幕则可配置宽高为和最终输出图像大小相等。
  • 配置宽高后LDC会缩放当前region的输出图像到该大小。
  • X 绘制区域左上角的横坐标 [0, out_w]
    Y 绘制区域左上角的纵坐标 [0, out_h]
    Width 绘制区域宽度 [0, out_w - X]
    Height 绘制区域高度 [0, out_h - Y]
    RegionNum 配置绘制区域的数量
    配置该数量后需要对数量内的每个区域的功能和详细参数进行配置,超出该数量的区域的参数无需进行配置。
    (0, 9]
    BgColor 背景色(底色)的配置。颜色格式:RGB888
  • 当使能该参数的配置,会将输出画面的背景色配置为指定的颜色,如绿色rgb(0,255,0) = 0x0000FF00

  • 当失能该参数的配置,画面的背景色将为黑色rgb(0,0,0)= 0x00000000
  • [0x0, 0xFFFFFF]

    2.2. 镜头畸变矫正


    2.2.1. 模式说明

    镜头畸变矫正模式(Lens Distortion Correction),MI LDC模块通过镜头标定信息 (CalibInfo)配合用户指定的矫正方式进行矫正,并根据需要进行裁切,缩放输出到指定区域的功能。


    2.2.2. 流程框图

    图 2-1 畸变矫正模式使用流程

    2.2.3. 摄像头的安装方式

    摄像头的安装支持地装、顶装、壁装三种安装模式,其特性和典型场景示例如表 2-2 所示:

    表 2-2 摄像头安装方式及其特性说明
    安装方式 特性说明
    地装(DM) 摄像头安装在期望仰视视角的场景,如安装在地面、桌面等。
    顶装(CM) 摄像头安装在期望俯视视角的场景,如安装在天花板、楼顶等。
    壁装(WM) 摄像头安装在期望平视视角的场景,如安装在楼间、院墙等。

    不同的安装方式和使用的矫正模式并非一一绑定,实际使用时可选择与之相配的矫正模式以达到最佳的视野和效果。


    2.2.4. 矫正模式和参数说明

    360 度全景矫正:

    表 2-3 360 度全景矫正参数说明
    典型场景 顶装、地装
    参数说明 Pan 矫正区域相对于原图,在圆周方向上的起始位置;
    影响输出图像的左边界
    Tilt 矫正区域相对于原图中心点,在半径方向上的起始位置;
    影响输出图像的上边界
    ZoomH 矫正区域相对于原图中心点,在圆周方向上的结束位置;
    影响输出图像的右边界
    ZoomV 矫正区域相对于原图原点,在半径方向上的结束位置;
    影响输出图像的下边界
    矫正模型


    180度全景矫正:

    表 2-4 180 度全景矫正参数说明
    典型场景 壁装
    参数说明 Pan 视场角进行左右转动,模拟摄像头左右转动。
    Tilt 视场角进行上下转动,模拟摄像头上下转动。
    ZoomH 水平视场角的大小;
    影响输出图像的横向视野范围。
    ZoomV 垂直视场角的大小;
    影响输出图像的纵向视野范围。
    矫正模型


    Normal 矫正:

    表 2-5 Normal 矫正参数说明
    典型场景 壁装、顶转、地装
    参数说明 Pan 视场角进行左右转动,模拟摄像头左右转动。
    Tilt 视场角进行上下转动,模拟摄像头上下转动。
    ZoomH 视场角(水平&垂直)的大小。影响输出图像的整体视野范围
    ZoomV 无效参数,无需进行配置。
    Rotate 模拟摄像头旋转。
    矫正模型

    2.2.5. 应用场景和参数配置说明

    顶装、地装:

    摄像头顶装或者地装时,推荐使用 360 度矫正模式或者 Normal 矫正模式。

    1. 360度矫正模式参数说明及范围如表 2-6 所示。
    2. Normal矫正模式参数说明及范围如表 2-7 所示。
    表 2-6 360度矫正参数配置说明
    参数 说明 参数范围
    Pan 矫正区域相对于原图,在圆周方向上的起始位置;
    单位:角度
    ZoomH > Pan
    ZoomH – Pan <= 360
    Tilt 矫正区域相对于原图中心点,在半径方向上的起始位置;
    单位:pixel
    [InRadius,OutRadius]
    ZoomH 矫正区域相对于原图,在圆周方向上的结束位置;
    对于跨越0°(360°)的区域,例如展开270°到45°的区域,用(Pan=270°,ZoomH=360°+45°=405°)即可
    单位:角度
    ZoomH > Pan
    ZoomH – Pan <= 360
    ZoomV 矫正区域相对于原图中心点,在半径方向上的结束位置;
    单位:pixel
    [InRadius,OutRadius]
    InRadius 在原图中最大有效区域内边界距离中心点的半径。
    如果设置为0则会生效为1;如果超过 FisheyeRadius 则等于 FisheyeRadius。
    单位:pixel
    (0,FisheyeRadius]
    OutRadius 在原图中最大有效区域外边界距离中心点的半径。
    如果设置为0则会生效为1;如果超过 FisheyeRadius 则等于 FisheyeRadius。
    单位:pixel
    (0,FisheyeRadius]
    MountMode 必须配置为顶装或地装。 0,1
    0 地装
    1 顶装


    表 2-7 Normal矫正参数说明及范围
    参数 说明 参数范围
    Pan 模拟摄像头的左右转动,影响输出图像的视野位置。
    如果超过范围则等于边界值。
    单位:角度
    [-90,90]
    = 0 不进行转动
    < 0 向左转动
    > 0 向右转动
    Tilt 模拟摄像头的上下转动,影响输出图像的视野位置。
    如果超过范围则等于边界值。
    单位:角度
    [-90,90]
    = 0 不进行转动
    < 0 向下转动
    > 0 向上转动
    ZoomH 调整视场角(水平&垂直)的大小(比例)。
    影响输出图像的整体视野范围。
    如果超过范围则等于边界值。
    [0,500]
    = 100 不进行调整
    > 100 视野变窄,看到更少画面,但会损失画质。
    < 100 视野变宽,看到更多画面,但会带来无效区域。
    ZoomV 无效参数
    Rotate 模拟摄像头的旋转。
    单位:角度。
    [0,360]
    = 0 不进行旋转。
    > 0 逆时针旋转,360为一圈。
    MountMode 配置为顶装、地装、壁装均可。 0、1、2
    0 地装
    1 顶装
    2 壁装

    壁装:

    摄像头壁装时,推荐使用180度矫正模式或者Normal矫正模式。

    1. 180度矫正模式参数说明及范围如表 2-8 所示。
    2. Normal矫正模式参数说明及范围如表 2-7 所示。
    表 2-8 180度矫正模式参数说明及范围
    参数 说明 参数范围
    Pan 模拟摄像头的左右转动,影响输出图像的视野位置。
    如果超过范围则等于边界值。
    单位:角度。
    [-90,90]
    = 0 不进行转动
    < 0 向左转动
    > 0 向右转动
    Tilt 模拟摄像头的上下转动,影响输出图像的视野位置。
    如果超过范围则等于边界值。
    单位:角度。
    [-90,90]
    = 0 不进行转动
    < 0 向下转动
    > 0 向上转动
    ZoomH 调整水平视场角的大小。
    如果超过范围则等于边界值。
    [0,500]
    = 100 不进行调整
    > 100 视野变窄,看到更少画面,但会损失画质。
    < 100 视野变宽,看到更多画面,但会带来无效区域。
    ZoomV 调整垂直视场角的大小。
    如果超过范围则等于边界值。
    [0,500]
    = 100 不进行调整
    > 100 视野变窄,看到更少画面,但会损失画质。
    < 100 视野变宽,看到更多画面,但会带来无效区域
    MountMode 必须配置为壁装。 2
    2 壁装

    以上各自模式下参数的配置均在其对应模式下有不同的作用效果,以下为公共参数部分的说明,对各矫正模式均有相同的作用效果。

    表 2-9 畸变矫正公共参数
    参数 说明 参数范围
    OutRotate 将输出图像进行中心旋转。
    单位:角度。
    [0,360]
    = 0 不进行旋转。
    > 0 逆时针旋转,360为一圈。
    DistortionRatio 减弱畸变矫正的力度,用于提升视场角。
  • 不适用于360°全景矫正。
  • [-100,100]
    = 0 不进行矫正力度的调整
    > 0 适用于减弱桶形失真的矫正力度。
    绝对值越大减弱的效果越强,会导致画面畸变大,视场角变大。过大会形成枕形失真。
    < 0 适用于减弱枕形失真的矫正力度。
    绝对值越大减弱的效果越强,会导致画面畸变大,视场角变大。过大会形成桶形失真。
    FocalRatio 改变虚拟焦距。
    通过改变该参数可以达到调整图像到投影面的距离,达到推/拉图像的效果,不会损失视野。
    如果设置为0则会生效为10000;如果超过范围则等于边界值。
  • 不适用于Normal矫正。
  • (0,50000]
    = 10000 不进行矫正力度的调整
    > 10000 数值越大,画面越平滑曲率越小
    < 10000 数值越小,画面越弯曲曲率越大
    CropMode 对输出图像进行无效区域检测并裁剪,以剔除无效区域。
    若输出图像全为无效区域时该值为非0将会报错,所以可先配置其它参数,待确认输出图像符合预期后后再根据该需要配置该参数。
    0,1,2
    0 不进行无效区域检测,按照原始输出图像输出
    1 使用画面最大有效区域,拉伸形成和原始输出图像相同的宽高比例。
    此方式能获得最大的有效区域但画面可能会形变。
    2 保持和原始输出图像的宽高比例,去框出最大有效区域,然后再放大到输出图像大小。
    此方式能保证画面不发生形变但可能会损失视野。
    CalibInfo 参数 镜头信息
    CalibPolyBin 镜头畸变信息数据。
    通过PC端LDC Tool生成,设置LDC通道属性时进行设置,该数据必须和实际使用的镜头想匹配。否则会影响畸变矫正的效果。
    CenterXOffset
    CenterYOffset
    CMOS中心点和镜头中心点的偏移量,可用于消除由于组装带来的镜头中心点和CMOS中心点带来的偏差。
    单位:pixel

    配置超出图像范围会导致无有效区域输出。
    0 无偏移。
    > 0 画面中心点位于图像中心点偏右/偏下。
    < 0 画面中心点位于图像中心点偏左/偏上。
    FishEyeRadius 镜头半径,用来描述图像内整个有效画面的半径
  • 鱼眼镜头:配置为有效画面半径
  • 广角镜头:配置为有效画面对角线的一半
  • 和镜头畸变信息相匹配

    2.2.6. 360度全景矫正效果示例

    表 2-10 360度全景矫正不同参数效果示例
    参数设置 矫正效果演示
    srcWidth 1600


    鱼眼输入图像 1600x1200
    有效画面其相对图像的中心点靠上靠右,导致其上方缺失部分内容
    srcHeight 1200
    MountMode 0
    CenterXOffset 75
    CenterYOffset -34
    FishEyeRadius 620
    InRadius 0
    OutRadiusght 600
    FocalRatio 10000
    CropMode 0
    参数序列1
    Pan 0 将原图整个从里到外全部展开,形成全景展开图的效果。
    其下边界存在模糊的一条对应于鱼眼镜头的边缘区域,原图上方缺失的部分在输出图像里显示为黑色无效区域。
    ZoomH 360
    Tilt 0
    ZoomV 600




    360全景矫正输出图像 3768x600
    参数序列2
    Pan 0 相对于参数序列1
    减少ZoomV(远离鱼眼外边界),去除边缘模糊部分。
    加大tilt(远离鱼眼中心点),去除上边界的拉伸较多的部分。
    ZoomH 360
    Tilt 100
    ZoomV 520



    360全景矫正输出图像 3768x420
    参数序列3
    Pan 90 仅对90度到270度之间的画面进行校正
    对比与参数序列2的效果图可以看出,其左右两侧各被除去了1/4的画面,上下边界不变
    ZoomH 270
    Tilt 100
    ZoomV 520



    360全景矫正输出图像 1884x420
    参数序列4
    Pan 315 对315°到405°之间的画面进行展开,其等效于-45°到45°
    (Pan)->(ZoomH) == (Pan-360°) ->(ZoomH-360°)
    ZoomH 405
    Tilt 100
    ZoomV 600



    360全景矫正输出图像 942x600

    2.2.7. 180度全景矫正效果示例

    表 2-11 180度全景矫正不同参数效果示例
    参数设置 矫正效果演示
    srcWidth 1600


    鱼眼输入图像 1600x1200
    有效画面其相对图像的中心点靠上靠右,导致其上方缺失部分内容
    srcHeight 1200
    MountMode 2
    CenterXOffset 75
    CenterYOffset -34
    FocalRatio 10000
    CropMode 0
    参数序列1
    Pan 0 不进行上下转动, 不进行视场角的缩放,效果图如下。
    Tilt 0
    ZoomH 100
    ZoomV 100
    FishEyeRadius 620




    1600x1200
    参数序列2
    Pan 0 相对于参数序列1,减少了FishEyeRadius的数值,将模糊的边界图像去掉,提升效果
    Tilt 0
    ZoomH 100
    ZoomV 100
    FishEyeRadius 580




    1600x1200
    参数序列3
    Pan 0 相对于参数序列2,改变了水平和垂直的视野,将边缘拉伸较大的地方去除,并根据图像效果调整二者的数值
    Tilt 0
    ZoomH 120
    ZoomV 200
    FishEyeRadius 580




    1300x600
    参数序列4
    Pan 0 对比参数序列1,改变tilt,调整相机视角位置。向下转动50°, 形成俯视的视角
    Tilt -50
    ZoomH 100
    ZoomV 100
    FishEyeRadius 620




    1600x1200
    输出图像中下面黑色部分为FishEyeRadius设置过大导致,减小FishEyeRadius即可消除黑色区域,如FishEyeRadius设置过大超出了原图有效范围则会产生无效区域。
    参数序列5
    Pan -50 相较于参数序列4,再调整Pan参数, 使摄像机在向左转动50°,向下转动50°。
    Tilt -50
    ZoomH 100
    ZoomV 100
    FishEyeRadius 620




    1600x1200

    2.2.8. Normal矫正效果示例

    表 2-12 Normal矫正不同参数效果示例
    参数设置 矫正效果演示
    srcWidth 1600


    鱼眼输入图像 1600x1200
    有效画面其相对图像的中心点靠上靠右,导致其上方缺失部分内容。
    srcHeight 1200
    MountMode 2
    CenterXOffset 75
    CenterYOffset -34
    Rotate 0
    CropMode 0
    参数序列1
    Pan 0 不进行上下转动, 不进行视场角的缩放。
    Tilt 0
    ZoomH 100




    1600x1200
    从效果图上可以看出相对于180°全景矫正,其画面物体拉伸弯曲较小(灯条),成线性放射状,但其视场角更小。
    参数序列2
    Pan 0 相较于参数序列1,改变了tilt的值,使相机向下转动50°。
    Tilt -50
    ZoomH 100




    1600x1200
    从效果上看,其相较于180度全景矫正参数序列4,视野范围更小,但物体更笔直(棋盘格)。
    参数序列3
    Pan -50 相较于参数序列2,改变了Pan的值。
    使相机向左转动50°,向下转动50°。
    Tilt -50
    ZoomH 100




    1300x600
    参数序列4 相较于参数序列1,改变了ZoomH的值。
    Pan 0
    Tilt 0
    ZoomH 200


    相较于ZoomH = 100,其中心内容被拉近, 视野变窄
    ZoomH 100


    默认效果
    ZoomH 50


    相较于ZoomH = 100,其中心内容被推远,视野变广,沿着中心点放射状向外,越边缘视觉上拉伸越厉害。
    上方黑色弧形区域为无效区域,是因为有部分内容超出原图有效区域。
    参数序列5
    Pan 0 修改Rotate的值,模拟摄像头旋转。在壁装场景,矫正画面一定是正的,且在Pan和Tilt都为0时没有效果。
    Tilt 32
    MountMode 2
    Rotate 0


    无旋转
    Rotate 90


    矫正区域旋转了90度
    Rotate 270


    矫正区域旋转了270度
    参数序列6
    Pan 0 相较于参数序列5,将摄像头改成地装。
    Tilt 32
    MountMode 0
    Rotate 0


    无旋转
    Rotate 90


    矫正区域旋转了90度,且画面也旋转了90度
    Rotate 270


    矫正区域旋转了270度,且画面也旋转了270度

    2.2.9. 其它参数效果示例

  • CropMode参数对输出图像的影响示例
  • 表 2-13 CropMode参数效果示例


    输入图像
    CropMode = 0
    按矫正后原始图像输出


    输出图像
    CropMode = 1
    框出最大有效区域,并自适应缩放到输出图像大小


    crop 示意图


    输出图像
    CropMode = 2
    按输出图像比例框住有效区域,然后等比放大到输出图像大小


    crop 示意图


    输出图像


  • FocalRatio参数对输出图像的影响示例
  • 表 2-14 FocalRatio参数效果示例
    FocalRatio = 2000


    相较于FocalRatio = 10000镜头拉近,中心的物体被放开,更清晰;边缘的物体被压缩,画面更弯曲 (参考桌面边缘)
    FocalRatio = 10000


    默认效果,仅对原图进行180°全景矫正
    FocalRatio = 20000


    相较于FocalRatio = 10000镜头推远,中心的内容压缩,边缘物体被放开,画面更平滑(参考桌面边缘)


  • OutRotate参数对输出图像的影响示例
  • 表 2-15 OutRotate参数效果示例
    OutRotate = 0


    默认效果,仅对原图进行180°全景矫正
    OutRotate = 45


    逆时针旋转45度,这里并非是对输出图像做出的旋转, 而是在原图里将输出图像对应的区域进行旋转,如果旋转后的输出图像所对应区域并未超出原图区域,则不会产生无效区域(不会有黑色)
  • DistortionRatio参数对输出图像的影响示例(桶形失真)
  • 表 2-16 DistortionRatio参数效果示例
    DistortionRatio = -10


    加强矫正效果,桌面边缘更直一些,但整体视野变窄
    DistortionRatio = 0


    默认参数
    DistortionRatio = 10


    减弱矫正效果,桌面边缘更弯曲一些,但整体视野变宽

    2.3. 映射表模式


    2.3.1. 模式说明

    映射表模式(convert displacement map to ldc bin [MAP2BIN]), 为了方便用户直接使用LDC硬件实现客制化的LDC功能的特殊模式。

    当 Region 处于该模式下,MI LDC模块将会接收用户设置下来的输入输出图像映射数据(displacement map),根据用户的map转化为LDC硬件能处理的数据,交由硬件完成输出图像的构建。

    映射表(displacement map):存储输出图像到输入图像的像素坐标映射,分为xmap和ymap,分别记录每个输出图像像素坐标(xout,yout)对应的输入图像像素坐标(xin,yin)。


    2.3.2. 流程框图

    图 2-2 映射表模式使用流程


    2.3.3. 参数配置说明

    表 2-17 映射表模式参数说明
    参数 说明 参数范围
    Grid 为了提高处理性能,map通常都是进行了降采样之后的,用于减少运算量,map里并非将每个像素点都包含在内,而是在硬件处理时进行插值恢复。所以引入了Grid的参数,用于描述采样的间隔(精度)。
    比如一张3840x2160的输出图像,其原始map为3840x2160,在Grid = 16的情况下map宽高降低为241x136
    1,2,4,8,16,32,64
    Xmap
    Ymap
    分为 x 坐标映射表和 y 坐标映射表。按照采样点分别存储其对应坐标的横纵坐标值。
    输出图像中P点(X~out~, Y~out~),其对应原图的坐标点为P1 (X~in~, Y~in~),map buff存储的坐标关系如:


    这里由于进行了降采样,所以并非每个点都需要进行计算,只需按照Grid步进进行计算即可,如果末尾的像素点无法除尽Grid,则需根据实际情况,进行扩展或者截断到实际边界,区别可见2.3.6节 项 1 所示。
    NA
    XmapSize
    YmapSize
    Map数据buff里每个元素数据类型为float类型, 大小为四字节。

  • 这里计算map的宽高,需要向上取整,保证包含尾部的像素。
  • 比如一张3840x2160的输出图像,其Grid = 16的情况下,单张map所占用的buff大小为:241x136x4 = 131104 (bytes).如果不满足该要求,将会抛出错误。
    NA

    2.3.4. Map生成示例

    输入输出1:1 的Map示例:

    处理的输入图像为1920x1080, Grid为16,其宽度1080/16 = 67.5 无法除尽,将其截断到1080。Map宽高为121x69, 一个生成的示例如表 2-18所示

    表 2-18 1:1 Map示例
    行/列 0 1 2 118 119 120
    0 0, 0 16, 0 32, 0 …,0 1888,0 1904,0 1919,0
    1 0,16 16,16 32, 16 …,16 1888,16 1904,16 1919,16
    2 0,32 16,32 32,32 …,32 1888,32 1904,32 1919,32
    0,…. 16,… 32,… ...,… 1888,… 1904,… 1919,…
    0, …. 16,… 32,… ...,… 1888,… 1904,… 1919,…
    66 0,1056 16,1056 32,1056 …,1056 1888,1056 1904,1056 1919,1056
    67 0,1072 16,1072 32,1072 …,1072 1888,1072 1904,1072 1919,1072
    68 0,1079 16,1079 32,1079 …,1079 1888,1079 1904,1079 1919,1079

    2.3.5. 参数配置示例及效果

    如下为一个做EIS防抖,右下角带有额外细碎变化的map。

    其所需设置的参数表 2-19所示:

    表 2-19 示例map参数配置
    参数 说明
    RegionMode 4 MI_LDC Region所使用的模式
    srcWidth 1920 输入图像尺寸
    单位: pixel
    srcHeight 1080
    dstWidth 1920 输出图像尺寸
    单位: pixel
    dstHeight 1080
    Grid 16 采样精度
    XmapSize 33396 Map所需的内存大小
    单位: Bytes
    YmapSize 33396

    其xymap的映射图示和将其运用在板端的输入输出图像比对如表 2-20 所示。

    表 2-20 示例map效果


    Xmap 映射图


    Ymap 映射图


    输入输出网格图


    输入图像


    输出图像


    输入输出比对图
    可见,其和上面所示的映射图所展示的效果保持一致

    2.3.6. Map 规范及限制

    1. 如果图像的宽高不能被Grid整除则会出现以下情况。 如果map按照Grid将其扩展的话,则会导致黑边产生

      SrcImage: 1920x1080 Map range: 1920x1088
      输入图像


      输出图像


      如果截断到边界,则会产生边界处拉伸导致缺失一部分像素的问题。

      SrcImage: 1920x1080 Map range: 1920x1080
      输入图像


      输出图像


      笔杆下白底黄色的格子相对输入图像更靠边界一点
      该情况属于硬件上的限制, 所以推荐使用能被Grid整除的分辨率作为输入。

    2. 对于map复杂度的限制:
      因为硬件限制,无法一次处理完整幅图像,所以需要将图像划分成多个区域依次处理。而划分这个处理区域的限制如下:

      每一行的最大y值减去上一行的最小y值不能超过128像素。如果map的变化过大或Grid过大精度过低导致无法处理,可以减小Grid来提高采样精度,看是否可以处理。


    2.4. 投影变换函数


    2.4.1. 模式说明

    投影变换函数(Projection Mapping Function[PMF])模式,通过该模式可根据用户配置的投影变换矩阵完成对于图像的平面几何变换,生成输出图像。

    常见的平面几何变换类型有:平移变换、旋转变换、剪切(错切)变换、缩放变换、透视变换。每种变换均可进行相互叠加使用。叠加的过程就是矩阵点乘。

    图 2-3 常见投影变换示意图

    刚性变换:平移变换、旋转变换
    线性变换:缩放变换、剪切(错切)变换、旋转变换
    仿射变换:线性变换、刚性变换
    投影变换:仿射变换、透视变换

    输出图像生成过程是将像素坐标和指定的3X3矩阵进行运算,获得其在输入图像中对应的坐标点。 式子如下:


    2.4.2 流程框图

    图 2-4 投影变换函数使用流程图

    2.4.3 矩阵使用说明

    该矩阵 (m33) 描述的是从输出坐标到输入坐标的映射关系。矩阵中各项与投影变换的对应关系如图 2-5所示。 不同的投影变换之间,项的数值会相互影响,所以一般都需要通过工具计算得到变换矩阵, 只有简单的单一变换可通过手动调整来实现。

    图 2-5 m33 项和效果关系示意图

    矩阵的计算方法如下:

    矩阵的计算按照需求可分为如下几种类型,注意这里提供的矩阵模板是从输入图到输出图(xy->uv)的映射,根据此模板直接计算出来的结果需要求其逆矩阵(uv->xy),方可作为API的m33~origin的值。
    1. 平移矩阵模板: 沿着原点向右平移Δy(右为正向),向下平移Δy(下为正向)。


    2. 旋转矩阵模板:围绕原点(输入图左上角)逆时针旋转θ度。

    3. 缩放矩阵模板:将图像横向缩放Scalex倍、纵向缩放Scaley倍(可实现镜像、翻转效果)。

    4. 剪切矩阵模板:将图像沿着横轴倾斜α度,沿着纵轴倾斜β度。

    5. 透视矩阵需要通过目标平面的四个点和在当前图像中的坐标,求出变换矩阵。

    m33_origin矩阵(uv->xy)的使用需要经过量化和定点化两个步骤,操作如下:
    1.量化:
    其中m_8为量化因子,求出初始的M33后需要每个项除以m_8得出量化后的M33'


    2.定点化:
    为了方便使用需要将每个m33进行定点化,将其统一转化为精度为1/(225) 的定点数进行表示,定点化规则如下,将每项乘 225即可。


    2.4.4 参数配置说明

    表 2-21 PMF参数配置说明
    参数 说明 参数范围
    as64PMFCoef 1、用于存储量化+定点化后的m33矩阵
    2、m33内的元素m_n按照下标 n 在 as64PMFCoef 里进行存储
    m_0 [-67108864,67106816]
    m_1 [-67108864,67106816]
    m_2 [-137438963472, 137434759168]
    m_3 [-67108864,67106816]
    m_4 [-67108864,67106816]
    m_5 [-137438963472, 137434759168]
    m_6 [-32768,32767]
    m_7 [-32768,32767]
    m_8 33554432

    2.4.5 参数配置示例

    PMF的一个实例M33_origin(uv->xy)到API参数的计算过程为:

    将其进行量化和定点化:
        

        
    最终设置到接口里的参数as64PMFCoef即为:
        


    2.4.6 单一变换示例

    表 2-22 PMF一些单一变换效果示例


    输入图像800x800
    平移变换
    向右平移200pixel,向下平移100pixel

    Origin m33 (uv->xy):

        

    as64PMFCoef:

        
    旋转变换:
    围绕原点逆时针旋转10°

    Origin m33 (uv->xy):

        

    as64PMFCoef:

        
    缩放变换
    横轴缩小为原来的0.5,纵轴扩大为原来的1.5

    Origin m33 (uv->xy):

        

    as64PMFCoef:

        
    剪切(错切)变换
    横轴方向剪切(错切)15°,纵轴方向剪切(错切)5°

    Origin m33 (uv->xy):

        

    as64PMFCoef:

        
    透视变换
    将倾斜棋盘格平面恢复到垂直
    图像四个角点坐标为:(244,139),(770,141),(765,613),(213,605)
    映射到新的输出平面上的四个点为:(244,139),(770,139),(770,599),(244,599)

    Origin m33 (uv->xy):

        

    as64PMFCoef:

        

    2.4.7 组合变换计算示例

    一个复杂的效果可以拆解使用多种变换组合,单种效果的叠加需要使用矩阵的点乘进行运算获得。其使用需要分为下面几个步骤:
    1. 确认目标效果,即最后实现的效果是怎么样的,将其拆解为子步骤。每个步骤可用上面所列的基本矩阵完成;
    2. 子步骤的矩阵分别生成;
    3. 根据子步骤逆序进行矩阵的点乘运算,(矩阵乘法不适用交换律,不可随意调换顺序进行!);
    4. 将输出m33求其逆矩阵(LDC需要输出图到输入图的映射矩阵),将其变为nv->xy的m33;
    5. 按照上面参数配置示例的方案将其进行量化和定点化的处理后成为LDC API可使用的参数;

    注意:
    1. 关于矩阵运算在图像中的两种"视角"(坐标系不变和图像不变)。我们使用坐标系不变的视角去理解和拆分子步骤;
    2. 所有的操作都是以坐标原点(图像左上角),所以想要实现诸如依某点为中心的操作,都需要搭配平移矩阵进行实现,使用平移矩阵将操作的中心点移动到原点,操作完毕后再移动回去;

    案例1:
    实现将图像进行中心旋转45度:需要使用平移矩阵和旋转矩阵。效果的叠加顺序为:
    step0. 先将图像中心点移动到坐标原点(旋转矩阵依照原点为旋转中心);
    step1. 将图像逆时针旋转45°;
    step2. 将图像中心点移动回坐标中心点。
    其相关矩阵如下:


    m33_origin_comb (xy->uv)

    其矩阵计算过程如下:
         step2 · step1 · step0

    m33_origin (xy->uv)

         然后将计算得出的矩阵求其逆矩阵,再进行量化和定点化和即可设置到MI API进行使用:

    m33_origin (xy->uv) 计算得出 m33_api (uv->xy)


    围绕中心旋转45度输入输出效果


    案例2:
    将图像进行镜像处理:需要使用缩放矩阵和平移矩阵。效果的叠加顺序为:
    step0. 将图像使用缩放矩阵将图像变为 x=-x, y=y,形成依Y轴为对称轴的镜像效果;
    step1. 将图像向右移动到坐标系内。
    其相关矩阵如下:

    m33_origin_comb (xy->uv)

    其矩阵从计算到得出API的参数过程如下:

        (step1 · step0)^-1 -> 量化和定点化:

    m33_origin (xy->uv) 计算得出 m33_api (uv->xy)


    镜像效果输入输出图


    2.5. LDC 旁路模式


    2.5.1. 模式说明

    旁路模式(No Transformation),工作在此模式下,当前Region将不会进行畸变校正的处理,包括镜头畸变校正,映射表等方式,但支持对输出图像做旋转和自适应缩放(当输出和输入分辨率不一致的时候将输入进行缩放到输出的分辨率)的操作。


    2.5.2. 流程框图

    图 2-6 LDC 旁路模式使用流程图

    2.5.3. 参数配置说明

    表 2-23 LDC旁路参数配置说明
    旁路模式参数 参数说明 参数范围
    OutRotate 将输出图像进行中心旋转
    单位:角度
    [0,360]
    = 0 不进行旋转
    > 0 逆时针旋转,360为一圈

    2.5.4. 参数效果示例

    表 2-24 LDC旁路模式参数效果示例


    输入图像1600x1200
    自适应缩放到输出图像


    输出图像1920x1080
    OutRotate = 45


    输出图像1600x1200

    3. 标定工具


    请查看 CV Tool 使用文档。