RANSAC 算法拟合平面
视觉库为VisionPro

1、输入参数
Distance Threshold:对于拟合算法的每次迭代,测量候选平面与每个3D输入点之间的距离。比这个阈值更远的点被认为是离群值。 默认为1
Assurance:这个值必须大于0,并且小于或等于1。
使用这个来平衡工具的执行时间和拟合平面的精度。减少这个值可以降低执行时间,但会使拟合平面不那么准确。建议设置一个超时时间。
算法必须区分内部变量和离群变量,内部变量的分布可以用一组模型参数来解释,而离群变量则不适合模型。给定一组inliers,该算法可以估计出最适合该数据的几何形状。下图显示了给定数据集的一组inliers和离群值:

Worst Case Proportion Outliers:指定平面拟合的3D点所期望的离群点的最坏情况比例。值0.7表示处理的3D点中有70%是离群值,默认设置为0将强制该工具使用所有点拟合

Cog3DPlane plane=null;
double RMS=0;
double NumInliers=0;
double NumOutliers=0;
CogImage16Range inputImage=new CogImage16Range()//附一张Range图片
ICogRegion region=CogIPOneImageTool.Region as CogRectangle;//传个区域么
double assurance = 0.5;
double distanceThreshold = 1;
double worstCaseProportionOutliers = 0;
Cog3DRobustFitTechniqueConstants robustFitTechnique = Cog3DRobustFitTechniqueConstants.AdaptiveRANSAC ;Cog3DVect2Collection srcPoints2D = new Cog3DVect2Collection();
//获取变换到像素空间的 变换矩阵
CogTransform2DLinear pixelFromRegionSelectedSpaceXform =inputImage.GetTransform("#", region.SelectedSpaceName) as CogTransform2DLinear;
//将区域映射到像素空间
ICogRegion regionPixel = region.Map(pixelFromRegionSelectedSpaceXform ,CogCopyShapeConstants.All) as ICogRegion;
//创建一个图像缓冲区,
CogRLEBuffer regionRle = regionPixel.CreateRLE(255, 0);
//左顶点坐标
int ulX = regionRle.X;
int ulY = regionRle.Y;
//获取一维数组,从第一行第一个像素开始到最后一列,接着从第二行第一个开始,直到结束,每一行的末尾由一个长 //度值为零的标识 计数单位为255  最大255
//例如 计数了255 个算1个完整的单位runs的长度加1 ,如果计数255一行没有结束,从1开始计如果计到行的最后一 //个结束计,runs的长度加1,最后一个在给runs长度加1,并且CogRLERun.length=0,value=0,后面的行以同样的方 //式计
//
CogRLERun[] runs = regionRle.GetRuns();
int x = ulX;
int y = ulY;
//获取像素点的坐标foreach (CogRLERun run in runs){if (run.Length > 0){if (run.Value > 0){for (int i = 0; i < run.Length; i++)srcPoints2D.Add(new Cog3DVect2(x++, y));}else{x += run.Length;}}else{x = ulX;y++;}}Cog3DVect3Collection dstPoints3D;bool[] visible;//将2D图像空间点转换为3D点的集合(在Sensor3D空间中)inputImage.MapPoints3DFrom2D("Sensor3D", "#", srcPoints2D, out visible, out dstPoints3D);
//去除丢失点
Cog3DVect3Collection pointsPhys3D = new Cog3DVect3Collection();for (int i = 0; i < visible.Length; i++){if (visible[i] == true)pointsPhys3D.Add(dstPoints3D[i]);}//拟合3D平面
Cog3DPlaneFitterUsing3DPoints planeFitter =new Cog3DPlaneFitterUsing3DPoints();planeFitter.RobustFitParameters.Assurance = assurance;planeFitter.RobustFitParameters.DistanceThreshold = distanceThreshold;planeFitter.RobustFitParameters.WorstCaseProportionOutliers = worstCaseProportionOutliers;planeFitter.RobustFitParameters.RobustFitTechnique = robustFitTechnique;Cog3DPlaneFitterUsing3DPointsResult results =planeFitter.Execute(pointsPhys3D);Cog3DPlane plane = results.GetPlanePhys3D();
RMS=results.ResidualsPhys3D.Rms;;
NumInliers=results.GetInlierIndices().Count;
NumOutliers=results.GetOutlierIndices().Count;

希望以上对你有所启发

RANSAC 算法拟合平面相关推荐

  1. 利用 ransac 算法拟合平面

    1.前言 最近项目中遇到一个问题, 老板给了一组数据然后要求获取其中处于同一个平面上的数据点的信息, 很明显就是使用ransac 算法进行处理. 2. ransac算法思想 这里我们使用自己的理解来说 ...

  2. Open3D RANSAC算法拟合分割多条直线

    Open3D RANSAC算法拟合分割多条直线 Open3D是一个基于Python的可视化和三维数据处理库,它包含了一些现代计算机视觉算法和工具,使得对3D图像和点云数据进行处理变得更加轻松.在Ope ...

  3. python使用RANSAC算法拟合直线

    nptest1 = np.array(line1_yx) print("nptest1", nptest1)line1 = cv2.fitLine(nptest1, cv2.DIS ...

  4. PCL:RANSAC算法拟合直线的两种实现方式

    pcl利用ransac实现直线拟合的方法 pcl::SampleConsensusModelLine pcl::SACSegmentation pcl::SampleConsensusModelLin ...

  5. 用RANSAC算法实现干扰严重的直线拟合~

    1.说到直线拟合,一般是用最小二乘啦,在opencv里面就是用cv.fitLine来完成,首先简单介绍一下该函数: cv.fitLine(points, distType, param, reps, ...

  6. RANSAC算法(2):(拟合平面)本文以地面为基础以及源码分布解读

    本章代码是本人根据一个未曾谋面的好人学习的(要怀抱希望,世界上好人真的是很多的,我要做一个去给别人带去正能量积极态度的人,加油喽),如需转载学习请注明.谢谢 ---------------基于rans ...

  7. python ransac 拟合平面,PCL利用RANSAC自行拟合分割平面,

    PCL利用RANSAC自行拟合分割平面, 利用PCL中分割算法. pcl::SACSegmentation<:pointxyz> seg; ,不利用法线参数,只根据模型参数得到的分割面片, ...

  8. 多点拟合求平面的RANSAC算法

    对于多点求平面,直接的传统方法是三点求平面,通过求解方程组得到平面的法向量和截距. 但仅适用于点集能够恰好拟合到一个平面的情况,如果点集不能恰好拟合到一个平面,则需要使用更复杂的方法来处理,例如使用最 ...

  9. RANSAC算法(附RANSAC直线拟合C++与Python版本)

    文章目录 RANSAC算法简介 RANSAC算法基本思想和流程 迭代次数推导 RANSAC与最小二乘区别 RANSAC直线拟合代码(C++及Python版本) C++版本代码 Python版本代码如下 ...

最新文章

  1. GAN网络立功!36分钟,建起5亿光年的宇宙区域
  2. python教程第四版pdf下载-Python参考手册 第4版高清中文PDF下载
  3. 1732: 数花费(Kruscal)
  4. 在output 子句和 scope_identity() 混合使用的时候的注意事项
  5. 取石子游戏,威佐夫博弈的推理
  6. html语言闪烁特效代码,css3 实现文字闪烁效果的三种方式示例代码
  7. 网站运维:git工具(10):GitLab安装和使用
  8. 【ARM裸机s5pv210 】芯片初始化
  9. 在Excel中从长列​​表中选择多个项目
  10. PhotonServer中PhotonServer.config文件的配置
  11. 使用html2canvas 截图 出现图片空白的问题
  12. Windows 10系统自带Virtual Private Network客户端配置连接L2TP服务器_2
  13. ORACLE基础及系统表
  14. 架构师如何应对复杂业务场景?领域建模的实战案例解析
  15. 视图、序列、索引、约束
  16. 2023版毛概+习概(习思想)课后题及答案整理
  17. 金陵2021年金陵计算机系分数线,南京大学金陵学院
  18. 痞子衡嵌入式:ARM Cortex-M文件那些事(8)- 镜像文件(.bin/.hex/.s19)
  19. SDK、JDK、JRE、JVM、JDT、CDT等之间的区别与联系
  20. 「架构师必备」15个经典面试问题及回答思路

热门文章

  1. centos7使用说明
  2. [FAQ10927][USB serial number客制化][系列6]:能否实现adb devices的序列号,usb serialnumber, cts device ID,SN一致?
  3. 《批判性思维》读书笔记
  4. 二、Activity 的启动模式
  5. 庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术
  6. GBK与GB2312 解决GBK转UTF-8部分字符乱码
  7. linux安装mysql提示“No package mysql-server available
  8. 密钥、证书原理与创建
  9. 杭州大华相机 rtsp 流格式
  10. STM32F103系列单片机的FLASH和RAM大小