【SLAM】视觉SLAM十四讲(四:相机模型与非线性优化)

本文深入探讨了视觉SLAM中的关键概念,包括图像去畸变、双目视差的应用以及矩阵微分。介绍了如何对桶形失真的图像进行去畸变,并解析了径向和切向畸变模型。此外,讲解了如何利用双目模型生成点云。文章还探讨了高斯牛顿法在曲线拟合实验中的应用,解释了其优缺点,并提供了相关代码参考。
摘要由CSDN通过智能技术生成

图像去畸变

对一张桶形失真的图片进行去畸变
畸变模型有两种:

  • 径向畸变:由镜头形状导致
    圆心为坐标原点,畸变是实际坐标相对于坐标原点极坐标形式下的变化
  • 切向畸变:透镜与成像平面未严格平行

去畸变代码

int main(int argc, char **argv) {

    // 畸变参数
    double k1 = -0.28340811, k2 = 0.07395907, p1 = 0.00019359, p2 = 1.76187114e-05;
    // 相机内参
    double fx = 458.654, fy = 457.296, cx = 367.215, cy = 248.375;

    cv::Mat image = cv::imread(image_file,0);   // 图像是灰度图,CV_8UC1
    int rows = image.rows, cols = image.cols;
    cv::Mat image_undistort = cv::Mat(rows, cols, CV_8UC1);   // 去畸变以后的图
    double x,y,r,xd,yd;
    // 计算去畸变后图像的内容
    for (int v = 0; v < rows; v++)
        for (int u = 0; u < cols; u++) {

            double u_distorted = 0, v_distorted = 0;
            //利用内参将像素点转化为实际点
            x = (u-cx)/fx;
            y = (v-cy)/fy;
            //计算出该实际点距离原点半径
            r = sqrt(pow(x,2)+pow(x,2));
            //根据畸变变换公式求原始图像的坐标
            xd = x*(1 + k1*pow(r,2) + k2*pow(r,4)) + 2*p1*x*y + p2*(pow(r,2) + 2*pow(x,2));
            yd = y*(1 + k1*pow(r,2) + k2*pow(r,4)) + p1*(pow(r,2)+2*pow(y,2)) + 2*p2*x*y;
            //利用内参公式将纠正后的原始坐标转换为像素坐标
            u_distorted = fx*xd + cx;
            v_distorted = fy*yd 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值