最小二乘拟合圆柱

目录

  • 一、算法原理
  • 二、代码实现

在这里插入图片描述

本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。

一、算法原理

  由圆柱面的几何特性可得,圆柱面上的点到其轴线的距离恒等于半径 r 0 r_0 r0,如图1 所示。
在这里插入图片描述

  其中, P P P为圆柱面上任意一点, P 0 ( x 0 , y 0 , z 0 ) P_0( x_0,y_0,z_0) P0(x0y0z0) 为圆柱轴线上一点, ( a , b , c ) ( a,b,c) (abc)为圆柱轴线向
量, r 0 r_0 r0为圆柱底圆半径。圆柱面上任意一点到其轴线的距离为半径 r 0 r_0 r0,即:
( x − x 0 ) 2 + ( y − y 0 ) 2 + ( z − z 0 ) 2 − [ a ( x − x 0 ) + b ( y − y 0 ) + c ( z − z 0 ) ] 2 = r 0 2 (1) (x-x_0)^2+(y-y_0)^2+(z-z_0)^2-[a(x-x_0)+b(y-y_0)+c(z-z_0)]^2=r_0^2\tag{1} (xx0)2+(yy0)2+(zz0)2[a(xx0)+b(yy0)+c(zz0)]2=r02(1)

  式( 1) 即为圆柱面方程。根据圆柱面上点的坐标 ( x , y , z ) ( x,y,z) (xyz),求出圆柱轴线上一点 ( x 0 , y 0 , z 0 ) ( x_0,y_0,z_0) (x0y0z0) 、圆柱轴线向量 ( a , b , c ) ( a,b,c) (abc) 、圆柱底圆半径 r 0 r_0 r0这七个参数,就可以唯一确定一个圆柱。

柱面拟合方法详细步骤如下:
(1) 确定柱面模型参数初始值。圆柱拟合初值的估计原理如下:

  搜寻圆柱面上任意一点的若干邻近点,将这些点拟合成平面,得到的平面法向量单位化即该点的单位法向量。对圆柱面上每个点处理,得到每个点的单位法向量。将每个点的单位法向量看成点,将这些点拟合成平面,得到平面法向量,即圆柱轴线向量初始值 a 0 、 b 0 、 c 0 a_0、b_0、c_0 a0b0c0,该步骤使用了主成分分析法进行求解。
  先对圆柱进行坐标转换,使圆柱轴线向量 ( a 0 , b 0 , c 0 ) (a_0,b_0,c_0) (a0b0c0)变换为平行 Z Z Z轴的向量即为 ( 0 , 0 , ( a 0 ) 2 + ( b 0 ) 2 + ( c 0 ) 2 ) ( 0,0,\sqrt{( a_0 )^ 2 + ( b_0)^2 + ( c_0)^ 2} ) (00(a0)2+(b0)2+(c0)2 ) 。设旋转矩阵为 R 3 × 3 R_{3 ×3} 3×3,要使:
在这里插入图片描述
在这里插入图片描述
  将旋转矩阵与圆柱上的点的坐标 ( x , y , z ) (x,y,z) (x,y,z)相乘,得到的新坐标 ( x ′ , y ′ , z ′ ) (x',y',z') (x,y,z),将新坐标中的 x ′ , y ′ x',y' x,y取出得新坐标系下圆柱底面的坐标,根据 ( x ′ , y ′ ) (x',y') (x,y)可拟合一个圆。
  圆的方程为 ( x − x 1 0 ′ ) 2 + ( y − y 1 0 ′ ) 2 = ( r 0 ) 2 (x-x_1^{0'})^2+(y-y_1^{0'})^2=(r_0)^2 (xx10)2+(yy10)2=(r0)2若知道圆心坐标 x 1 0 ′ , y 1 0 ′ x_1^{0'},y_1^{0'} x10,y10、半径 r 0 r_0 r0这三个参数,就可以唯一确定一个圆面。
  首先,圆坐标 ( x ′ , y ′ ) (x',y') (x,y)准备完毕;其次,找误差方程,将圆的方程展开得到 x 2 + ( x 1 0 ′ ) 2 + y 2 + ( y 1 0 ′ ) 2 − 2 y y 1 0 ′ − ( r 0 ) 2 = 0 x^2+(x_1^{0'})^2+y^2+(y_1^{0'})^2-2yy_1^{0'}-(r_0)^2=0 x2+(x10)2+y2+(y10)22yy10(r0)2=0,即 2 x ( x 1 0 ′ ) + 2 y ( y 1 0 ′ ) + ( r 0 ) 2 − ( x 1 0 ′ ) 2 − ( y 1 0 ′ ) 2 − ( x 2 + y 2 ) = 0 2x(x_1^{0'})+2y(y_1^{0'})+(r_0)^2-(x_1^{0'})^2-(y_1^{0'})^2-(x^2+y^2)=0 2x(x10)+2y(y10)+(r0)2(x10)2(y10)2(x2+y2)=0。可以设 x 1 0 ′ 、 y 1 0 ′ 、 ( r 0 ) 2 − ( x 1 0 ′ ) 2 − ( y 1 0 ′ ) 2 x_1^{0'}、y_1^{0'}、(r_0)^2-(x_1^{0'})^2-(y_1^{0'})^2 x10y10(r0)2(x10)2(y10)2为待求参数。于是误差方程为: V = 2 x ( x 1 0 ′ ) + 2 y ( y 1 0 ′ ) + ( r 0 ) 2 − ( x 1 0 ′ ) 2 − ( y 1 0 ′ ) 2 − ( x 2 + y 2 ) V=2x(x_1^{0'})+2y(y_1^{0'})+(r_0)^2-(x_1^{0'})^2-(y_1^{0'})^2-(x^2+y^2) V=2x(x10)+2y(y10)+(r0)2(x10)2(y10)2(x2+y2),写成矩阵的形式即:

在这里插入图片描述
在这里插入图片描述

  假设获取的圆的点等精度,即等权。根据线性最小二乘原理,即 V T V = m i n V^TV=min VTV=min,求得位置参数 X X X
X = ( B T B ) − 1 B T L (5) X=(B^TB)^{-1}B^TL\tag{5} X=(BTB)1BTL(5)
  求出新坐标系下圆柱轴线上一点的初始值 x 1 0 ′ , y 1 0 ′ x_1^{0'},y_1^{0'} x10,y10以及底圆半径的初始值 r 0 r_0 r0,再根据公式:
在这里插入图片描述
  将新坐标系下的 x 1 0 ′ , y 1 0 ′ x_1^{0'},y_1^{0'} x10,y10转换成旧坐标系下的坐标 x 1 0 , y 1 0 x_1^{0},y_1^{0} x10,y10。无论在新坐标系下还是在旧坐标系下,底圆半径的初值 r 0 r_0 r0都不变。为了尽量减小误差,将圆柱轴线上一点的初值 z 1 0 z_1^{0} z10的值设为原坐标系下圆柱点 z z z的最大值与最小值和的一半。于是求出圆柱轴线上一点、圆柱底半径这四个参数的初始值 x 1 0 , y 1 0 , z 1 0 , r 0 x_1^{0},y_1^{0},z_1^{0},r_0 x10,y10,z10,r0
  (2)建立改进误差方程式求解参数值。圆柱面方程为:
( x − x 1 ) 2 + ( y − y 1 ) 2 + ( z − z 1 ) 2 − [ a ( x − x 1 ) + b ( y − y 1 ) + c ( z − z 1 ) ] 2 = r 2 (7) (x-x_1)^2+(y-y_1)^2+(z-z_1)^2-[a(x-x_1)+b(y-y_1)+c(z-z_1)]^2=r^2\tag{7} (xx1)2+(yy1)2+(zz1)2[a(xx1)+b(yy1)+c(zz1)]2=r2(7)
传统方法,令
f = ( x − x 1 ) 2 + ( y − y 1 ) 2 + ( z − z 1 ) 2 − [ a ( x − x 1 ) + b ( y − y 1 ) + c ( z − z 1 ) ] 2 − r 2 (8) f=(x-x_1)^2+(y-y_1)^2+(z-z_1)^2-[a(x-x_1)+b(y-y_1)+c(z-z_1)]^2-r^2\tag{8} f=(xx1)2+(yy1)2+(zz1)2[a(xx1)+b(yy1)+c(zz1)]2r2(8)
f f f线性化得
在这里插入图片描述
  这样,误差方程可列为:
在这里插入图片描述
其中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
V n × 1 = B n × 7 X 7 × 1 − L n × 1 (23) V_{n\times 1}=B_{n\times 7}X_{7\times 1}-L_{n\times 1}\tag{23} Vn×1=Bn×7X7×1Ln×1(23)

  假设获取的圆柱面上的点等精度,即权相等。根据最小二乘原理,求得参数
X = ( B T B ) − 1 B T L (24) X=(B^TB)^{-1}B^TL\tag{24} X=(BTB)1BTL(24)
  这是一个循环的迭代过程,每一次迭代计算过程中代入的初值都等于上一次的初值加上求出的 X X X的改正值,当 X X X的数值小到满足要求的精度时推出迭代。

二、代码实现

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/99241.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【脚踢数据结构】常见排序算法

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的…

让你专注于工作的电脑桌面日程提醒软件

在现代职场中,上班族们常常在繁忙的工作中会遇到各种各样的事情干扰。比如,当我们专注于完成重要的报告时,却又有同事来询问问题;在准备去会议事项时,手机却突然收到了一系列的短信和通知。这些干扰不仅浪费了我们的时…

寄存柜让物品存储变得更简单

寄存柜是一种提供临时性物品寄存服务的设备,通常用于超市、商场、机场、火车站、学校、影院、体育馆等公共场所为用户提供便捷的寄存服务。 寄存柜的种类: 1.行李寄存柜:专门用于旅行者寄存行李和物品的柜子,通常位于机场、火车站…

每天一道leetcode:127. 单词接龙(图论困难建图广度优先遍历)

今日份题目&#xff1a; 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk&#xff1a; 每一对相邻的单词只差一个字母。 对于 1 < i < k 时&#xff0c;每个 si 都在 wordList 中…

PSP - 开源可训练的蛋白质结构预测框架 OpenFold 的环境配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132334671 Paper: OpenFold: Retraining AlphaFold2 yields new insights into its learning mechanisms and capacity for generalization Open…

在思科(Cisco)设备上配置 DHCP 服务器

DHCP广泛用于LAN环境中&#xff0c;从集中式服务器动态分配主机IP地址&#xff0c;从而显着减少IP地址管理的开销。DHCP 还有助于节省有限的 IP 地址空间&#xff0c;因为不再需要将 IP 地址永久分配给主机&#xff0c;只有连接到网络的主机才会使用 IP 地址。DHCP 服务器将路由…

“维度削减+逻辑回归”:如何使用PCA大幅提升乳腺癌的预测成功率?

一、引言 乳腺癌是女性中最常见的恶性肿瘤之一&#xff0c;也影响着全球范围内许多人们的健康。据世界卫生组织&#xff08;WHO&#xff09;的数据&#xff0c;乳腺癌是全球癌症发病率和死亡率最高的肿瘤之一&#xff0c;其对个体和社会的危害不可忽视。因此&#xff0c;早期乳…

ShowMeBug CEO李亚飞受邀参加深圳青年创新创业系列沙龙电子信息专场

7月13日下午&#xff0c;由深圳市科技交流服务中心&#xff08;深圳市科技专家委员会办公室&#xff09;主办&#xff0c;深圳新一代产业园承办的“2023深圳青年创新创业系列沙龙——电子信息专场”活动举行。ShowMeBug CEO李亚飞受邀参加此次活动。 深圳市科学技术协会党组成员…

pdf格式文件下载不预览,云存储的跨域解决

需求背景 后端接口中返回的是pdf文件路径比如&#xff1a; pdf文件路径 &#xff08;https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf&#xff09; 前端适配是这样的 <ahref"https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf&…

【仿写tomcat】二、扫描java文件,获取带有@WebServlet注解的类

tomcat仿写 项目结构扫描文件servlet注解map容器servlet工具类启动类调用 项目结构 扫描文件之前当然要确定一下项目结构了&#xff0c;我这里的方案是tomcat和项目同级 项目的话就仿照我们平时使用的结构就好了&#xff0c;我们规定所有的静态资源文件都在webApp目录下存放…

qiiuzhiji4

本篇是从慧与离职后到2023年8月21日这段时间的经历 2023/7/31至2023/8/21 本篇初次写于2023年8月21日 从慧与离职后基本上就是在专心找工作了&#xff0c;但是有在这段时间找工作经历的人都明白&#xff0c;IT行业不复以往了。尤其是对于我这样的普通二本学历的人来说&#xff…

Ubuntu系统下搭建QtCreator开发环境详细过程(Qt简介;Linux下安装QtCreator)

关于Qt的相关介绍&#xff0c;可以参考QT从入门到实战x篇&#xff0c;Qt 5.9 C开发指南&#xff0c;对于重复部分&#xff0c;本栏目不做详细介绍。关于Linux的基础&#xff0c;本人将重新整理一个栏目&#xff0c;就叫Linux基础吧&#xff0c;有需要的可以后期关注下。 文章目…

发布python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api,以及安卓接入案例代码

python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api&#xff0c;以及原生安卓接入案例代码案例 源码地址:keyxh/newsapi: python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api&#xff0c;以及安卓接入案例代码 (github.com) 目录 1.环境配…

Fast DDS (2)

1、结构&#xff1a; Fast DDS的架构如下图所示&#xff0c;可以看到以下不同环境的层模型&#xff1a; 应用层&#xff1a;利用Fast DDS API 在分布式系统中实现通信的用户应用程序。Fast DDS层&#xff1a;DDS 通信中间件的稳健实现。它允许部署一个或多个 DDS 域&#xff…

leetcode303. 区域和检索 - 数组不可变(java)

前缀和数组的应用 区域和检索 - 数组不可变题目描述前缀和数组代码演示 区域和检索 - 数组不可变 难度 - 简单 原题链接 - 区域和检索 - 数组不可变 题目描述 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询: 计算索引 left 和 right &#xff08;包含 left 和 righ…

Python支持下最新Noah-MP陆面模式站点、区域模拟及可视化分析技术教程

详情点击公众号链接&#xff1a;Python支持下最新Noah-MP陆面模式站点、区域模拟及可视化分析技术教程 Noah-MP 5.0模型&模型所需环境的搭建 陆面过程的主要研究内容&#xff08;陆表能量平衡、水循环、碳循环等&#xff09;&#xff0c;陆面过程研究的重要性。 图 1 陆面…

MySQL语法及常用数据类型

一、SQL语言概述 对数据库进行查询和修改操作的语言叫做SQL。SQL的含义就是结构化查询语言&#xff08;Structured Query Language&#xff09;。SQL包含以下4个部分&#xff1a; 1、数据定义语言&#xff08;DDL&#xff09;&#xff1a;DROP、CREATE、ALTER等语句&#xff…

jenkins 日志输出显示时间戳的方式

网上很多方式比较片面&#xff0c;最新版插件直接使用即可无需更多操作。 使用方式如下&#xff1a; 1.安装插件 Timestamper 2.更新全局设置 系统设置-找到 Timestamper 勾选 Enabled for all Pipeline builds 也可修改时间戳格式。 帮助信息中显示 When checked, timesta…

ARM--day5(C语言点灯实验、总线、串口通信信息、串口通讯协议)

函数分装实现点灯 gpio.c: #include "gpio.h" //函数功能&#xff1a;GPIO引脚初始化操作 //参数1&#xff1a;GPIO组号 //参数2&#xff1a;引脚编号 //参数3&#xff1a;初始化内容 void hal_gpio_init(volatile gpio_t*gpiox,unsigned int pin,gpio_init_t* ini…

rabbitmq的死信队列

目录 成为死信的条件 消息TTL过期 队列达到最大长度 消息被拒 延迟队列 延迟队列使用场景 消息设置 TTL 队列设置 TTL 两者区别 producer 将消息投递到 broker 或者直接到 queue 里了&#xff0c; consumer 从 queue 取出消息 进行消费&#xff0c;但某些时候由…