- 博客(33)
- 收藏
- 关注
原创 PSO的改进(小记)
每个个体具有四个邻居的von Neumannn结构。1,种群拓扑角度(拓扑设计:群中所有个体成员之间的连接关系)不带惯性参数的速度更新公式NIV来加速PSO算法的收敛速度。单环转拓扑结构有利于加快局部信息的开发。全联通拓扑结构信息传递最快。用高斯算子对粒子的速度位置进行变异操作。差分算法改进全局搜索能力。
2024-03-25 16:30:42
871
原创 pcl利用kdtree计算点云密度
点云密度挺需要的,很多时候需要知道点云密度才能进行下一步。这里利用kdtree计算点云密度。这里单位写错了,抱歉。
2024-03-24 14:51:13
562
原创 光度立体法的简化求解(已知特殊光源方向)
不过当图片较大的时候,比如4048*4000这种量级的,矩阵很大,速度要10秒,加了openmp也需要2s;上面两式子就是求出的法向量x分量,y分量.这样可以跳过大矩阵求逆相乘的溢出,减少耗时,速度提升很多.如果我们知道一些先验知识,在特定的slant和titls角度,可以简化过程,提升速度(结果在最后)下面是处理4048*4000图片的速度(均加了openmp)那么每个位置(x,y)在四个特殊的角度下,代入朗博公式有。其中,ρ反射率,l是光强。一式加三式,二式加四式有。一式减三式,二式减四式有。
2024-03-19 03:45:00
1031
原创 已知立体空间的三点求平面方程
平面方程ax+by+cz+d=0,求平面方程就相当于求平面的法向量n(a,b,c)和d;显然,法向量和平面上的向量垂直.三点定面,但是这三个点不能共线。
2024-03-18 00:45:00
953
原创 nanoflann和flann速度对比的问题?
20万以下的点云数据,KNN搜索全部点(k=10)时,nanoflann的速度快于flann的速度,但是当数据量40万,百万,千万的时候,nanoflann的速度就慢于flann。有趣的是,如果用半径搜索,我尝试的所有量级,nanoflann都比flann快.数据是点云数据,我尝试了不同量级的点云数据,请问有谁知道为什么吗?
2024-03-14 15:31:10
544
原创 求两向量顺时针/逆时针夹角(修改一下错误,再补充一下代码);
1,利用叉乘,判断两向量顺时针夹角大于180还是小于等于180。1,利用叉乘,判断两向量顺时针夹角大于180还是小于等于180。如果x叉乘y大于零,意味着y在x逆时针180°以内的方向.如果x叉乘y小于零,意味着y在x顺时针180°以内的方向.判断两个二维向量顺时针夹角利用叉乘,点乘,其中。a,b顺时针夹角(弧度):4.71238。如果x叉乘y等于零,意味着x,y共线;a,b逆时针夹角(弧度):1.5708。2,利用点乘,求出两个向量的夹角。2,利用点乘,求出两个向量的夹角。利用二维叉乘判断方向,
2024-03-13 09:00:00
1057
原创 求两向量顺时针/逆时针夹角;
如果叉乘大于零,意味着y在x逆时针180°以内的方向.如果叉乘小于零,意味着y在x顺时针180°以内的方向.判断两个二维向量顺时针夹角利用叉乘,点乘,其中。二维叉乘: 。如果叉乘等于零,意味着x,y共线;利用二维叉乘判断方向,
2024-03-11 09:31:02
1264
1
原创 点云置平:基于点云法向量
normal为法向量,z_normal为置平后的法向量,通过这两个向量计算转换矩阵。将平面点云置平(法向量),方便做一些其他处理,与XOY平面平行。
2024-03-07 09:52:43
548
原创 pcl kdtree radiusSearch 半径搜索
参数:第一个cloudIn->points[i]是搜索点,radius是搜索半径,out_ids是搜索半径内的点的索引,out_dists_square是距离平方。记录所有点搜索半径内的邻居的距离平方。记录所有点搜索半径内的邻居的索引。下面是整个代码,因为要对比flann和nanoflann的建树,搜索的速度,我加了时间,可以删掉。只输出了前十个点的邻居的索引,值,距离的平方。建树跟knn搜索一样,搜索函数变了而已。
2024-03-06 09:56:56
1996
原创 pcl kdtree knn搜索
out_ids记录当前搜索点cloudIn->points[i]的最近的十个点的索引。out_dists_square则记录着十个点到搜索点的距离平方,这里是平方!knn,k=10,查找所有点的十个最近邻。kdtree原理:等以后闲了再说。
2024-03-05 14:29:21
619
原创 已知几对匹配的点,利用TransformationEstimationSVD求转换矩阵,配准点云
有两点云,知道两个点云部分配对好的点,分别放入cloud_in,cloud_out中,可以利用TransformationEstimationSVD直接求转换矩阵.cloudAfter就是cloudFrom经过旋转转换后的点云。
2024-03-04 11:42:19
603
1
原创 平面点云,边界提取(基于夹角)
2,给P一个方向,我选的是PO方向 (O是原点),计算向量PN1,PN2,...PNk。3,求出PO和PN1,PN2,...PNk的夹角,这里的夹角是0~360°的。在网上找了一些文章,发现了这个方法1,求出距离P点最近的个点,N1,N2,N3,....Nk。5,求相连夹角的差值,如果差值大于阈值,就是边界值。我的实验结果,带有椭圆,所以阈值设置的是120°。不过在点云数量很大的时候,这种方法很耗费时间.判断点P是否为边界点的步骤。4,把所有的夹角排序,升序。
2024-03-01 10:00:00
1349
原创 nanoflann 的坑radiusSearch
nanoflann中的radiusSearch的输入是搜索半径的平方,不是半径!flann的radiusSearch的输入是搜索半径。
2024-02-29 11:53:09
548
1
原创 pcl kdtree的坑indices,distance
如果项目中要选用离自己最近的10个点,应该从indices的第二项开始取,取到第11项也就是下角标1-10。pcl kdtree的indices的第一项是自己,因为自己离自己最近.还有distance是距离的平方,不是距离。
2024-02-27 10:06:43
382
原创 pcl pca求平面点云整体法向量
求平面法向量与拟合平面本质是一样的.我们也可以用LS来求取,这里给出了pca的方法和部分代码。有些项目实现需要平面点云整体的法向量.
2024-02-01 18:23:59
728
1
原创 沿着法向量的方向投影到某一平面pcl
1,先求法向量,利用computePointNormal得到的前三个参数就是法向量(a,b,c)1,先求法向量,利用computePointNormal得到的前三个参数就是法向量(a,b,c)2,选定一点,这个点是用来定位平面的,通过这个点求出平面ax+by+cz+d=0的d。2,选定一点,这个点是用来定位平面的,通过这个点求出平面ax+by+cz+d=0的d。3,将点云沿着法向量的方向投影到选择的平面上。3,将点云沿着法向量的方向投影到选择的平面上。
2024-01-31 11:22:52
752
原创 pcl粒子群PSO计算平面度
1,初始化种群参数,粒子群规模,并随机生成a,b的值,因为平面点云数据中心化过,所以a,b的值尽量生成的小一点,我限制在(-1,1)之间;在求平面度的时候,LS对于数据量小的点云,比较适合.当数据量变大的时候,达到千万级的时候,LS就会崩,他所需要的矩阵会溢出,最后求出非常离谱的数值.这里采用粒子群来求超大数据量的点云平面度.实验一下,当数据量在百万级的时候,LS要快于PSO.当数据量在千万级的时候,PSO远远快于LS.4,迭代结束,输出最优解,输出最优解的平面度(适应度),看需求画图。
2024-01-30 10:23:26
553
1
原创 pcl最小二乘求点云平面度
接下来求得所有点到该平面的距离(这里的距离要带方向,区分平面上下的点),将距平面上方一个最远的点和平面上方最远的点作差即可,也就是最大距离减去最小距离.该方法只适合点云数量在千万级以下的,在千万级以上的需要另做处理.解下来就是解线性方程的问题了,得到的解X就是平面系数.
2024-01-26 15:50:53
904
1
原创 pcl求椭圆圆心
由于点云的数量很多,提取椭圆边界之后,点云数量也不少,为了防止计算出的A太大无效,要对点云中心化,这势必会影响椭圆的参数.这里计算了一下。令X=(a,b,c,d,e),上面的方程可以写成AX=b的形式,,进而求解除X,也就是椭圆的参数。多个测量点(xi,yi),根据最小二乘的思想,拟合目标函数,使其最小,故偏导为0;m,n分别未椭圆的长轴短轴,圆心为原点,偏移角0。(懒) 图里面的x y均省略了下角标 i.所以中心化之前的椭圆参数是。
2024-01-26 13:45:08
680
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人