给定相机内参与畸变系数将三维点投影到像素点

摘要 : 本文主要写了,将相机坐标系上的点投影到像素平面上,并去畸变的过程,并附带C# 代码实现。

基础知识部分可以参考这位博主的文章(点击蓝色字体即可跳转)。

当不考虑畸变时, 投影方程如下所示:
在这里插入图片描述

当考虑畸变时:
在这里插入图片描述

切向畸变可以用下面式子去矫正:
在这里插入图片描述
x c o r r = x d i s ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x d i s y d i s + p 2 ( r 2 + 2 x d i s 2 ) x_{corr} = x_{dis}(1 + k_1r^2 + k_2r^4 + k_3r^6) + 2p_1x_{dis}y_{dis} + p_2(r^2 + 2x_{dis}^2) xcorr=xdis(1+k1r2+k2r4+k3r6)+2p1xdisydis+p2(r2+2xdis2)
y c o r r = y d i s ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 y d i s 2 ) + 2 p 2 x d i s y d i s y_{corr} = y_{dis}(1 + k_1r^2 + k_2r^4 + k_3r^6) + p_1(r^2 + 2y_{dis}^2)+ 2p_2x_{dis}y_{dis} ycorr=ydis(1+k1r2+k2r4+k3r6)+p1(r2+2ydis2)+2p2xdisydis

其中, ( x c o r r , y c o r r ) (x_{corr} , y_{corr} ) xcorr,ycorr 在归一化相机平面上( z c = 1 z_c = 1 zc=1),我们需要将其还原到像素坐标,就是去畸变后的像素坐标了。

u , = x c o r r ∗ f x + c x u^, = x_{corr} *f_x + c_x u,=xcorrfx+cx
v , = y c o r r ∗ f y + c y v^, = y_{corr} *f_y + c_y v,=ycorrfy+cy

   public static void Project2(Matrix<double> cameraMatrix, Vector<double> distCoeffs, Point3D point, out Point2D projectedPoint)
        {
            double xp = point.X / point.Z;
            double yp = point.Y / point.Z;

            double fx = cameraMatrix[0, 0];
            double fy = cameraMatrix[1, 1];
            double cx = cameraMatrix[0, 2];
            double cy = cameraMatrix[1, 2];
            double k1 = distCoeffs[0];
            double k2 = distCoeffs[1];
            double k3 = distCoeffs[4];
            double p1 = distCoeffs[2];
            double p2 = distCoeffs[3];

            // compute f(xp, yp)
            double rsquared = xp * xp + yp * yp;
            double g = 1 + k1 * rsquared + k2 * rsquared * rsquared + k3 * rsquared * rsquared * rsquared;
            double xpp = xp * g + 2 * p1 * xp * yp + p2 * (rsquared + 2 * xp * xp);
            double ypp = yp * g + p1 * (rsquared + 2 * yp * yp) + 2* p2 * xp * yp;
            projectedPoint = new Point2D(fx * xpp + cx, fy * ypp + cy);
        }

参考链接:
1、知乎 摄像机模型、坐标系转换及去畸变详解

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhangJingHuaJYO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值