MetaShape+CloudCompare的一些基本操作(一)

news2024/10/1 8:39:35

一、前言

        由于要做一些小小的数据处理,要进行无人机影像的拼接,上网一搜发现metashape(前photoscan)很好用。由于一些影像涉及到未发布的论文和知识版权,所以进行了打码处理,请见谅!!

        由于整个过程都是自己摸索出来的,可能会有很多不对的地方,请多指正!!!!

二、拼接照片

1.导入照片(点击菜单工作流程-添加照片)

导入后页面上会显示很多的点。随后勾选如下图左部分的横摆(利于后面的相机校正)

2.更改参考系,点击下方红色框框(下面的测量精度一般都是默认即可)

注意,这一步是有利于统一坐标系的,为了确保三维重建成果能够正确地与现实世界的位置相对应(如正射影像生成、环境监测、生态研究等科研领域)。当然如果你坐标系选错了就会出现下面的情况...一条浓缩了几千万个点的细线....

        你可能会问(我问的,我就这么做的^∨^)....不选坐标系统不就好了,我用那个本地坐标系统不行吗?诶!还真别说,真能导进去,但是只能导一个,因为坐标系没有统一,在后面地理配准的时候会很难受(就是做不了) 

        这是我历经千辛万苦选择的坐标系统,因为我这个影像数据使用大疆无人机飞出来的,而这个坐标系统选择投影坐标系和地理坐标系都会出现上面的情况,但是选择地心坐标系就不会,我查了一下,首先呢就是这个相机就是基于WGS84的地心坐标系,其次为什么是地心坐标系呢?

        这是因为WGS84是一个全球通用的地理坐标系统,它以地球质心为原点,能够提供全球一致的定位基准。使用WGS84坐标系可以直接与全球定位系统(GPS)和其他卫星导航系统(如GLONASS、Galileo、北斗)的数据相兼容,这对于无人机的导航和定位非常重要。

        相比之下,投影坐标系(如UTM、State Plane等)是将地球表面的曲面投影到平面上的坐标系统,主要用于地图制作和地理信息系统(GIS)中的数据分析。投影坐标系通常针对特定区域设计,以减少投影变形,但它们不适用于全球范围内的应用。

        无人机在飞行过程中需要实时的、全球统一的定位信息来进行导航和避障,WGS84坐标系正好满足这一需求。此外,WGS84坐标系也便于将无人机采集的数据与其他地理信息系统中的数据进行整合和分析,如果后续有需求,可以使用如ArcGIS等 GIS 软件将 WGS84 坐标转换为所需的投影坐标系。

3.对齐照片(点击工作流程-对齐照片)

        若出现一些照片没有对齐需要进行手动对齐!

PhotoScan手动对齐照片 | ConorPai的博客 (baiguangnan.com)icon-default.png?t=O83Ahttp://www.baiguangnan.com/2018/08/27/photoscanalignphotos/

二、输出密集点云(DEM同理)

1.相机校正(点击工具-相机校准)

        相机校正后创建的点云会更准确。通过准确的相机参数,包括位置和姿态,能够有效减少重建中的误差,使得生成的点云更符合实际场景。这种精确度直接影响到点云的密度、质量以及后续处理(如模型重建、测量等)的可靠性。

        首先先导出相机参数,步骤如下:

        随后在'初始'中导入刚刚导出的.xml文件(点击上图导出的前一个小按钮)点击固定参数,勾选全部。

2.点击工作流程-创建点云即可生成密集点云

(推荐“中”品质,高品质我的笔记本(RTX3050Ti)带不动,如果是实验室电脑的话可以选)

        生成后点击下面红色圈内的按钮即可查看效果。

         当然,如果你想创建dem也是一样的。

三、质量检验 

        为了确保所使用的影像数据能够满足后续处理的要求,从而获得高质量的三维重建结果。质量检测可以帮助识别和排除那些可能影响重建精度和可靠性的低质量影像。

        在左侧相机下右键选择估计相片质量。

        点击下方红圈内的按钮,选择“详情”,可以看到质量一栏,该数值若小于0.5则可能需要根据实际情况删除该照片。(因为盲目删除该照片可能会有无法覆盖原区域的问题)

四、cloudcompare点云滤波(低通滤波)

        如导入到cloudcompare中,上面说过如果设置了错了坐标系就会无法导入cloudcompare(在metashape最初设置地心WGS84坐标系) 

         比如如果不设置坐标系导入cloudcompare虽然可以但是无法进行地理配准。再次强调一定要设置对坐标系统!!无人机的话大概率是地心坐标系WGS84。

        点击红圈圈内的按钮导入.ply点云数据。

CloudCompare界面

        点击工具-清理-噪声过滤器

Neighbors

  • Point (KNN)‌: 这个选项指的是基于最近邻(K-Nearest Neighbors)的方法来确定每个点的邻居数量。KNN是一种常用的点云滤波技术,其中K代表邻居的数量。在这个方法中,每个点都会找到其最近的K个邻居,并基于这些邻居的信息进行滤波处理。举例来说,就是在人群中,KNN就像是你决定只跟离你最近的几个朋友(K个邻居)聊天,不管周围有多少人。这样,你的交流就只限于这个小圈子,不会被其他人干扰。
  • Radius (Sphere)‌: 这个选项则是基于一个给定的半径来确定每个点的邻居。在这个方法中,会为每个点创建一个球形区域,半径由用户指定,然后计算落在这个球形区域内的点作为邻居。同样的例子,这次,不再局限于固定的几个朋友,而是画了一个圈(半径),在这个圈里的所有人都可以成为你的临时朋友(邻居)。如果有人走进这个圈,他们就自动成了你的邻居;如果有人走出这个圈,他们就不再是你的邻居。

Max Error

  • Relative(相对的动态变化): 当选择相对误差时,max error 参数会被视为相对于点云中点的平均距离的一个比例值。这意味着滤波的阈值会根据点云数据本身的特性动态调整。以人举例,比如说我可以接受的误差是大家平均距离的一定比例。如果大家都站得很近,那么我能接受的误差就小;如果大家都站得远,那么我能接受的误差就大。
  • Absolute: 绝对误差则是一个固定的数值,表示滤波过程中允许的最大误差。无论点云数据如何,这个阈值都是恒定的。

如何选择参数呢?

        对于 neighbors 参数,如果我们希望滤波效果更加平滑且不受局部密度变化的影响(密度相对恒定),可以选择 Point (KNN) 并设置一个合适的K值。如果希望滤波效果更加依赖于局部密度,可以选择 Radius (Sphere) 并设置一个合适的半径值。

        对于 max error 参数,如果我们希望滤波效果更加适应点云数据的局部特性,可以选择 Relative 并设置一个合适的比例值。如果你希望滤波效果更加稳定且不受点云数据特性的影响,可以选择 Absolute 并设置一个合适的固定值。

        absolute 的值设置为1,那么在滤波过程中,任何点的位置调整都不能超过1个单位长度(通常是米或毫米,取决于点云数据的单位)。这意味着滤波后的点云中的点,其位置与原始位置相比,最大偏差不能超过1个单位长度。

        该参数值的大小直接影响滤波的效果。较小的值会导致滤波效果较为保守,即点的位置调整较小,可能会保留较多的噪声;而较大的值则可能导致滤波效果较为激进,即点的位置调整较大,可能会过度平滑点云,甚至丢失一些细节。

        但是我们在科研学习中可能需要多次尝试不同的参数组合,观察滤波效果,并实时进行调整。

PS:有报错、提醒:

1. [DoActionFilterNoise] Failed to apply the noise filter to cloud 'xxxxxx - Cloud'! (not enough memory?)

        貌似是我当前开的软件有点多,没有足够的内存/运存了。我把后台的ArcGIS关掉就好了...

2. [DoActionFilterNoise] No points were removed from cloud 'xxxxxx - Cloud'

        这个应该是因为数据本身的噪声就很低(metashape在生成点云的时候就会进行一次滤波),而且应该在所有影像拼接完成后再进行滤波。(总共有十余个点云文件,一个几万个点)

        在我调整参数后,得到了另一个滤波后的点云(肉眼几乎没啥区别...那么多点就少了那么一点点)

        后续我将全部数据都在metashape中处理完毕,点云总数如下:

        因为点云规模很大,大规模点云的处理可能非常耗时,可以先在小规模样本上进行参数调整,找到合适的参数后再应用于整个点云。我第一次滤波后就滤掉了几万点,效果一般而且时间很长。(cloudcompare的默认值一般看作是平均间距或一个有代表意义的统计值)

五、cloudcompare精细配准

        由于我们的各点云层在导入cloudcompare后,乍一看它们还挺契合的,但是我左键旋转后发现它们并不在一个平面上,查询后发现需要进行精细配准。

旋转后原本应该在一起的三个图层竟然分开了!?

        点云精细配准是指在点云粗配准的基础上,进一步提高点云之间对齐精度的过程。这个过程通常发生在已经有一个大致正确的初始对齐状态之后,目的是为了消除剩余的小误差,使得两个点云能够更加精确地重叠在一起。cloudcompare软件中的是ICP算法,它通过迭代的方式,不断寻找源点云和目标点云之间的最近点对,并根据这些点对计算出一个变换矩阵,然后用这个变换矩阵去更新源点云的位置,直到满足某个停止条件(比如迭代次数或者误差阈值)。

        首先选取两个图层,点击工具类-配准-精细配准,设置一些参数后(参数详解如下)点击“OK”即可。

  • Adjust Scale选项的意思是针对待配准的两个点云在尺寸不一致时,自动调整它们的全局比例,以便更好地进行配准。 (区域大小可以自己看一些各轴的范围,差的很多就勾选上,当然,我的这个范围差距很小,我也勾选上了,因为在配准过程中使用“Adjust Scale”选项,可以勾选此选项以帮助自动调整尺寸差异。即使差距很小,这个选项也能提高配准的准确性)
  • Final overlap选项指的是在配准过程中,经过调整和优化后,两个点云之间的重叠区域的最终状态。注意:由于我的实验是用无人机来拍摄地形的影像,根据摄影测量学的知识,一点要注意像片重叠的影响,软件默认值为100%,而相邻航线上的航摄相片的旁向重叠度应该满足30%~40%,注意更改。

  • 高级选项的第一个就是随机的采样点个数,如果电脑带的动就多搞一点。 

        随后点击编辑-合并,将两个配准后的图层合并在一起。

        如下图所示,无论如何旋转,都不会出现“分层”的状况。

        以此类推,将合并的图层继续精细配准。

2024.10.1

 Johaden

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验5 预备实验2-配置单个的路由器

配置单个的路由器 一、实验目的 此次试验目的是了解思科网络设备的配置基本特点及IOS命令基本操作方法。这些是配置思科设备的重要前提。 二、实验内容及结果 1、实验环境搭建 添加一个模块化的路由器,单击Packet Tracer 5.3的工作区中刚添加的路由器,…

【老生常谈、查漏补缺】SpringBoot接收参数的几种方式图文详解

前言 在实际开发过程中,我们经常会遇到各种不同的场景,需要从客户端接收不同的参数。Spring Boot 提供了多种方式来接收这些参数,使得我们的开发更加灵活便捷。这篇文章主要介绍了 SpringBoot 在接收参数的几种常用方式详解。随着前后端的分离…

如何从huggingface下载

我尝试了一下若干步骤,莫名奇妙就成功了 命令行代理 如果有使用魔法上网,可以使用命令行代码,解决所有命令行连不上外网的问题: #配置http git config --global http.proxy 127.0.0.1:xxxx git config --global https.proxy 127…

Redis入门第二步:Redis数据类型详解

摘要: 欢迎继续跟随《Redis新手指南:从入门到精通》专栏的步伐!在本文中,我们将深入探讨Redis支持的各种数据类型,这些类型是Redis强大功能的核心。通过学习不同的数据类型,你将能够根据具体的应用需求选择…

Sping源码:三级缓存

目录 一、概念1、三级缓存的作用2、循环依赖的含义 二、代码1、代码下载2、文件功能介绍3、源码分析3.1、找到获取A对象的位置,打断点进行debug操作3.2、一步步找到在A对象中注入B对象的位置3.3、一步步找到B对象注入A对象的位置3.4、往下找到通过三级缓存解决循环依…

综合绩效考核系统源码,三级医院绩效管理系统源码,基于springboot、mybaits+avue技术开发,支持项目二开。

医院综合绩效考核系统源码 商业项目源码,支持二次开发 采用多维度综合绩效考核的形式,针对院内实际情况分别对工作量、KPI指标、科研、教学、管理等进行全面考核。医院可结合实际需求,对考核方案中各维度进行灵活配置,对各维度的权…

MPS---MP87180芯片layout设计总结

今天是一个特殊的日子,十一节前最后一天了,小编我还在迪拜出差中,而且组内也就剩下我一个人在值班了,来自韩国首尔的测试同事杰总提前一周就回韩国了,EE同事龟田一郎桑也是提前三天回日本东京去了,只有我最…

Brave编译指南2024 MacOS篇-构建与运行(六)

引言 在上一篇文章中,我们成功初始化了Brave浏览器的构建环境。现在,我们进入了这个编译指南的核心部分:实际构建Brave浏览器并运行它。这个过程将把我们之前准备的所有源代码和依赖项转化为一个可运行的浏览器实例。 1. 编译Brave浏览器 …

C++—vector的使用及实现

✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 小伞的主页:xiaosan_blog 1.vector 1.1vector的介绍 cplusplus.com/reference/vector/vector/ 1.2vecto…

wpa_cli支持EAP-TTLS认证运行设计

wpa_cli支持EAP-TTLS认证运行设计 1 输入 1.1 启动wpa_supplicant 和 wpa_cli 在OpenHarmony开发板或华为开发机的命令行中输入 wpa_supplicant -Dnl80211 -c/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf -gabstract:/data/service/el1/public/wifi/s…

【D3.js in Action 3 精译_026】3.4 小节 DIY 实战:基于 Mocha 在浏览器客户端测试 D3 线性比例尺

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…

力扣(leetcode)每日一题 2286 以组为单位订音乐会的门票 | 线段树

2286. 以组为单位订音乐会的门票 题干 一个音乐会总共有 n 排座位,编号从 0 到 n - 1 ,每一排有 m 个座椅,编号为 0 到 m - 1 。你需要设计一个买票系统,针对以下情况进行座位安排: 同一组的 k 位观众坐在 同一排座…

物联网实训室建设的必要性

物联网实训室建设的必要性 一、物联网发展的背景 物联网(IoT)是指通过信息传感设备,按照约定的协议,将任何物品与互联网连接起来,进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的一种网络…

c语言实例 068

大家好,欢迎来到无限大的频道 今天给大家带来的是c语言。 题目描述 创建一个单链表,进行存储数据并且打印 创建一个单链表的基本步骤包括定义链表节点的结构体、实现插入数据的功能,以及打印链表的内容。以下是一个简单的C语言示例&#…

QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题

1、问题代码 #include <QCoreApplication>#pragma pack(push, 1) typedef struct {int a; // 4字节float b; // 4字节char c; // 1字节int *d; // 8字节 }testStruct; #pragma pack(pop)#include <QByteArray> #include <QDebug>int main() {testStruct …

【C++前缀和 数论 贪心】2245. 转角路径的乘积中最多能有几个尾随零|2036

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 质数、最大公约数、菲蜀定理 贪心&#xff08;决策包容性) LeetCode2245. 转角路径的乘积中最多能有几个尾随零 给你一个二维整数数组 grid &#xff0c;大小为 m x …

【有啥问啥】二分图(Bipartite Graph)算法原理详解

二分图&#xff08;Bipartite Graph&#xff09;算法原理详解 引言 二分图&#xff08;Bipartite Graph&#xff09;&#xff0c;又称二部图&#xff0c;是图论中的一个重要概念。在实际应用中&#xff0c;二分图模型经常用于解决如匹配问题、覆盖问题和独立集问题等。本文将…

实验2思科网院项目2.7.2-packet-tracer---configure-single-area-ospfv2---实践练习

实践练习 2.7.2-packet-tracer---configure-single-area-ospfv2---实践练习physical-mode 实验拓扑 相关设备配置 实验目标: 第 1 部分&#xff1a;构建网络并配置设备的基本设置 第 2 部分&#xff1a;配置和验证单区域 OSPFv2 的基本部署 第 3 部分&#xff1a;优化和验…

【STM32】 TCP/IP通信协议(3)--LwIP网络接口

LwIP协议栈支持多种不同的网络接口&#xff08;网卡&#xff09;&#xff0c;由于网卡是直接跟硬件平台打交道&#xff0c;硬件不同则处理也是不同。那Iwip如何兼容这些不同的网卡呢&#xff1f; LwIP提供统一的接口&#xff0c;底层函数需要用户自行完成&#xff0c;例如网卡的…

动态时钟控件:Qt/C++ 项目代码解读

基于Qt的动态时钟控件项目。该项目展示了如何通过Qt的绘图系统绘制一个带有表盘背景、时针、分针、秒针、以及时间日期显示的时钟。同时&#xff0c;这个时钟控件支持背景切换&#xff0c;并且每秒钟刷新一次&#xff0c;实时显示当前时间。 项目结构与功能概述 该时钟控件主…