自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 【Orb-Slam3学习】 特征匹配函数的目的与分类

特征匹配的目的大致有3个:1、特征点最朴素的匹配方式的暴力匹配,但是暴力匹配过于耗时。从而在Orb-Slam3中为快速进行特征点匹配创建了多个特征匹配函数。此目的采用缩小特征点搜索范围达到,具体由以下三种方式达到: 1、利用地图点投影至当前帧,缩小搜索范围。搜索半径有特征点金字塔尺度相关联; 2、利用词袋模型搜索,每个描述子转化为单词后会包含一个属性,叫作单词所属的节点ID,这个节点ID 距离叶子的层级就是 level up。在进行特征匹配时,只在该单词所属的节点

2024-08-24 13:44:59 715

原创 【Orb-Slam3学习】 ORBextractor类主要成员函数调用关系

主要是介绍一下ORBextractor类的函数简要流程以及调用关系。

2024-08-21 20:33:03 605

原创 【视觉SLAM】 十四讲ch8习题

视觉SLAM十四讲CH8习题解答。

2024-08-08 14:12:53 1290 1

原创 【视觉SLAM】 十四讲ch7习题

本文主要内容是《视觉SLAM十四讲》(第二版)第7章的习题解答,并介绍了在解答习题中的一下思考和总结的经验。除ORB特征点外还存在大量优秀的特征点,例如:SIFT (Scale-Invariant Feature Transform):对尺度和旋转不变,能够在不同的图像变换中识别关键点。SURF (Speeded-Up Robust Features):比SIFT更快,具有良好的旋转和尺度不变性。

2024-08-05 14:39:57 1052

原创 【视觉SLAM】 G2O库编写步骤介绍

G2O以稀疏优化器(SparseOptimizer)为核心,分为图的构建与求解器构建两部分,分别对应该图的上下两部分。

2024-08-01 15:07:50 949 1

原创 【视觉SLAM】 十四讲ch6习题

《视觉SLAM十四讲》第六章的习题解答

2024-07-24 20:34:11 1142

原创 【视觉SLAM】 十四讲ch5习题

介绍了《视觉SLAM十四讲》的ch5习题

2024-07-18 16:42:53 1213

原创 【OpenCV】 相机标定 calibrateCamera

本篇文章通过《学习Opencv3》的18.01例子来介绍相机标定流程,本文不涉及OpenCV calibrateCamera()函数的数学原理。如果想了解数学原理请参考《学习Opencv3》p578或者 张正友相机标定法原理与实现。本篇文章将会介绍《学习Opencv3》的18.01例子中的几个重点函数,并展示详细注释的代码,以及标定时注意事项。

2024-07-17 20:14:22 4107 3

原创 【Qt】 FFmpeg+Qt windows 32位或者64位环境搭建

目前Ffmpeg官网下载的均为64位编译的,这要求我们采用的Qt creator也采用64位编译器。但是仍存在部分用户采用32位编译器,所以这部分用户需下载32 Ffmpeg。根据使用的编译器位数下载ffmpeg版本,之后配置操作一致。

2024-07-16 09:33:38 1593

原创 【流媒体】 通过ffmpeg硬解码拉流RTSP并播放

目前RTSP拉流是网络摄像头获取图片数据常用的方法,但通过CPU软解码的方式不仅延时高且十分占用资源,本文提供了一种从网络摄像头RTSP硬解码的拉流的方法,并且提供python代码以便从网络摄像头获取图片进行后续算法处理。

2024-07-13 09:37:05 6386 3

原创 【CUDA】 Trust基本特性介绍及性能分析

Thrust 是一个实现了众多基本并行算法的 C++ 模板库,类似于 C++ 的标准模板库(standard template library, STL)。该库自动包含在 CUDA 工具箱中。这是一个模板库,仅仅由一些头文件组成。在使用该库的某个功能时,包含需要的头文件即可。该库中的所有类型与函数都在命名空间thrust中定义,所以都以thrust::开头。用命名空间的目的是避免名称冲突。例如,Thrust中的thrust::sort和STL 中的 std::sort 就不会发生名称冲突。

2024-07-10 16:21:46 1641 7

原创 【IMU】 温度零偏标定

通过改变温度,得到对应温度下的标定参数,用上面的多项式模型进行拟合即可。如果模型里有变温率的因素存在,而拟合时只提供一组升温的数据,那效果不会太好,因为提供的数据里,每一个温度点只对应一个变温率。构建方程时,各未知量的系数要提供足够的变化,这个方程才可解,才能解的好,或者说,才能正确辨识。IMU的零偏随着温度的变化而变化,在全温范围内形状各异,有些可能是单调的,有些可能出现拐点。因此,要反复升温降温,而且使用不同的升降温速率,提供丰富变化的数据,才是一个好的样本数据。温度误差模型,B是bias,T是温度,

2024-07-09 21:04:28 1596 6

原创 【IMU】 椭球拟合标定加计Bias、Scale

MESE IMU中,x,y,z轴的度量单位并不相同,假设各轴之间相互直。加计静止状态(也就是只受重力的状态下),各个姿态只受重力的,x,y,z轴值(假设x,y,z轴相互垂直并且度量单位都一致,如三轴的度量单位都是2000(1g),量程固定的情况下),在三维空间中,重力点都在一个球面上,但各轴之间的度量单位都会有偏差,所以各姿态重力点都落在一个椭球面上,椭球的中心,就是加速度的偏移量,也就是校准值。图1为标定原理公式一个椭球公式A、B、C,X0、Y0、Z0对应:Scale参数(比例因子)、Bias参数。

2024-07-08 13:42:21 1010 1

原创 【IMU】 确定性误差与IMU_TK标定原理

无转台的现场标定是利用模观测值原理使用该模型标定加速度计标定后加速度矢量虽然能分布在以重力矢量为模为半径的球面上,但是可能和重力不重合。原因:加计标定以矢量进行约束时,其针对各分量的标量约束较弱。改进:标定时多次数据标定,取平均值。或者采用。

2024-07-07 18:29:59 1348

原创 【CUDA】 扫描 Scan

Kogge-Stone's Algorithm最初是为设计快速加法电路而发明的。该算法如今被用于设计高速计算机算术硬件。图1是该算法的示例。图1Kogge-Stone's Algorithm,所有线程将迭代直到log2N步骤。Kogge-Stone's Algorithm完成Scan操作所需的工作量接近Nlog2N。Kogge-Stone's Algorithm将需要大约Nlog2NP的时间步骤才能完成(P 执行单元的个数)。

2024-07-06 16:21:39 1132

原创 【CUDA】 矩阵乘法 matMatMul

执行矩阵乘法的基础方法是使用单个线程执行输出矩阵的单个元素乘法。这意味着所需的线程数等于输出矩阵中的元素数。线程排列在二维网格中,每个线程分配一个唯一的索引。线程的索引用于访问输入矩阵的相应行和列。执行行和列的乘法,结果存储在输出矩阵的相应元素中。

2024-07-05 17:43:50 2098

原创 【CUDA】 矩阵乘向量 matVecMul

执行矩阵-向量乘法的基础kernel是使用单个线程执行输出向量的单个元素的乘法。这意味着所需的线程数等于输出向量中的元素数。线程以一维网格排列,每个线程被分配一个唯一的索引。线程的索引用于访问输入矩阵的对应行。对行和向量进行乘法操作,结果存储在输出向量的对应元素中。在这种基础kernel中,每个线程将加载整个输入向量。这并不高效,因为输入向量被多次加载。为了避免这种情况,我们可以使用一个tile将输入向量存储在共享内存中。tile是一个大小等于块中线程数的一维数组。

2024-07-04 11:20:04 1700

原创 【CUDA】 归约 Reduction

Reduction算法从一组数值中产生一个单个数值。这个单个数值可以是所有元素中的总和、最大值、最小值等。图1展示了一个求和Reduction的例子。

2024-07-03 13:49:57 1634

原创 【视觉SLAM】 十四讲ch4习题

视觉slam十四讲作为经典书籍,习题解答博客很多,避免重复工作,1~4和8题提供了其它博客连接。5、6、7笔者重新推导一遍并整理一些推到细节,提供了推到过程图片。

2024-07-02 14:57:16 719 3

原创 【CUDA】 由GPGPU控制核心架构考虑CUDA编程中线程块的分配

由于典型的GPGPU只有小的流缓存,因此一个存储器和纹理读取请求通常需要经历全局存储器的访问延迟加上互连和缓冲延迟,可能高达数百个时钟周期。与CPU通过巨大的工作集缓存而降低延迟不同,GPU硬件多线程提供了数以千计的并行独立线程,这些线程可以在一个多处理器内部充分利用数据局部性共享数据,同时利用其他线程的计算掩盖存储访问延时。在一个线程等待数据和纹理加载时,硬件可以执行其他线程。尽管对于单个线程来说存储器访问延迟还是很长,但整体访存延时被掩盖,计算吞吐率得以提升。

2024-07-01 11:08:51 2022

原创 【CUDA】 彩色图灰度化 Image To GrayScale

将图像转换为灰度是图像处理中常见的操作。它被用来将彩色图像转换为灰度图像。使用2D线程层次结构来进行灰度转换。y维度中的线程数量对应图像的高度。x维度中的线程数量对应图像的宽度。每个维度中线程块的数量,等于像素数量除以线程块的线程数。

2024-06-29 15:05:06 710

原创 【CUDA】 直方图 Histogram

为了并行计算直方图,我们需要将给定范围内数据分成块,并将每个块分配给一个线程。每个线程将使用原子操作来更新直方图。使用这种方法,我们可以并行地计算一组数据的直方图。然而,这种方法有一个主要缺点。全局内存上的原子操作具有较高的延迟。这意味着线程将等待原子操作完成,然后才能继续。这将导致GPU的利用率降低。一个解决方案是在共享内存上使用原子操作。这将减少原子操作的延迟。每个块将在共享内存中初始化和更新自己的直方图。然后线程将使用全局内存上的原子操作来更新最终直方图。这种技术称为私有化

2024-06-28 21:16:52 1274

原创 【STL】浅析Vector

Vector是封装了动态大小数组的顺序容器。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,vector是一个能够存放任意类型的动态数组。本文首先介绍了vector容器特点,然后在Code示例以注释方式介绍vector初始化、vector.size()、vector.front()、vector.back()、vector.data()等操作。具体操作演示请阅本文Code示例。

2024-06-27 16:11:35 498

原创 【视觉SLAM】十四讲ch3习题

由于笔者查找的罗德里格斯公式的推导,符号都比较混乱,笔者重新书写一遍仅供参考。

2024-06-26 21:25:55 989

原创 【STL】浅析Array

​本文是对Array容器的基本操作初探。std::array特点std::array是C++容器库提供的一个固定大小数组的容器。其与内置的数组相比,是一种更安全、更容易使用的数组类型。std::array是具有固定大小的数组。因此,它并不支持添加或删除元素等改变大小的操作。也就是说,当定义一个array时,除了指定元素类型,还要指定容器大小。

2024-06-25 14:23:24 347

原创 【CUDA】 2D卷积 2D Convolution

总的来说,常量内存方法的性能略优于基本方法。这是因为mask的尺寸较大,硬件无法轻松地将其缓存到L2缓存中。这为常量内存方法带来了优势。mask:7 × 7 、11 × 11时共享内存方法表现不佳,目前考虑加载共享内存时mask越大,加载的冗余元素越多。需要额外的内存复制和数据传输操作来将数据从全局内存加载到共享内存中,增加了数据传输的开销;理论上2D空间比1D空间更适合共享内存。这是因为2D空间不容易缓存到L2缓存中。只是kernel的复杂性增加会减慢速度,共享内存相对于基本方法的优势并不是那么大

2024-06-24 19:43:58 1426

原创 【CUDA】 1D卷积 1D Convolution

基本方法、常数存储器、共享存储器和Caching基本方法在基本方法中,卷积是通过逐次访问数组并为每个元素计算卷积来计算的。这种方法很简单,但效率不高。原因在于卷积操作需要多次访问输入数组和mask (掩膜,卷积核,掩码)。常量存储器为了避免多次访问mask,我们可以将mask的元素存储到常量内存中。这将使硬件能够将mask元素缓存到L2缓存内存中。这将大大减少全局内存访问,并提高kernel的性能。共享存储器共享存储器方法利用共享内存缓存输入数组。由于卷积操作多次访问相同的输入元

2024-06-23 19:47:04 1748

原创 【STL】STL六大组件概述

STL六大组件的交互关系:Container通过Allocator取得数据储存空间,Algorithm 通过 lterator存取 Container 内容,Functor 可以协助 Algorithm完成不同的策略变化,Adapter可以修饰或套接Functor。

2024-06-22 08:50:53 500

原创 【CUDA】 矩阵加法 Matrix Addition

矩阵加法是线性代数中的一个基本运算,用于将两个大小相同的矩阵相加。加法的结果是一个与输入矩阵大小相同的矩阵。矩阵加法是逐元素进行的,天然适合CUDA并行计算。每个warp以SIMD方式调度线程。这意味着一个warp中的所有线程同时执行相同的指令。为了利用这一特性,同一warp中的线程应访问相邻的内存位置。这就是所谓的合并内存访问。

2024-06-21 11:25:43 1438 2

原创 【CUDA】 GPU与CPU体系结构对比

在面对并行任务处理时,CPU与GPU的体系结构在设计理念上有着根本的区别。设计理念的不同导致CPU和GPU在架构上相差甚远。

2024-06-20 09:03:53 1212 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除