自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从零开始学习Slam|ICP原理与应用

ICP全称Iterative Closest Point,翻译过来就是迭代最近点。ICP在点云配准(registration)领域应用的非常广泛.

2025-04-02 21:17:02 600

原创 G2o顶点与边编程总结

G2o的顶点与边属于 HyperGraph 抽象类的继承OptimizableGraph 的继承。BaseVertex<D,T> D是预测点的维度(在流形空间的最小表示)T是待估计vertex的数据类型,比如用四元数表达三维旋转的话,T就是Quaternion 类型。

2025-03-14 18:07:28 401

原创 G2o顶点编程

它将优化问题建模为一个图,图中的节点表示优化变量(顶点),边表示变量之间的约束关系(误差项)。表示3D点与相机之间的投影关系,每条边连接一个3D点顶点和一个相机位姿顶点,表示该3D点在相机成像平面上的投影观测。边的优化目标是最小化观测值(图像上的2D点)与 根据当前估计的相机位姿和3D点投影得到的2D点之间的误差。给定一组世界坐标系下的3D点(p3d.txt)以及它在相机中对应的坐标(p2d.txt),以及相机的内参矩阵。边的优化就是最小化 实际得到的相机位姿与根据3D点投影得到2D坐标的误差。

2025-03-12 20:15:57 349

原创 从零开始学习Slam--数学概念

最直观的理解就是,给定群中的任意两个元素,它们经过群操作后得到的结果仍然是这个群的一个合法元素,而且这个操作需满足一系列的代数性质。具体来说,李括号运算是一个从李代数的两个元素到李代数的映射,记作 ([X, Y]),其中 (X) 和 (Y) 是李代数中的元素。具体到李代数与李群之间的关系,李代数可以被看作李群在单位元(即李群的恒等元素)的切空间,李括号反映了李群上流形局部的非交换性,即群操作在局部上的非交换性质。旋转矩阵属于特殊的正交群,即SO(n),这里n通常是3,所以SO(3)就是三维旋转矩阵的群。

2025-03-04 20:24:18 877

原创 从点云到网格--从零开始学习Slam

本文是学习笔记,原文来自点云通常是三维的,包含大量无序的点。网格生成的目标是将这些点连接成三角面片或四边形面片,形成连续的表面。点云网格化就是用点云生成网格,最后得到的是一个连续(相对于前面的离散点)的表面。如果再加上纹理贴图,就能得到和真实物体一样的三维模型了。

2025-02-21 18:02:37 924 2

原创 SLAM-g2o学习

本文是学习笔记,原文来自。

2025-01-10 19:10:33 1152 2

原创 一些问题解释

一. 全连接层的作用全连接层(Fully Connected Layer,简称 FC 层)是神经网络中常见的一种层,主要用于将上一层的输出转换为目标输出。其主要作用如下:特征提取与组合全连接层通过权重矩阵对输入的特征进行线性变换,同时添加偏置项,再经过激活函数的非线性变换。这一过程可以将上层提取的特征重新组合,以捕获更加抽象或全局的信息。特征映射到目标空间全连接层的输出维度通常与具体任务相关:在分类任务中,全连接层的输出维度通常等于类别数,表示每个类别的得分或概率。

2025-01-06 16:51:21 607

原创 点云入门|KDTree 与 平滑法线估计

首先,放一个点云官网的的网址,本篇文章仍然是对教程的学习和复盘。

2024-12-25 17:23:47 1035

原创 点云融合代码学习

例如,如果深度图的单位是毫米,而你的计算需要以米为单位表示深度值,那么 camera.scale 的值可能是 1000。深度图中的像素值(如d)可能需要乘以一个比例因子(即camera.scale)才能得到真实的深度值。深度图是深度传感器或深度相机生成的二维图像,其中每个像素的值表示相机到场景中对应点的距离。相机内参用于从空间点(X, Y, Z)投影到图像平面上的像素坐标(u, v)一般由焦距,主点坐标,缩放因子,与附加内参(径向畸变,切向畸变)等构成。函数中有下面的代码,作用是由图像坐标映射到空间坐标。

2024-12-16 20:32:43 1025

原创 ncnn-预备知识

NCNN 对 AVX 的支持NCNN 是一个高效的神经网络推理框架,主要针对移动端优化,但也支持桌面平台(x86 架构)。在桌面平台上,NCNN 会利用 CPU 的 SIMD 指令集(包括 AVX 和 AVX2)进行加速。如果 CPU 支持 AVX 或 AVX2,NCNN 会在编译时和运行时自动启用相关优化,从而提升计算性能。NCNN_AVX=ON: 启用 AVX 优化。如果 CPU 支持 AVX2,编译时会自动利用 AVX2 指令集。确保编译环境中启用了支持。

2024-12-03 14:31:01 449 1

原创 hello,点云

亲爱的观众朋友们大家好,这里是爱说标准c语言的老嫂子。。。公司的项目终于快做完了,我又可以学自己的东西了( •̀ ω •́ )y~。今天把plc库下载并安装了,准备正式入门到放弃三维。

2024-11-15 18:29:06 815

原创 点云基础知识储备(复习)

一个点的齐次坐标可以表示为(x,y,1),这种表示方法具备以下特征具有标量乘法不变性:点(x,y,z)与(kx, ky, kz)实际上表示的是同一个点矩阵表示的便利性:在齐次坐标中,变换一个点可以通过乘以一个变换矩阵来完成表示直线:直线ax+by+c = 0可以表示为齐次坐标中的点(a,b,0),这种表示方式允许我们将点和直线统一在一个框架内,并且可以轻松地转换为其他坐标系统。

2024-11-11 16:42:00 1038

原创 遇到0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突/无可用源【已解决】

例如,只要填充 1 字节即可让 data按 4 字节对齐,所以编译器智能地只插入了 1 个字节的填充,而不增加多余的填充。编译器智能地识别这一需求,计算出插入 1 字节就可以满足对齐要求,而无需插入多余的填充字节(不需要 3 个字节),因为这会浪费空间。在这个示例中,DefaultAlign 结构体的大小为 8 字节,而不是 7 字节,因为编译器在 uint8_t a 和 uint32_t b 之间添加了 3 个填充字节。这个指令结束了之前的对齐设置,恢复为默认的对齐方式。

2024-10-30 15:31:19 1216 2

原创 cv::Mat 成员函数

可以通过 CV_MAT_DEPTH() 和 CV_MAT_CN() 宏来分别获取图像深度和通道数。访问矩阵中 (x, y) 位置的像素值,T 是像素的类型。例如,如果是 8 位的灰度图像,可以使用 img.at(y, x) 来访问指定位置的像素值。elemSize() 返回每个像素的字节大小,等于 channels() * elemSize1()。elemSize1() 返回每个通道的元素大小,以字节为单位,即每个像素在某个通道中占用的字节数。分别代表图像的列数(宽度)和行数(高度),即图像的宽和高。

2024-10-16 11:29:32 359

原创 Yolov5 部分参数解释

2024年,ONNX的最新opset版本通常在17至20之间, 每个opset版本都引入了新的操作或改进现有操作的支持,具体使用的版本取决于你使用的框架和工具链是否支持最新的opset。推理时的原地处理:当你在使用导出的模型进行推理时(通常在 detect.py 或类似文件中),如果在推理过程中使用了 --inplace 参数,这意味着输入图像可以被直接修改。Pad (opset 11):在较早的opset版本中,Pad操作只能使用固定的填充尺寸,后来版本引入了对动态填充的支持。

2024-10-16 09:51:54 654

原创 使用c#制作一个小型桌面程序

创建.NET Framework新项目,将之前生成的dll放在Demo文件夹的bin ->debug或是 release中(看你自己用的什么模式),创建完成后 系统会自动生成一些文件,其中 pch.cpp 先不要修改,pch.h中先导入自己需要用到的库,下面是我的代码。布局完了之后会自动生成Form1.Designer.cs 的窗口设计代码,点击控件按F4 还可以修改他们的属性。完成之后点击生成 就可以在bin中出现的你的.exe文件咯,是不是很简单呀~[狗头]我们还需要一个入口主程序。

2024-09-14 17:02:52 4747

原创 c++多态、数据抽象、数据封装(一)

可以看到上面的代码中 通过虚函数实现了动态链接的操作,虚函数是在基类中使用关键字 virtual 声明的函数。您可能想要在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是您在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。数据封装是指将对象的属性(数据)和方法(操作)绑定在一起,对外隐藏对象的内部状态,只允许通过对象的方法来访问和修改内部数据。有了多态,您可以有多个不同的类,都带有同一个名称但具有不同实现的函数,函数的参数甚至可以是相同的。

2024-09-09 16:38:06 448

原创 yoloseg输出掩码坐标

YOLOv5-seg是一个基于YOLOv5模型的变种,它用于进行图像分割。

2024-09-05 16:10:39 1124 3

原创 从零开始学习SLAM六(单应矩阵)

如果一个平面上的点集经过某种变换后,在另一个平面上形成的新点集仍然保持原来的线性特性(如共线的点仍然共线),那么这种变换就称为单应性变换。平面方程:在讨论单应矩阵时提到的平面方程,通常指的是图像中的某个平面在三维空间中的方程。具体来说,当我们在处理单应矩阵时,我们关注的是两个图像之间对应点的关系,这些点通常位于同一个平面上。x+d=0中的x = (X,Y, Z)指的是三维世界坐标系中的点,世界坐标系是一个固定的参考坐标系,用于描述三维空间中的物体位置和方向。H矩阵的两边是两张图像对应的匹配点对。

2024-08-26 13:43:06 1198

原创 从零开始学习SLAM(五):极几何与极约束

文章参考。

2024-08-20 15:11:52 1171

原创 从零开始学习Slam(四)

1、首先,世界坐标系下有一个三维点Pw2、若世界坐标系到相机坐标系下的变换为旋转矩阵 R 和平移向量t 组成的变换矩阵 T,那么Pw在相机坐标系下的坐标为 Pc = R * Pw + t = T * Pw3、此时的Pc三个分量分别是X, Y, Z,我们需要把它投影到归一化平面Z=1上,这样我们得到了相机坐标系下Pc的归一化坐标 Pc’ = (X/Z, Y/Z, 1)4、用内参矩阵乘以归一化坐标就得到了像素坐标 Puv = K*Pc’

2024-08-15 14:47:55 1186

原创 c++ 引用

当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护。C++ 函数可以返回一个引用,方式与返回一个指针类似。一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。当函数返回一个引用时,则返回一个指向返回值的隐式指针。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。所以说引用变量是一个别名,也就是说,它是。

2024-08-12 19:43:44 406

原创 c++结构

为了定义结构,您必须使用struct语句。...type_name是结构体类型的名称,是标准的变量定义,比如int i;或者float f;或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。下面是声明一个结构体类型Books,变量为book。

2024-08-09 16:55:48 250

原创 c++ 类与对象(一)

Box Box1;// 声明 Box1,类型为 BoxBox Box2;// 声明 Box2,类型为 Box。

2024-08-07 18:03:07 1095

原创 c++ 友元函数

友元函数(Friend function)是指在 C++ 中可以访问类的私有成员(私有变量和私有函数)的非成员函数或者其他类的成员函数。具体来说,友元函数并不是类的成员函数,但却能够访问类的所有成员,包括私有成员。访问控制:虽然友元函数可以访问类的私有成员,但这并不意味着所有的函数都应该声明为友元函数。友元函数破坏了封装性原则,因此应当谨慎使用,仅在确实需要访问私有成员而无法通过公有接口实现时才使用。设计考虑:在设计类时,尽量通过成员函数和成员变量的公有接口来操作对象的状态,避免过多地使用友元函数。

2024-08-01 13:42:17 421 1

原创 c++ 拷贝构造函数

拷贝构造函数的默认生成:如果你没有显式地提供拷贝构造函数的定义,C++ 会为你生成一个默认的拷贝构造函数。这里 obj2 将会通过 obj1 的拷贝构造函数被初始化。拷贝构造函数是一个特殊的构造函数,其参数是同类型的引用,并且用于初始化一个对象,这个对象是传递给它的同类型对象的副本。在这个例子中,当 obj2 通过 obj1 的拷贝构造函数初始化时,拷贝构造函数会被调用,输出 “拷贝构造函数被调用”。以值传递的方式传递对象给函数:如果函数参数是按值传递的,并且参数类型是类类型,那么拷贝构造函数将会被调用。

2024-07-30 15:26:06 577

原创 注意力机制(三)- 空间注意力机制

空间注意力的核心思想是让模型能够聚焦于输入数据中最重要的空间区域关注区域:空间注意力机制使模型能够识别并关注输入图像或文本中的关键区域。权重分配:通过学习一个权重分布,模型可以为输入数据的每个空间位置分配不同的重要性。这些权重通常通过一个神经网络层(如卷积层或全连接层)生成,并经过激活函数(如Softmax)处理,以确保权重之和为1。

2024-07-27 20:26:17 1293

原创 c++ 构造函数与析构函数

本文参考,仅作笔记用。

2024-07-25 14:57:19 977 1

原创 c++类访问修饰符

本文参考,个人笔记用。数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected 称为访问修饰符。(在类里面不写是什么类型,默认是 private 的,如果继承时不显示声明是 private,protected,public 继承,则默认是 private 继承)。另外,。

2024-07-24 19:58:20 672

原创 n m s

【代码】n m s。

2024-07-21 16:06:12 208

原创 注意力机制(二)-通道注意力机制

书接,我们已经通俗的介绍了 注意力机制的原理,这次我们就来了解一下几个经典的注意力机制网络。

2024-07-21 14:55:31 1196

原创 从零开始学习SLAM(三)

Slam学习。

2024-07-04 18:14:39 1407

原创 【学习】开发板接口

工作用到机器的开发板 有如上三个接口。最右是仿真器,中间是RS232串口,最左是电源线。

2024-06-26 15:17:57 1327

原创 c++ 线程安全与线程管理

C++11引入了标准库中的多线程支持,包括std::thread类和各种同步机制互斥锁std::mutex : 互斥锁用于保护共享资源,确保同一时间只有一个线程能够访问该资源,以防止数据竞争。条件变量std::condition_variable : 条件变量用于线程之间的通信,允许一个或多个线程等待某个条件(或者事件)的发生,而另一个线程则可以通知这些等待的线程该条件已经满足。原子操作std::atomic : 原子操作用于无锁编程,提供对基本数据类型的原子读写操作,防止数据竞争而无需显式的锁机制。

2024-06-25 18:24:20 617

原创 c++字典

如果更关注性能且不需要有序性,可以选择std::unordered_map。在C++中,“字典”通常指的是std::map或std::unordered_map,它们是标准库中提供的关联容器,用于存储键值对。std::unordered_map:键值对无序,但查找、插入和删除速度更快,适用于不需要顺序的场景。例如,如果你需要按字母顺序遍历元素。使用 std::map std::map 是一种有序的关联容器,键值对按键排序。使用 std::unordered_map std::unordered_map。

2024-06-24 17:24:49 1554

原创 c++ 矩阵应用

选择适当的场景:固定大小的矩阵:如果矩阵的大小在编译时已知且不会变化,使用二维数组可能更合适,因为它更简单和直接。动态大小的矩阵:如果矩阵的大小需要在运行时动态调整,或者需要使用std::vector提供的其他灵活性和算法支持,那么std::vector更适合,尽管在性能上可能会稍有损失。性能要求:如果性能是关键问题,尤其是对于大型数据集和复杂的数学运算,可以考虑使用专门的线性代数库如Eigen或Armadillo,它们在性能和功能上都有优势。

2024-06-17 21:00:11 1259

原创 【c++】列表的增删改查

C++ 标准库提供了多种容器,用于不同的需求和使用场景。

2024-06-12 21:03:28 739

原创 从零开始学习Slam-旋转矩阵&旋转向量&四元组(二)

本文参考:计算机视觉life 仅作笔记用书接上回,上回不清不楚的介绍了旋转矩阵&旋转向量和四元组现在回顾一下重点:本着绕谁谁不变的变则假设绕z轴旋转θ,旋转矩阵为:再回顾一下旋转向量的表示以及这个基本记不住的罗德里格斯公式,记不住也没事:已知旋转矩阵定义是沿着Z轴旋转45°。请按照该定义初始化旋转向量、旋转矩阵、四元数、欧拉角。请编程实现:1、以上四种表达方式的相互转换关系并输出,并参考给出的结果验证是否正确。2、假设平移向量为(1,2,3),请输出旋转矩阵和该平移矩阵构成的欧式变换矩阵,并根

2024-05-31 17:49:25 435 1

原创 注意力机制原理

注意力机制最早是由神经科学家 Donald Olding Hebb 在 1949 年提出的。Hebb 观察到,大脑中的突触连接强度会随着两个神经元的活动的相互关联性而增强。他提出了“细胞之间的联结,就是心理之间的联结”的著名原则,即被称为“赫布学习规则”。在深度学习领域,注意力机制在 2014 年由 Bahdanau 等人首次引入到神经网络机器翻译模型中,这种模型也被称为“注意力机制编码器-解码器模型”。

2024-05-30 14:32:14 1675 2

原创 with关键字

在 PyTorch 中,torch.no_grad() 返回一个上下文管理器,当使用 with torch.no_grad(): 语句时,PyTorch 会在进入 with 代码块时禁用梯度计算,并在退出代码块时重新启用梯度计算(如果之前已经启用)。在这个例子中,with torch.no_grad(): 创建了一个上下文,在该上下文中梯度计算被禁用。在这个示例中,with torch.no_grad(): 创建了一个上下文管理器,在这个代码块内执行的所有操作都不会计算梯度。() 方法来实现的。

2024-05-24 15:50:45 378

空空如也

空空如也

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

TA关注的人

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