# SLAM程序阅读（第8讲 半稠密直接法）

```struct Measurement
{
...
};
inline Eigen::Vector3d project2Dto3D ( int x, int y, int d, float fx, float fy, float cx, float cy, float scale )
{
...
}
inline Eigen::Vector2d project3Dto2D ( float x, float y, float z, float fx, float fy, float cx, float cy )
{
...
}
bool poseEstimationDirect ( const vector<Measurement>& measurements, cv::Mat* gray, Eigen::Matrix3f& intrinsics, Eigen::Isometry3d& Tcw );
class EdgeSE3ProjectDirect: public BaseUnaryEdge< 1, double, VertexSE3Expmap>
{
...
};```

```if ( index ==0 )
{
// 对第一帧提取FAST特征点
vector<cv::KeyPoint> keypoints;
cv::Ptr<cv::FastFeatureDetector> detector = cv::FastFeatureDetector::create();
detector->detect ( color, keypoints );
for ( auto kp:keypoints )
{
// 去掉邻近边缘处的点
if ( kp.pt.x < 20 || kp.pt.y < 20 || ( kp.pt.x+20 ) >color.cols || ( kp.pt.y+20 ) >color.rows )
continue;
ushort d = depth.ptr<ushort> ( cvRound ( kp.pt.y ) ) [ cvRound ( kp.pt.x ) ];
if ( d==0 )
continue;
Eigen::Vector3d p3d = project2Dto3D ( kp.pt.x, kp.pt.y, d, fx, fy, cx, cy, depth_scale );
float grayscale = float ( gray.ptr<uchar> ( cvRound ( kp.pt.y ) ) [ cvRound ( kp.pt.x ) ] );
measurements.push_back ( Measurement ( p3d, grayscale ) );
}
prev_color = color.clone();
continue;
}```

```if ( index ==0 )
{
// select the pixels with high gradiants
for ( int x=10; x<gray.cols-10; x++ )
for ( int y=10; y<gray.rows-10; y++ )
{
Eigen::Vector2d delta (
gray.ptr<uchar>(y)[x+1] - gray.ptr<uchar>(y)[x-1],
gray.ptr<uchar>(y+1)[x] - gray.ptr<uchar>(y-1)[x]
);
if ( delta.norm() < 50 )
continue;
ushort d = depth.ptr<ushort> (y)[x];
if ( d==0 )
continue;
Eigen::Vector3d p3d = project2Dto3D ( x, y, d, fx, fy, cx, cy, depth_scale );
float grayscale = float ( gray.ptr<uchar> (y) [x] );
measurements.push_back ( Measurement ( p3d, grayscale ) );
}
prev_color = color.clone();
continue;
}```

↑稀疏直接法

↑半稠密直接法

0 条评论

• ### ASP.NET Core使用Docker-Compose实现多容器应用部署

ASP.NET Core使用Docker-Compose容器编排实现多容器应用部署

• ### 【面试】必问的 Spring IOC，要看看了！！！

IOC 和 DI 、DL 的关系（这个 DL，Avalon 和 EJB 就是使用的这种方式实现的 IoC）：

• ### Node.js 服务 Docker 容器化应用实践

本篇不会讲解 Docker 命令的使用、安装等，因为在之前一篇文章 【一文零基础教你学会 Docker 入门到实践

• ### DevOps 系统的三个变迁

把开发和运营作为整体来看待的DevOps工程思想在逐步深入人心，本文探讨了DevOps的起源和发展历程，从基于物理机/独立虚机的部署，到基于IaaS的部署，再到...

• ### IDEA一键部署SpringBoot到Docker，这个骚操作你会了吗？

IDEA是Java开发利器，springboot是Java生态中最流行的微服务框架，docker是时下最火的容器技术，那么它们结合在一起会产生什么化学反应呢？

• ### FFmpeg里的Bitstream Filter

ffmpeg -i input.mp4 -codec copy -bsf:v h264_mp4toannexb output.ts

• ### 【Taro】363- 玩转 Taro 跨端之 flex 布局篇

Taro 是一套遵循 React 语法规范的跨平台开发解决方案，但是目前当我们使用 Taro 的时候，在不同平台上的开发体验还有不一致的地方，所以我们也都期待有...

• ### 云原生计算对这三个热门市场的影响

云原生计算可能是当今企业IT中最重要的趋势。从本质上讲，云原生技术将云计算的优势扩展到整个IT领域，其中包括内部部署技术和边缘计算。

• ### ffmpeg常用命令及解释

-c -c:v -c:a 设置音视频codec，帮助见ffmpeg -encoders