- 博客(220)
- 资源 (2)
- 收藏
- 关注
原创 针孔相机模型原理&坐标系辨析&内参标定流程&内参变换
针孔相机的内参标定针孔相机原理真空相机模型图片的伸缩和裁剪变换内参标定———非线性优化张正定标定详细原理(含公式推导)通过多张棋盘格照片完成相机的内参标定流程(C++代码)其他工具箱相机分为短焦镜头和长焦镜头,短焦镜头看到的视野更广阔,同样距离大小的一颗树,在短焦相机中所占的像素个数较少。长焦镜头看到的视野较窄,能看的更远。因为同样距离大小的一棵树,在长焦距镜头中的像素个数更多;同一款芯片,短焦距fov大,长焦fov小。针孔相机原理真空相机模型要搞明白针孔相机模型,首先需要明确世界坐标系OXwY
2024-04-24 23:24:21 705
原创 基于ros的相机内参标定过程
本篇文章用于记录基于ROS系统的balser相机的内参标定流程,使用的是balser 1920-40gc相机和computar-C镜头。相机帧率42fps, 分辨率2.3MP, 感光芯片IMX249, 镜头焦距8mm。
2024-04-09 23:28:18 754
原创 ICP配准算法
配准算法就是通过迭代完成两个点集的旋转矩阵RRR和平移矩阵TTT的迭代求解。数学定义如下:给定源点集PPp1p2pnpi∈RmPPp1p2...pnpi∈Rm,和目标点击Qq1q2qnqi∈RmQq1q2...qnqi∈Rm。两个点集之间存在着旋转RRR和平移ttt的转化关系,构建如下损失函数(点与点在某个尺度上的距离),ERt1n∑。
2024-04-07 20:59:49 746
原创 激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍
激光雷达和相机联合标定工具论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9564700github地址: https://github.com/acfr/cam_lidar_calibrationyutou视频安装讲解:https://www.youtube.com/watch?v=WmzEnjmffQU标定过程参考链接: https://blog.csdn.net/weixin_41681988/article/deta
2024-04-07 01:09:58 684
原创 点云特征描述子
上篇文章介绍了2D图片和3D点云中的特征点提取算法,通过ISS算法可以得到3D点云的特征点。那么一簇点云中的若干特征点怎么表征才能最大限度的代表这簇点云呐?这就是特征描述子的作用。本篇将从ISS特征点提取算法入手讲解PFH,FPFH和SHOT三种特征描述子。什么是特征描述子?特征描述子是用于描述特征点周围区域特征的向量或者特征值集合。在图像处理、计算机视觉和点云处理等领域,特征描述子用于表征图像、点云或者其他数据中的局部特征信息,通常用于匹配、识别和跟踪等任务。特征描述子需要具备的性质。
2024-04-07 01:03:34 974
原创 特征提取算法
Harris角点检测算法是一种经典的图像特征检测算法,用于在图像中检测角点,即具有显著变化的位置,暂时可以理解为角点(Corner点)。一张图片中的点,在某个尺度上进行划分,可以划分为"flat"点,“edge"点和"corner"点,这三种点的直观理解参见下图:直观上来理解,给你一张图,让你来标出你认为的几个"独特"点,我想大概率你会标出与周围邻域内像素点的“颜色"或者"形状"反差较大的点吧。这里用到的“颜色“和“形状“就是上文说的尺度。在Harris算法中,也是这种思想,记像素点xy。
2024-04-06 22:02:50 855
原创 各种拟合算法整理
本篇将介绍最小二乘法(Least Square)、霍夫变换(Hough Transform)和RANSAC(random sample consensus)算法的原理、应用和代码。如果已经知道了一组可靠的点,可以直接使用最小二乘法完成拟合;如果点集中包含少量的噪声,建议使用加强版的最小二乘法,霍夫变换以及RANSAC算法;如果点集中包含大量噪声,推荐使用霍夫变换和RANSAC算法。
2024-04-06 02:55:15 805
原创 各类聚类算法整理
本篇将介绍整理各种聚类算法,包括k-means,GMM(Guassian Mixture Models, 高斯混合),EM(Expectation Maximization,期望最大法),Spectral Clustering(谱聚类),Mean Shift(均值偏移)和DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
2024-04-05 20:03:22 1216
原创 各种滤波算法
这里整理了一些滤波算法,比如用于噪声点去除的Radius Outlier Removal和Statistical Outlier removal;用于降采样的voxel grid downsample,Farthest Point Sampling和Normal Space Sampling;用于上采样和平滑的Bilateral Filter;
2024-04-04 23:16:08 1022
原创 法向量估计
假设点P为这组点的中心,只要求所有点到点P的切平面的距离的L2范数最小,就说明这个切平面最接近这簇点的表面形状。为什么最小特征值对应的特征向量即为法向量方向。这里给出使用PCA求解的步骤和代码。是一组输入向量的去中心化向量。
2024-04-04 20:00:31 1384
原创 PCA算法
Rayleigh商可以用来估计矩阵的特征值,并在特征值问题的研究中具有重要的应用。主要用于数据的降维,通过降维可以用较为简单的特征来代替原来的特征,在分类任务中可以使用PCA算法进行特征降维,然后减小计算量;Σ 是一个m×n的对角矩阵,对角线上的元素称为奇异值(Singular Value),按照大小排列。非对角线元素均为零。综上所述,奇异值的大小反映了数据在不同方向上的变化程度和重要性,对于理解数据的结构、进行数据降维和特征选择具有重要的意义。,它的特征值是实数,且对应于不同特征值的特征向量是正交的。
2024-04-01 23:46:15 980
原创 单例九品--第八品[可用的设计]
使用引用代替指针• 方法1:将原始指针封装到类内部,使用函数提供引用接口• 方法2:使用 placement new
2024-03-10 11:37:54 894
原创 RO2用法记录
tf2_ros.transformbroadcaster是一个用于发布TF2变换消息的Python类,通常与ROS一起使用。TF2变换是ROS中一个常用的机制,用于描述不同坐标系之间的变换关系。使用tf2_ros.transformbroadcaster可以轻松地发布TF2变换消息,以便其他ROS节点可以使用它们。
2024-02-29 10:29:39 378
原创 shell脚本用法小记
表示某个ros节点传入了四个参数,如果第3个参数为空(就是说参数列表查长度为2),就是一种响应。如果其他情况,是其他的响应方式。在shell 脚本中, -z 是一个选项,用于判断字符串是否为空。
2024-02-21 17:34:32 606
原创 c++的一些陌生用法记录
c++的一些陌生用法记录1. 完美转发std::forward<decltype(PH1)>(PH1)1. 完美转发std::forward<decltype(PH1)>(PH1)
2024-02-21 13:43:35 352
原创 __call__函数的用法
来使其实例对象可调用,就像调用普通的函数一样。当你在实例对象后面加上括号并传递参数时,Python 会自动调用这个对象的。方法,该方法接受一个参数 x 并执行一些操作。当我们通过实例对象 callable_obj 调用它时,实际上是在调用。方法不是必需的,类并不需要实现这个方法。实现函数式编程: 将对象实例像函数一样使用,可以支持一些函数式编程的概念。方法中实现动态行为,可以使对象的调用方式更加灵活。在 Python 中,类可以通过定义特殊方法。方法可以在多次调用之间保持状态。
2023-08-05 12:39:16 230
原创 自动驾驶域控制器
自动驾驶的域控制器接口比较多,有摄像头、激光雷达、毫米波雷达、超声波雷达传感器,用于定位的IMU,用于车联网的V2X模块,用户底盘线控。常用的软件架构包括了操作系统,中间件和应用层AI算法三个层次。硬件部分分为三个部分。
2022-10-09 10:53:14 2454
原创 记录一个错误,我不知为什么错了
除了官方解法以外,我是用这种思路,出现问题在队列中使用pair进行排序的时候,这段代码在输入数据都是个位数的时候成功运行;就是在位数不为零的时候出错;明天再看到底什么问题;
2022-09-15 21:43:52 140
原创 python中列表,元组和字典的区别
字典是通过散列表或说哈希表实现的。也就是说,字典也是一个数组,但数组的索引是键经过哈希函数处理后得到的散列值。哈希函数的目的是使键均匀地分布在数组中,并且可以在内存中以O(1)的时间复杂度进行寻址,从而实现快速查找和修改。由于不同的键可能具有相同的哈希值,即可能出现冲突,高级的哈希函数能够使冲突数目最小化。如果使用的是一体式结构,元素存储区和储存表信息区以连续的内存地址方式安排在一块储存里,这就会导致在内存扩充的时候将整个顺序表(信息表储存区和元素储存区)整体迁移,这就导致列表对象的地址发生了变化;
2022-09-13 16:15:54 1184
原创 c++的静态成员和静态成员函数
如果有n个同类的对象,每个对象都分别有自己的数据成员,不同对象都有不同的值;但是有些情况需要多个对象共同维护一个变量,这就引入了静态数据成员来实现数据共享;静态成员(数据成员,成员函数)属于类,并属于对象;随意在类外使用类内定义的数据数据成员或者成员函数的时候,可以直接通过类名来用。静态成员不随着对象的建立而分配空间,也不随着对象的撤销而释放;静态成员是在程序开始运行的时候被分配空间,到程序结束的时候才释放空间;全局变量也可以实现上边的需求,但是全局变量全局变量的安全性得不到保证;
2022-09-12 20:33:50 239
原创 c++的多态和虚函数
直观的说,就是向不同的对象发送一个消息,不同的对象在接收消息以后有不同的行为;函数重载和运算符重载都是多态现象;多态分为静态多态和动态多态;静态多态是通过函数重载实现的,比如收函数重载和运算符重载;静态重载要求程序编译的时候就知道调用函数的信息,在编译的时候就要知道调用那个函数;静态多态又称为编译时的多态性;动态多态是在运行过程中才动态的确定操作所针对的对象,又称为运行时的多态性;动态多态性是由虚函数实现的动态多态性研究的问题。
2022-09-12 17:49:58 440
原创 浅聊python函数装饰器和闭包
装饰器是可以调用的对象,其参数是另一个函数(被修饰的函数),被修饰的函数进入装饰器以后有两种处理方式;上述例子就是修饰器的最用,上述例子执行完毕得到的tatget函数不一定是原来的target函数了,而是被decorate修饰以后的函数;清晰可见,这里的调用main函数以后应该是先输出"start",但是这里很明显是直接西安调用了修饰器函数echo,所以装饰器函数在加载模块的时候会立即执行;紧接第三部分,闭包是延伸了作用域的函数,包含了函数定义体中的应用,但是不在定义体中定义的非全局变量;
2022-09-11 22:56:30 157
原创 python生成器
生成器中有一个函数yield,用于函数返回值,这里不适用return;yield 除了可以返回相应的值,还有一个更重要的功能,即每当程序执行完该语句时,程序就会暂停执行;生成器最明显的优势就是节省内存空间,即它不会一次性生成所有的数据,而是什么时候需要,什么时候生成。
2022-09-11 18:26:57 204
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人