确实因为halcon的文档写的太好了,所以网上关于halcon的博客就很少,点云拟合平面的文档上介绍的比较详细,但是如何从平面模型中读取法向量可确实是难到了,找了三个小时人傻了,然后发现还是一行函数。

首先来说三维点云拟合平面,首先gen_object_model_3d_from_points,把点云转化为3d模型,输入:X,Y,Z坐标,输出ObjectModel3D

gen_object_model_3d_from_points( : : X, Y, Z : ObjectModel3D)

再选择拟合成想要的平面,使用fit_primitives_object_model_3d 把该上模型转化到Plane

fit_primitives_object_model_3d( : : ObjectModel3D, ParamName, ParamValue : ObjectModel3DOut)

ObjectModel3D:输入模型

ParamName:选择'primitive_type':拟合的类型,'fitting_algorithm':拟合方法等等

ParamValue:对应'primitive_type'------'cylinder', 'sphere', 'plane',就是"圆柱体","球体","平面"。对应'primitive_type'------'least_squares', 'least_squares_huber', 'least_squares_tukey'几种最小二乘法,这里选择plane和least_squares

ObjectModel3DOut:输出的平面

得到平面之后,ObjectModel3DOut相当于一个平面的模型,他里边包含各种平面的参数:pose,nomals等等,需要使用一个函数get_object_model_3d_params

get_object_model_3d_params( : : ObjectModel3D, ParamName : ParamValue)

F1文档查看,有所有想要的信息~

然后选择ParamName是'primitive_parameter',取出法向量

选择ParamName是'primitive_pose',取出位姿

代码如下:

X:=[-0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04]
Y:=[-0.04, -0.04, -0.04, -0.04, -0.04, -0.04, -0.04, -0.04, -0.04, -0.03, -0.03, -0.03, -0.03, -0.03, -0.03, -0.03, -0.03, -0.03, -0.02, -0.02, -0.02, -0.02, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04]
Z:=[-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0]
*生成3D模型
gen_object_model_3d_from_points(X, Y, Z, ObjectModel3D)
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
*展示一下这个平面
fit_primitives_object_model_3d (ObjectModel3D, ['primitive_type','fitting_algorithm'], ['plane','least_squares_tukey'], ObjectModel3DOut)
visualize_object_model_3d (WindowHandle,[ObjectModel3D,ObjectModel3DOut], [],[], \['color_0','color_1','alpha_1','disp_pose'], ['green','gray',0.5,'true'],'RectBOX', [], [], Pose)
*获取法向量,Normal的前三个数值就是单位法向量
get_object_model_3d_params (ObjectModel3DOut, 'primitive_parameter', Normals)

平面图如下:

单位法向量:

刚好是Z轴正方向的那个法向量。

Halcon 点云拟合平面并获取单位法向量及位姿相关推荐

  1. 最小二乘求解点云平面方程及其对应法向量

    csdn对latex语法支持不完整啊,太不友好了,那我只好上图片了.我把文档已经上传到csdn了,免积分,链接. 本文采用线性最小二乘直接解法(即对矩阵求逆),当矩阵维度大时,可能耗时比较多,可以采用 ...

  2. Halcon 用点来拟合平面

    一.简介 项目要求用多个点来拟合一个平面,然后再用其他平面上的点来计算这个点到平面的距离,halcon 有现成的拟合函数. MatLab 版本:Matlab 最小二乘法 拟合平面_Σίσυφος190 ...

  3. RANSAC点云多平面拟合分割

    RANSAC点云多平面拟合分割 三维平面拟合(最小二乘法) 假设 P P P 为一个点集, p i p_i pi​ 是点集中的任意一点, p i ∈ P p_i\in P pi​∈P, p c p_c ...

  4. 3D点云处理:拟合平面_优化后的最小二乘法

    文章目录 0. 拟合效果 1. 论文:一种稳健的点云数据平面拟合方法 1.1 优化过程 2. 参考 关联内容: 3D点云处理:拟合平面_最小二乘法_1 0. 拟合效果 左(拉格朗日乘子法求解)中(SV ...

  5. 点云最小二乘法拟合平面

    文章目录 一.简介 二.算法实现 三.实现效果 参考文献 一.简介 点云平面拟合的实质其实就是用一个拟合平面取代近似位于同一平面的点云,使点云中的所有点到拟合平面的距离平方和最小, 达到点云与拟合平面 ...

  6. 11 Halcon 点云平面交线计算

    /******************************************************************************* @文档名称: 基于点云的平面交线计算. ...

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

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

  8. RANSAC 算法拟合平面

    RANSAC 算法拟合平面 视觉库为VisionPro 1.输入参数 Distance Threshold:对于拟合算法的每次迭代,测量候选平面与每个3D输入点之间的距离.比这个阈值更远的点被认为是离 ...

  9. PCL:拟合平面直线和曲线以及空间曲线的原理到算法实现

    使用两种思路进行直线拟合: 1.利用逆矩阵思想 --------------进行下列公式的推导需要理解逆矩阵(求A矩阵的逆矩阵,则A矩阵必须是方阵)的知识: (1)为什么要引入逆矩阵呢? 逆矩阵可以类 ...

最新文章

  1. 东京见闻:快速走红日本市场 阿里云的三大秘密
  2. python3怎么使用qstring_请问PyQt的QString和python的string的区别?
  3. dash使用_使用Dash和SHAP构建和部署可解释的AI仪表盘
  4. 为Tiny4412设备驱动在proc目录下添加一个可读版本信息的文件
  5. Sorting It All Out (易错题+拓扑排序+有向图(判环+判有序)优先级)
  6. Mysql插入很慢,找到了稍微快点的方法
  7. 最常用的15个前端表单验证JS正则表达式
  8. apache 编译php mysql_apache静/动态编译在apache+php+mysql应用
  9. java ping 实现的_java实现ping功能
  10. 《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.8 罕见词移除
  11. 八、Python 之内置函数(。。。)
  12. 后端开发都应该掌握的Redis基础
  13. solaris 10 oracle 11g r2安装教程,Oracle 11gR2 on Solaris 10安装技术文档(原版英文)
  14. 粒子群算法及C语言实现
  15. 《深入理解RPC框架原理与实现 华钟明》读书笔记
  16. centos7设置DNS
  17. 计算机中低级语言和高级语言的区别?
  18. 【一句日历】2019年1月
  19. 包装类详解(装箱(包)、拆箱(包)、Integer类型缓存)
  20. 网络安全:网络攻击原理与方法.

热门文章

  1. Ubuntu 修改本地磁盘名称
  2. Android 9.0 系统弹框
  3. 查看jks文件中的签名
  4. 四种Java线程池用法解析
  5. Go 学习笔记(42)— Go 标准库之 os/user(获取Uid、Gid、Username、Name、HomeDir、查询用户、查询用户组)
  6. Notepad++支持jQuery、html5、css3
  7. MFC之按键消息(长按处理)
  8. 2013年3月百度之星B题
  9. apue读书笔记-第十二章
  10. 谷歌浏览器Google Chrome和Adobe Flash Plugins插件安装问题