许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Dyna-SLAM代码解读:Geometry.cc(四)

Dyna-SLAM代码解读:Geometry.cc(四)

阅读数 14
点赞 0
article_banner

7、 进行深度图像的 区域生长 处理,将动态区域生成一个掩码

cv::Mat Geometry::DepthRegionGrowing(const vector<DynKeyPoint> &vDynPoints, const cv::Mat &imDepth){     cv::Mat maskG = cv::Mat::zeros(480, 640, CV_32F);     if (!vDynPoints.empty())    {        mSegThreshold = 0.20;         for (size_t i(0); i < vDynPoints.size(); i++)        {            int xSeed = vDynPoints[i].mPoint.x;            int ySeed = vDynPoints[i].mPoint.y;            const float d = imDepth.at<float>(ySeed, xSeed);            if (maskG.at<float>(ySeed, xSeed) != 1. && d > 0)            {                cv::Mat J = RegionGrowing(imDepth, xSeed, ySeed, mSegThreshold);                maskG = maskG | J;            }        }         int dilation_size = 15;        cv::Mat kernel = getStructuringElement(cv::MORPH_ELLIPSE,                                               cv::Size(2 * dilation_size + 1, 2 * dilation_size + 1),                                               cv::Point(dilation_size, dilation_size));        maskG.cv::Mat::convertTo(maskG, CV_8U);        cv::dilate(maskG, maskG, kernel);    }    else    {        maskG.cv::Mat::convertTo(maskG, CV_8U);    }     cv::Mat _maskG = cv::Mat::ones(480, 640, CV_8U);    maskG = _maskG - maskG;     return maskG;}

函数 的目的是进行深度图像的区域生长处理,以根据给定的动态关键点(vDynPoints)和深度图像(imDepth)生成一个掩码(maskG),表示动态物体在图像中的区域。

函数的具体步骤如下:

  1. 首先创建一个与输入图像大小相同的空白的浮点型掩码(maskG)。
  2. 如果给定的动态关键点不为空(vDynPoints不为空),则进行以下操作:
       
  3. 如果给定的动态关键点为空,则将掩码转换为 8 位无符号整数类型(CV_8U)。
  4. 创建一个与输入图像大小相同的全为 1 的掩码(_maskG)。
  5. 通过计算差集操作(_maskG - maskG),得到动态物体的区域掩码。
  6. 最后,返回生成的掩码(maskG)。

8、目的是将两个遮罩(mask)图像进行合并

    void Geometry::CombineMasks(const ORB_SLAM2::Frame ¤tFrame, cv::Mat &mask)    {        cv::Mat _maskL = cv::Mat::ones(currentFrame.mImMask.size(), currentFrame.mImMask.type());        _maskL = _maskL - currentFrame.mImMask;         cv::Mat _maskG = cv::Mat::ones(mask.size(), mask.type());        _maskG = _maskG - mask;         cv::Mat _mask = _maskL | _maskG;         cv::Mat __mask = cv::Mat::ones(_mask.size(), _mask.type());        __mask = __mask - _mask;        mask = __mask;    }

以下是 代码 的解释:

  1. 首先,创建一个与currentFrame.mImMask图像大小相同的cv::Mat对象 _maskL,并将其初始化为全1(白色)的图像。
  2. 然后,通过减去currentFrame.mImMask图像,将该图像中的前景区域(非零像素)置为0,背景区域(零像素)保持为1。结果存储在 _maskL 中。
    免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空