6

3d激光雷达开发(ransac的思想)

 2 years ago
source link: https://blog.csdn.net/feixiaoxing/article/details/123490342
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

3d激光雷达开发(ransac的思想)

费晓行 已于 2022-03-14 22:53:39 修改 169

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们写了平面分割(https://blog.csdn.net/feixiaoxing/article/details/123388791?spm=1001.2014.3001.5501)、圆柱分割(https://blog.csdn.net/feixiaoxing/article/details/123389321?spm=1001.2014.3001.5501)这两篇文章。细心的同学可能发现,这里面都提到了ransac,那什么是ransac呢?

        所谓ransac,全称是random sample consensus,也就是随机采样一致性。名字听上去有点拗口,不妨举个例子来解释。假设一堆点云数据,我们怎么从中找到平面呢?一个简单的方法就是猜?随机找到几个点,算出一个平面,然后计算每个点距离这个平面的距离。继续撒点,如果发现新的点比原来的好,也就是其他点距离平面距离更小,那么更新老的点;否则继续寻找。这个里面,其实做了两个假设,一个假设是我们撒的点正好就在平面上,一个假设是只要样本多,总能找到合适的点。

        网上有一些说明这个原理的文章,部分还提供了代码,比如这一篇,https://zhuanlan.zhihu.com/p/62238520,读起来很是不错。

1、原来的代码有几处bug,修复了一下,

        1.1 i和iters的比较修改为while i < iters:

        1.2 添加i  += 1

        1.3 修正sigma=3,主要是为了提高运行速度,不用等太久

        1.4 添加try-except,防止出现除0异常

        1.5 添加UTF-8,不然中文过不了

2、修改后的代码如下所示,

newCodeMoreWhite.png

3、实际效果

        代码没有修改之前,可能会出现除0错误,而且执行时间很长,有差不多10几秒钟,修改后可以短时间快速出结果。

4、最有意思的更新

        对iters的重新计算是最有意思的,实际效果也许有限。注意虽然SIZE是50,但是实际random_x、random_y的大小是100,所以这里乘以2。此外后面一个2,代表每次只需取两个点即可,所以N=2。其他部分和k=log(1-P)/log(1-t的N次方)这个公式是完全匹配的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK