不管是vins-fusion还是ORBSLAM3,如果接收到的是rgb图像,也是先转为灰度图再进行处理的

不管是vins-fusion还是ORBSLAM3,如果接收到的是rgb图像,也是先转为灰度图再进行处理的

ORBSLAM3是会把图像转为灰度图去处理的
https://www.cnblogs.com/yiqian/p/14899026.html

cvtColor(mImGray,mImGray,cv::COLOR_RGB2GRAY);

/ORB_SLAM3/src/Tracking.cc

cv::Mat Tracking::GrabImageMonocular(const cv::Mat &im, const double &timestamp, string filename)
{
    mImGray = im;

    if(mImGray.channels()==3)
    {
        if(mbRGB)
            cvtColor(mImGray,mImGray,cv::COLOR_RGB2GRAY);
        else
            cvtColor(mImGray,mImGray,cv::COLOR_BGR2GRAY);
    }
    else if(mImGray.channels()==4)
    {
        if(mbRGB)
            cvtColor(mImGray,mImGray,cv::COLOR_RGBA2GRAY);
        else
            cvtColor(mImGray,mImGray,cv::COLOR_BGRA2GRAY);
    }

    if (mSensor == System::MONOCULAR)
    {
        if(mState==NOT_INITIALIZED || mState==NO_IMAGES_YET ||(lastID - initID) < mMaxFrames)
            mCurrentFrame = Frame(mImGray,timestamp,mpIniORBextractor,mpORBVocabulary,mpCamera,mDistCoef,mbf,mThDepth);
        else
            mCurrentFrame = Frame(mImGray,timestamp,mpORBextractorLeft,mpORBVocabulary,mpCamera,mDistCoef,mbf,mThDepth);
    }
    else if(mSensor == System::IMU_MONOCULAR)
    {
        if(mState==NOT_INITIALIZED || mState==NO_IMAGES_YET)
        {
            mCurrentFrame = Frame(mImGray,timestamp,mpIniORBextractor,mpORBVocabulary,mpCamera,mDistCoef,mbf,mThDepth,&mLastFrame,*mpImuCalib);
        }
        else
            mCurrentFrame = Frame(mImGray,timestamp,mpORBextractorLeft,mpORBVocabulary,mpCamera,mDistCoef,mbf,mThDepth,&mLastFrame,*mpImuCalib);
    }

    if (mState==NO_IMAGES_YET)
        t0=timestamp;

    mCurrentFrame.mNameFile = filename;
    mCurrentFrame.mnDataset = mnNumDataset;

#ifdef REGISTER_TIMES
    vdORBExtract_ms.push_back(mCurrentFrame.mTimeORB_Ext);
#endif

    lastID = mCurrentFrame.mnId;
    Track();

    return mCurrentFrame.mTcw.clone();
}

vins-fusion如果收到rgb图也是转为灰度图再处理的
vins_estimator/src/rosNodeTest.cpp · 马熙/VINS-Fusion - Gitee.com

cv::Mat getImageFromMsg(const sensor_msgs::ImageConstPtr &img_msg)
{
    cv_bridge::CvImageConstPtr ptr;
    if (img_msg->encoding == "8UC1")
    {
        sensor_msgs::Image img;
        img.header = img_msg->header;
        img.height = img_msg->height;
        img.width = img_msg->width;
        img.is_bigendian = img_msg->is_bigendian;
        img.step = img_msg->step;
        img.data = img_msg->data;
        img.encoding = "mono8";
        ptr = cv_bridge::toCvCopy(img, sensor_msgs::image_encodings::MONO8);
    }
    else
        ptr = cv_bridge::toCvCopy(img_msg, sensor_msgs::image_encodings::MONO8);

    cv::Mat img = ptr->image.clone();
    return img;
}

### 回答1: b'vins-fusion'和'orb-slam'都是视觉SLAM算法,但它们的原理和实现略有不同。'vins-fusion'能够更好地处理动态环境和IMU的数据,而'orb-slam'在处理静态场景时更稳定和效果更好。具体使用哪种算法要根据自身的应用场景和需求来选择。 ### 回答2: Vins-fusionorb-slam是两种经典的视觉SLAM方法。其主要区别在于它们的架构和实现方式,下面将分别对它们进行简单的介绍和比较。 Vins-fusion是由加拿大滑铁卢大学的研究团队开发的一种基于视觉和惯性传感器融合的SLAM方法。该算法采用了双目相机和惯性测量单元(IMU)的信息,结合非线性优化方法,实现了建立基于特征点的稠密地图和相机位置、速度估计。该算法的优点在于其能够从多个传感器中融合不同类型的数据,提高了相机位置估计精度和鲁棒性。 相比之下,ORB-SLAM则是一种使用单目相机的基于特征点匹配的SLAM方法。它基于FAST角点检测和ORB特征描述子,采用优化方法求解相机位姿和地图点,从而实现对相机的位姿估计和地图构建。该算法的优点在于其实现简单,适用于不同场景下的运动物体跟踪和建图。 总体而言,Vins-fusion相比ORB-SLAM在鲁棒性和精度上有所提高,但是需要使用双目相机和IMU等多种传感器,实现相应的硬件条件和算法复杂度也较高。而ORB-SLAM则存在对特定场景下角点检测和匹配的敏感性问题,但是其实现方式较为简单,适用范围广泛,更容易被广泛采用。因此,在实际应用中,需要根据具体的场景和需求来选择适合的SLAM方法。 ### 回答3: Vins-FusionORB-SLAM都是常用的视觉惯性里程计(Visual-Inertial Odometry,VIO)算法,它们都基于姿态估计和特征匹配,实现了同时定位与建图(SLAM)的功能。 比较Vins-FusionORB-SLAM,可以从以下几个方面入手: 1. 精度:Vins-Fusion采用深度学习和卡曼滤波等技术,能够达到较高的精度,尤其是在动态环境下的鲁棒性更强;而ORB-SLAM则采用了优化方法和关键帧选择等技术,也有一定的精度,但在动态环境下易出现漂移等问题。 2. 稳定性:Vins-Fusion对光照变化、拍摄角度变化等有一定的鲁棒性,能够在复杂环境下保持较好的稳定性;而ORB-SLAM对光照变化等敏感,稳定性稍逊。 3. 实时性:Vins-Fusion具有较高的实时性,能够在移动设备等资源有限的场景下工作;而ORB-SLAM对计算资源要求较高,适合在较为强大的计算设备上工作。 4. 易用性:ORB-SLAM具有较好的开源生态,有丰富的文档和代码示例,对开发者较为友好;而Vins-Fusion的开发和使用相对较为复杂,需要掌握深度学习和卡曼滤波等专业知识。 综合来看,Vins-FusionORB-SLAM各有优劣,适用于不同的场景和需求。开发者可以根据项目要求选择适合自己的算法,并结合实际情况进行优化和改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值