Nerf流程

ops/2025/3/5 14:22:13/

一.数据处理:
在输入数据时,并没有给出相机的内参与外参,需要在数据处理得出相机的内外惨数,作者使用COLMAP得到相机参数后,转成NeRF可以读取的格式即可以用于模型训练。在这里插入图片描述
旋转矩阵的第一列到第三列分别表示了相机坐标系的X, Y, Z轴在世界坐标系下对应的方向;平移向量表示的是相机原点在世界坐标系的对应位置。在COLMAP得到相机参数,会进行将colmap得到的c2w旋转矩阵中的第一列和第二列互换,第三列乘以负号,相机坐标系轴的朝向进行了变换:X和Y轴调换,Z轴取反
在这里插入图片描述
相机的内参矩阵K:内参矩阵K包含4个值,其中fx和fy是相机的水平和垂直焦距(对于理想的针孔相机,fx=fy)。焦距的物理含义是相机中心到成像平面的距离,长度以像素为单位。cx和cy是图像原点相对于相机光心的水平和垂直偏移量。cx,cy有时候可以用图像宽和高的1/2近似。
在这里插入图片描述
上述处理将COLMAP坐标系转移到llff坐标系下

二. 加载数据:
mages(维度【图像数, 图像高, 图像宽, 图像通道数】),
poses(维度【图像数, 3, 5】),
bds(维度【图像数, 2】),
其中poses的3*5维度对应了每张图像的拍摄相机的旋转和平移矩阵,以及H和W以及焦距f信息。这些信息的作用是生成相机射线,并变换到世界坐标系下。bds对应了每个图像拍摄到的内容在世界坐标系的空间范围(作为相机射线采样时的边界范围)。bds的2维度表示【near,far】。在这里插入图片描述

三、坐标系转换与图像缩放
1、在_load_data()函数里,有一个用于图像缩放的factor比例参数,将HxW的图像缩放成(H/factor)x(W/factor)。外参(位置和朝向)不变,相机的焦距f,cx, 和cy等比例缩放。下图的示意图展示了当相机位置不变,相机视野(Field of view, FOV)不变的情况下,图像的高和焦距长短的关系。
在这里插入图片描述
2、llff坐标系转换到nerf坐标系下
把旋转矩阵的第一列(X轴)和第二列(Y轴)互换,并且对第二列(Y轴)做了一个反向。这样做的目的是将LLFF的相机坐标系变成OpenGL/NeRF的相机坐标系
在这里插入图片描述
这里列举对环绕视角进行处理:
在这里插入图片描述
对所有的相机位置进行平均,得到平均相机位置
在这里插入图片描述
将平均相机位置移动到坐标原点,对整个场景进行旋转
在这里插入图片描述
后续分为对前向还是环绕,我们这个依然是环绕场景处理:先进行缩放,每个相机发出射线,找到一个点到所有射线的距离最近,以这个点为原点,构建新的世界坐标系。相机与原点的连线取平均得到Z轴坐标,然后随便找个坐标,与Z轴做叉乘得到X轴,X轴与Z轴做叉乘得到Y轴。再通过缩放,统计相机半径,得到平均半径,放置新的相机,得到新的相机视角旋转矩阵用于测试,可以使用测试集的数据,也可以使用这个数据用于测试。
在这里插入图片描述

数据预处理:根据所有图像数据,得到相机内参(焦距,1个参数)、相机位姿(坐标变换,12个参数)和稀疏3D点(推理物体离相机最近和最远距离,2个参数),给每张图像赋予17个参数(1+12+2+2,其中最后一个2为图像的长宽)
训练:准备好图像(用于提供real像素值)和17个参数,根据相机位姿和相机焦距得到成像平面,并根据图像的长宽限制成像范围。取成像平面中某一位置(对应的real像素值是已知的),与相机位置的连线构成一条射线,得到二维的视角参数,在最近和最远距离内采样 n 个点,得到三维的位置参数,构成n个五维向量。然后根据相机位姿参数转化到世界坐标系,送入MLP中,预测每个点的rgb和sigma,此时并不会直接对采样点进行监督,而是根据体渲染得到fake像素值,通过real和fake之间的误差来监督训练。
测试:只要事先确定17个参数,其他步骤和训练类似。

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


http://www.ppmy.cn/ops/163326.html

相关文章

腾讯 TDF 即将开源 Kuikly 跨端框架,Kotlin 支持全平台

今天,在腾讯的 Shiply 平台看 Flutter 动态化自研框架 Conch 时,在侧边栏看到了有「跨端开发框架」的介绍,点开发现有两个产品: Hippy:面向前端技术栈的跨端开发框架,Web原生开发体验,支持 Rea…

HttpServletRequest、ServerHttpRequest 和 ServerWebRequest作用详解

1、HttpServletRequest 所属框架:Java Servlet API(基于阻塞式 I/O)。 使用场景:传统的 Servlet 应用(如 Spring MVC的Tomcat、常用的容器等等)。 作用:表示客户端的 HTTP 请求。 常用方法&a…

【JQuery—前端快速入门】JQuery 基础语法

JQuery JQuery是一个快速、简洁且功能丰富的JavaScript框架; 1. 引入依赖 使用JQuery需要先引入对应的库&#xff1b; 在使用 JQuery CDN 时&#xff0c;只需要在 HTML 文档中加入如下代码 <script src"https://code.jquery.com/jquery-3.7.1.min.js"></s…

0304作业

思维导图 作业1 在终端提示输入一个成绩&#xff0c;通过shell判断该成绩的等级 [90,100]:A [80, 90):B [70, 80):C [60, 70): D [0,60):不及格 #!/bin/bash read -p "请输入成绩&#xff1a;" score if [ "$score" -ge 0 -a "$score" -lt 60 …

现今大语言模型性能(准确率)比较

现今大语言模型性能(准确率)比较 表头信息:表的标题为“大语言模型性能比较结果”(英文:Table 1: Large Language Model Performance Comparison Results),表明该表是用于对比不同大语言模型的性能。列信息: 模型:列出参与比较的不同大语言模型名称,包括LLAMA3(70B)…

网络安全有必要学编程吗?

当下编程已经成为一种必备技能&#xff0c;尤其是在数字化和科技快速发展的时代&#xff0c;掌握编程技能对我们的职业发展有着重要的作用&#xff0c;那么网络安全需要学编程吗?这也是很多小伙伴关心的问题&#xff0c;我们来看看吧。 需要&#xff0c;网络安全需要学习编程。…

Spring Boot 监听器(Listeners)详细教程

Spring Boot 监听器&#xff08;Listeners&#xff09;详细教程 目录 Spring Boot 监听器概述监听器核心概念最佳使用场景实现步骤高级配置详细使用场景总结 1. Spring Boot 监听器概述 Spring Boot 监听器&#xff08;Listeners&#xff09;基于 Spring Framework 的事件机制…