• 图像缩放后相机内参变化


    图像缩放之后相机内参变化

    1. 问题描述

    在对采集到的图像进行3D坐标相关计算时,需要用到相机内参信息,但是在对图像进行缩放之后相机内参如何变化呢?

    在大多数书上只会给出结论(假设缩小一半):

    [f_x'= frac{f_x}{2},f_y'=frac{f_y}{2},c_x'=frac{c_x}{2},c_y'=frac{c_y}{2} ]

    2. 数学推导

    以下函数把3D空间点 (P) 投影到像素坐标系中: $$(x,y,z,1) ightarrow(u,v,S)$$

    [egin{pmatrix} a_x & 0 & u_0 \ 0 & a_y & v_0 \ 0 & 0 & 1 end{pmatrix} egin{pmatrix} R_{11} & R_{12} & R_{13} & T_x \ R_{21} & R_{22} & R_{23} & T_y \ R_{31} & R_{32} & R_{33} & T_z \ end{pmatrix} egin{pmatrix} x \ y \ z \ 1 end{pmatrix} ]

    之后,$$(u,v,S) ightarrow(u/S,v/S,1)$$得到非齐次的像素坐标.

    可以简写为:

    [u= frac{m_1 P}{m_3 P} \ v = frac{m_2 P}{m_3 P} ]

    其中(m_i)(K[R|T]_{3 imes4})构成的投影矩阵的第(i)行,在进行resize之后:

    [u'=frac{u}{2} \ v' = frac{v}{2} ]

    因此:

    [u' = (1/2) frac {m_1 P} {m_3 P} \ v' = (1/2) frac {m_2 P} {m_3 P} ]

    转换回最初的投影方程:

    [left( egin{array}{ccc} 0.5 & 0 & 0 \ 0 & 0.5 & 0 \ 0 & 0 & 1 end{array} ight) left( egin{array}{ccc} a_x & 0 & u_0 \ 0 & a_y & v_0 \ 0 & 0 & 1 end{array} ight) left( egin{array}{ccc} R_{11} & R_{12} & R_{13} & T_x \ R_{21} & R_{22} & R_{23} & T_y \ R_{31} & R_{32} & R_{33} & T_z \ end{array} ight) left( egin{array}{ccc} x \ y \ z \ 1 end{array} ight) ]

    与如下形式等价:

    [left( egin{array}{ccc} 0.5 a_x & 0 & 0.5 u_0 \ 0 & 0.5 a_y & 0.5 v_0 \ 0 & 0 & 1 end{array} ight) left( egin{array}{ccc} R_{11} & R_{12} & R_{13} & T_x \ R_{21} & R_{22} & R_{23} & T_y \ R_{31} & R_{32} & R_{33} & T_z \ end{array} ight) left( egin{array}{ccc} x \ y \ z \ 1 end{array} ight) ]

    如果使用的是Matlab类似的索引由1开始的,需要利用: (u'=(u-1)/2+1,v'=(v-1)/2+1)替换,并重新推导

    3. 对于0.5pixel问题的处理

    同样需要进行处理:

    [u'=(u-0.5)s+0.5\ v'=(v-0.5)s+0.5 ]

    于是可以得到(假设缩放为(s)):

    [egin{pmatrix} sf_x & 0 & sc_x+0.5s-0.5 \ 0 & sf_y & sc_y+0.5s-0.5 \ 0 & 0 & 1 end{pmatrix} ]

    于是,对应的内参变化为:

    [egin{aligned} f_x' &= s*f_x\ f_y' &= s*f_y\ c_x' &= s*c_x+0.5s-0.5\ c_y' &= s*c_y +0.5s-0.5 end{aligned} ]

    4. 参考资料

  • 相关阅读:
    [华为机试] 计算二进制数中1的个数
    vector释放
    opencv findcontours内存错误
    opencv的编译安装
    opencv SVM分类器模块的简单设计
    centos7.6安装FFMpeg
    centos安装jenkins
    centos 7.6安装Java
    Centos7 忘记密码的情况下,修改root或其他用户密码
    性能测试报告
  • 原文地址:https://www.cnblogs.com/jymg/p/11693587.html
Copyright © 2020-2023  润新知