三维扫描仪[12]——大型扫描平台,贴点还是ICP?

2024-02-13 22:30

本文主要是介绍三维扫描仪[12]——大型扫描平台,贴点还是ICP?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我觉得有必要专门把这段心路历程拿出来分享一下。
在这个简易三维扫描项目中,我们并没有实战拼接。但是我提到了贴点以及其他的拼接办法。现在,我将简单介绍ICP——迭代最近点(Iterative Closest Point, ICP)算法。

ICP算法简介

ICP算法是点云精确匹配中一种重要的算法。 1992年,由Besl首先提出,该算法是通过迭代计算,使两片点云上对应点对或点面距离的均方误差最小。其核心算法步骤主要包括:
1)需要找到两幅要匹配点云的最近匹配点。
2)计算两幅匹配点云的旋转矩阵。
3)计算两幅图像的平移矩阵。
4)如果两组点云距离小于给定的阈值或超过最大迭代次数,迭代停止。
放在本项目中,整体会经历四个过程:
1)对原始点云数据进行采样
2)确定初始对应点集
3)去除错误对应点对
4)坐标变换的求解。
其实你只需要百度一下 ICP算法 就可以得到很多很多很详细的说明了。

唯一需要注意的一点!
PCL自带OpenNI,和我博客里给出的,也就是MIT那个SampleOpenNI库以及同时安装的OpenNI有冲突!想安装PCL得先把你之前安装的开源玩意删干净。

贴点

在被测物体上贴点,或是在被测物体旁边贴点,在拼接时就可以不用ICP迭代迭代再迭代,效率高得很。
但是贴点的话实在是太累了…
最累的其实还不是往上贴的时候,而是向下撕的时候……那个丧心病狂啊!
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

但是效果还是很好的。
那么什么时候效果不算好呢?
想像一下,有一台这样子的人体扫描仪。
这里写图片描述
如果我们只在底下的台子上贴点,会怎么样?拼接出来会歪!可能下面拼得很好,但上面的人就是一片朝里,一片朝外,一片左扭一点,一片右扭一点了。

总结

如果设计上图这种大型扫描平台,在平台上提前贴好点,被扫描到的地方都贴上点,可想而知是很多很多点,使用多台扫描仪,在瞬间完成扫描,即可完成拼接。但是如果扫描时间过长,有可能被测物体会移动,导致拼接不准。但是如果不会动就没有这个问题了。
同样是大型扫描平台,如果是要扫汽车,还要贴点,那么就是先贴编码点(理解为大点),再贴小圆点(小点),拿个单反拍整个大点,把大半辆车都拍进去,得到稀疏框架/轮廓点,再拿扫描仪扫小点,最后依靠编码点和小圆点实现拼接。
这里写图片描述
这里写图片描述
还是大型扫描平台,还是扫汽车,可以用手持扫描仪,但是除了我之前提到过的手持式扫描仪外,其实还有一个设备才能组成一套完整的扫描系统:必须有一个摄像头,实时看着你的手持扫描设备,来确定世界坐标系。当车太大,手持扫描系统需要移动时,这个摄像头就可以定下新的手持扫描仪的位置。
这里写图片描述

回到ICP和贴点上来。
就经验来说,没有个80%-90%的重合度就不要用什么ICP了,50%的重合度那几乎一定会错误的,纵使他能返回结果也是错误的,退一步来说,如果我们已经有了这种平台,
这里写图片描述
那么,可想而知扫描仪的角度以及其他参数都固定了,那么我们只需要标定好所有扫描仪,把它们都标定在一个坐标系下(这里可以回顾一下我之前的那个转盘扫描仪的项目),就可以很好的完成扫描,之后取点云子集,子集的位置就是两片点云的重合处,如果你3台扫描仪扫,肯定会有重合的地方的,那就拿出重合的地方ICP,这样就准了。

至于贴点……真的好麻烦啊……

这篇关于三维扫描仪[12]——大型扫描平台,贴点还是ICP?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/706774

相关文章

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc