Part1:使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习——计算机图形学世界中相机的工作原理

Part1:使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习

    • 1. 效果图
    • 2. 原理
      • 2.0 前向成像模型
      • 2.1 世界坐标系
      • 2.2 相机坐标系
      • 2.3 坐标变换
      • 2.4 投影转换
      • 2.5 数据
    • 3. 源码
    • 参考

是否有一种方法可以仅从一个场景多张不同视角的照片中捕获整个3D场景?
有。 NeRF:将场景表示为用于视图合成的神经辐射场中(NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis),Mildenhall等人(2020)的论文解答了这个问题。NeRF的更简单实现赢得了 TensorFlow社区聚光灯奖 。

这篇博客将介绍计算机图像学的基础主题,包括:

  1. 前向成像模型(拍照)
  2. 世界到相机(3D到3D)转换
  3. 相机到图像(3D到2D)转换
  4. 所需的数据集,涵盖了所有先决条件。

后边的博客将研究各种基本概念:NeRF:将场景表示为视图合成的神经辐射场。我们还将学习如何使用TensorFlow和Python实现这些概念。

1. 效果图

如下图:从不同视角(顶部)给算法一些热狗盘的图片可以 top精确地生成整个3D风景( 底部 )

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

2. 原理

神经辐射场(Neural Radiance Fields NeRF) 将 深度学习 和 计算机图形学(Computer Graphics)结合在一起。计算机图形学一直是现代技术的奇迹之一。渲染逼真的 3D 场景(rendering realistic 3D scenes) 的应用范围从电影、太空导航到医学。

本课是关于使用 TensorFlow 和 Keras 使用 NeRF 进行计算机图形学和深度学习的 3 部分系列的第 1 部分:

  1. 使用 TensorFlow 和 Keras 的 NeRF 计算机图形学和深度学习:第 1 部分(本文)
  2. 使用 TensorFlow 和 Keras 的 NeRF 计算机图形学和深度学习:第 2 部分
  3. 使用 TensorFlow 和 Keras 的 NeRF 计算机图形学和深度学习:第 3 部分

这篇博客将介绍相机在计算机图形学世界中的工作原理及使用的数据集。

1. 世界坐标系(World Coordinate Frame): 表示物理 3D 世界
2. 相机坐标系(Camera Coordinate Frame): 代表虚拟3D相机世界
3. 坐标变换(Coordinate Transformation): 从一个坐标系映射到另一个坐标系
4. 投影变换(Projection Transformation): 在 2D 平面上形成图像(相机传感器)
5. 数据集: 了解 NeRF 的数据集

2.0 前向成像模型

想象一下你带着相机出去,发现了一朵美丽的花。你考虑你想要捕捉它的方式,定位相机,校准设置,然后拍照。
将世界场景转换为图像的整个过程被封装在一个通常称为 前向成像模型 中可视化模型 的数学模型中

在这里插入图片描述

前向成像模型从世界坐标系中的一个点开始。然后使用坐标变换将其变换为相机坐标系。然后使用投影变换将相机坐标变换到图像平面上。

2.1 世界坐标系

在现实世界中看到的所有形状和物体都存在于三维参考系中。我们把这个参照系称为世界坐标系。 使用这个坐标系可以很容易地定位三维空间中的任何点或对象。

让我们取三维空间中的点P,如下图
图4:世界坐标系。

这里, x ˆ w , y ˆ w , z ˆ w \^{x}_w,\^{y}_w,\^{z}_w xˆwyˆwzˆw表示世界坐标系中的三个轴。点P的位置通过向量 X w X_w Xw来表示:
X w = { x w y w z w } X_w= \begin{Bmatrix} x_w \\ y_w \\ z_w \end{Bmatrix} Xw= xwywzw

2.2 相机坐标系

与世界坐标系一样,有另一个参考系,称为相机坐标系
在这里插入图片描述

这个画框位于相机的中心。与世界坐标系不同,这不是一个静态的参照系可以在移动相机拍照时移动这个坐标系。
图4中的同一点P现在可以用两个参考系定位,如图世界到相机的坐标变换:
在这里插入图片描述

而在世界坐标系中,点由 X w X_{w} Xw向量定位,在相机坐标系中由 X c X_{c} Xc向量定位。如图6所示。

X c = { x c y c z c } X_c= \begin{Bmatrix} x_c \\ y_c \\ z_c \end{Bmatrix} Xc= xcyczc
注:点P的位置不变。只有观察点的方式会随着参照系的变化而变化。

2.3 坐标变换

建立了两个坐标系:世界和相机,目标是在相机坐标 X c X_c Xc 和世界坐标 X w X_w Xw 之间建立一座桥梁。
X c = R × ( X w − C w ) X_c = R \times (X_w - C_w) Xc=R×(XwCw)

R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] R= \begin{bmatrix} r11 & r12 & r13\\ r21 & r22 & r23 \\ r31 & r32& r33 \end{bmatrix} R= r11r21r31r12r22r32r13r23r33

X c = R × ( X w − C w ) ⇒ X c = R × X w − R × C w ⇒ X c = R × X w + t X_c = R \times (X_w - C_w) \\ \rArr X_c = R \times X_w - R \times C_w \\ \rArr X_c = R \times X_w + t Xc=R×(XwCw)Xc=R×XwR×CwXc=R×Xw+t

R表示相机坐标系相对于世界坐标系的方向,由矩阵表示。
其中 t 表示平移矩阵。在上面的等式中有一个矩阵乘法和一个矩阵加法。如果可以的话,将事物压缩为单个矩阵乘法总是更可取的。为此,我们将使用一个称为齐次坐标(homogeneous coordinates)的概念。
齐次坐标系允许我们在N+1维空间中用虚拟变量表示N维点。利用齐次坐标系,我们可以将 X w ( 3 D ) X_ w(3D) Xw3D变换为 X w ( 4 D ) {X}_w(4D) Xw4D
有了齐次坐标,可以把方程压缩成矩阵乘法。
在这里插入图片描述

其中 C e x C_{ex} Cex是保持相机坐标系的方向和位置的矩阵。我们可以将此矩阵称为相机外部矩阵,因为它表示旋转和平移等值,这两个值都是相机的外参(Camera Extrinsic)。**
C e x = [ r 11 r 12 r 13 t x r 21 r 22 r 23 t y r 31 r 32 r 33 t z 0 0 0 1 ] C_{ex}= \begin{bmatrix} r11 & r12 & r13 & t_x\\ r21 & r22 & r23 & t_y \\ r31 & r32& r33 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} Cex= r11r21r310r12r22r320r13r23r330txtytz1

2.4 投影转换

从一个点开始 P 及其(同质)世界坐标 X w X_w Xw 借助相机外在矩阵 C e x C_{ex} Cex X w {X}_w Xw 已转换为其(均匀)相机坐标 X c X_c Xc.

要理解投影变换,唯一需要的是类似的三角形。
实际的图像平面不是虚拟平面,而是图像传感器阵列。3D场景落在这个传感器上,导致图像的形成。因此 x_i 和 y_i x_i 在图像平面中可以用像素值替换 u,v。

最后得到:
[ u ˜ v ˜ w ˜ ] = [ f 0 o x 0 0 f o y 0 0 0 1 0 ] [ x c y c z c 1 ] \begin{bmatrix} \~u \\ \~v \\ \~w \end{bmatrix} = \begin{bmatrix} f & 0 & o_x & 0\\ 0 & f & o_y& 0\\ 0 & 0 & 1& 0 \end{bmatrix} \begin{bmatrix} x_c \\ y_c \\ z_c \\ 1 \end{bmatrix} u˜v˜w˜ = f000f0oxoy1000 xcyczc1

可以简单地表示为
u ˜ = C i n × x ˜ c \~{u}=C_{in} \times \~{x}_c u˜=Cin×x˜c

其中 x ~ c \tilde{x}_c x~c 是包含点在相机坐标空间中的位置的向量集 是包含点在相机坐标空间中的位置的一组向量, u ^ \hat{u} u^ 是包含图像平面上点位置的值集。分别 C i n C_{in} Cin 表示将点从 3D 照相机空间映射到 2D 空间所需的值集。

C i n = [ f 0 o x 0 0 f o y 0 0 0 1 0 ] C_{in} = \begin{bmatrix} f & 0 & o_x & 0\\ 0 & f & o_y& 0\\ 0 & 0 & 1& 0 \end{bmatrix} Cin= f000f0oxoy1000

可以称 C i n C_{in} Cin相机固有(camera intrinsic)属性,表示焦距和图像平面中心等值 和 x 和 轴,两者都是相机内参。

2.5 数据

将讨论要使用的数据。作者已经开源了数据集,数据集的链接发布在 NeRF 的官方存储库中。数据集的结构如图 11 所示。
有两个文件夹,nerf_synthetic和nerf_lilf_data。接下来将在本系列中使用合成数据集,选择了“船舶”数据集,但请随时下载其中任何一个。
解压缩数据集后发现三个包含图像的文件夹: train、val、test 和 transforms_train.json、transforms_val.json、 transforms_test.json其中包含相机的方向和位置。

3. 源码

解析tranfomrs_train.json

# 解析转换文件
# python transform_json_read.py# 导入包
import json
import numpy as np# 定义json训练文件路径
jsonTrainFile = "transforms_train.json"# 打开并读取文件内容
with open(jsonTrainFile, "r") as fp:jsonTrainData = json.load(fp)# 打印json文件内容
print(f"[INFO] Focal length train: {jsonTrainData['camera_angle_x']}")
print(f"[INFO] Number of frames train: {len(jsonTrainData['frames'])}")# json文件有俩个key: camera_angle_x(摄像机的角度) 和 frames(每个图像帧的元信息)
firstFrame = jsonTrainData["frames"][0]# 获取转换矩阵和文件名 获取第一帧:每一帧都是一个字典,包含transform_matrix和file_path两个关键点,
# file_path是到所考虑的图像(帧)的路径,transform_matrix是该图像的相机到世界的矩阵。
tMat = np.array(firstFrame["transform_matrix"])
fName = firstFrame["file_path"]# 打印数据
print(tMat)
print(fName)

参考

  • https://pyimagesearch.com/2021/11/10/computer-graphics-and-deep-learning-with-nerf-using-tensorflow-and-keras-part-1/

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

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

相关文章

IDEA+Mysql+Sqlserver安装步骤_kaic

下载Intellij 开发工具,如果有请检查软件是否过期,如果过期卸载电脑上的Intellij软件。卸载步骤: 打开控制面板,选择卸载程序找到Intellij右键卸载 如果没有请保存文档中的Intellij.zip压缩包,进行安装,安装步骤 双…

电脑重置网络

1、键盘WinR键,弹出窗口 2、然后在里面输入cmd输入CMD 3、出现的命令提示框内输入“netsh winsock reset"按”Enter“键 4、重启电脑后生效。

重置电脑

步骤1: 以Win10系统为例 直接在搜索框输入:reset 或者直接选择「设置」-「更新和安全」-「恢复」 步骤2: 步骤3: 根据个人情况选择【保留我的文件】或者【删除所有内容】

如何让Win10 重置此电脑功能无法使用

环境: Win10 专业版 问题描述: 通过设置-更新和安全-恢复-重置此电脑,如何让Win10 重置此电脑功能无法使用 解决方案: 1.PE下删除Win Re 恢复分区,然后重置就无法使用

重置计算机后无法开机,win10重置此电脑失败怎么办_win10重置此电脑失败无法开机修复方法...

当win10系统使用时间长了,难免会有一些电脑故障的出现,这时有些用户就会选择使用重置电脑的方式来解决,但是最近有用户再给自己的win10系统进行重置时总是出现失败的情况,那么win10重置此电脑失败怎么办呢?下面就来告诉…

win10怎么重置计算机,如何重置Win10系统电脑

当系统出现一些难以解决的问题时,我们一般会选择重置电脑来解决问题,比起重装电脑来说简单很多,但是也要注意有可能会失败。下面小编就以win10为例,给大家讲讲怎么重置电脑的操作步骤吧。 操作步骤: 1、打开屏幕侧方的…

DELL 笔记本 - Windows 10 恢复 / 重置此电脑

DELL 笔记本 - Windows 10 恢复 / 重置此电脑 1. Windows 设置 2. 更新和安全 3. 恢复 4. 删除所有内容 5. 所有驱动器 6. 仅删除我的文件 7. 重置 References https://yongqiang.blog.csdn.net/

win10系统如何重置电脑

在win10系统出现系统问题无法修复的时候,我们可以尝试使用win10系统自带的重置功能,相比重装系统在操作上可能要简单不少,不过同样也有失败的风险。下面就让小编带领大家进行一下win10系统重置电脑的操作吧。 win10系统如何重置电脑 1、打…

win10怎样重置电脑

win10怎样重置电脑 windows10提供重置电脑的功能,如果系统遇到问题,运行不正常,或者想刷新系统,可以考虑重置电脑,使电脑有一个全新的干净的系统。下面介绍重置的方法 点击开始菜单,然后选择“设置” 在设…

【教程】Win10重置电脑和重装系统

如果电脑系统出现蓝屏或者卡顿的故障,很多用户会想要通过重装系统来解决。 其实在Windows10系统中会有“重置此电脑”的功能,类似于恢复出厂设置的意思。很多时候只需要重置电脑就足够解决用户的需求了,duck不必繁琐的制作启动U盘来重装系统…

计算机系统如何重置,如何重置电脑系统?看这里1分钟教会你!

原标题:如何重置电脑系统?看这里1分钟教会你! 哈喽,大家好我是小黑~最近后台有小伙伴留言咨询#如何重置Windows 10系统?#。 重置系统是Windows系统自带的功能,此功能会将错误的系统文件替换,从而…

Win10笔记本电脑怎么直接重置初始化

很多朋友都知道电子设备一般都会有初始化的功能,自己使用的电脑毛病越来越多,不知道能不能重置初始化,今天我给朋友们讲讲Win10笔记本电脑怎么直接重置初始化让电脑系统焕然一新,大家可以按下面的步骤操作。 Win10笔记本电脑怎么直…

重装也无法修复此计算机,win10系统重置此电脑失败怎么解决

win10系统重置失败怎么办呢?有时候因为电脑各种各样的问题我们需要进行重置系统,可是有些粗心的朋友忘记给笔记本充电了。造成win10系统重置失败的情况。下面,我就给大家介绍一下win10系统重置失败的解决方法 win10系统是微软安全性最高的一款版本,其游戏性能以及易用性也深…

如何给电脑系统重置系统?方法其实很简单

Win11怎么一键重置?很多朋友感觉电脑系统遇到比较大的问题,必须要进行重置,但就是不知道如何操作,今天小编带来了Win11一键重置电脑的操作步骤,一种方法是在电脑还能进入桌面的时候进行操作,另一种则是电脑…

计算机的此电脑管理出错了,win10重置此电脑出现问题怎么处理_win10重置初始化失败解决方法...

重置此电脑是什么意思呢?总的来说,就是对电脑进行恢复出厂设置,一般只是恢复得到初始的状况,但是近日有用户在给自己的win10系统进行重置此电脑操作时出现问题,导致初始化失败,那么win10重置此电脑出现问题…

电脑重置可能出现的问题及解决办法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、重置电脑后发现没有以太网二、以太网出现后但是发现网络无法识别总结 前言 重置电脑后发现WIFI可以用但是没有以太网,连接不上。 提示&#xf…

计算机基本操作怎么保存,win10重置此电脑保留我的文件怎么操作

win10重置此电脑保留我的文件怎么操作 相信许多用户都已经在使用win10系统了,使用久了电脑难免有些垃圾无法清楚导致电脑使用起来会出现卡顿现象。这时我们可能就会选择重置此电脑,可是电脑里的文件我们还要,要怎么办呢?下面我们就…

重装也无法修复此计算机,win10系统重装|Win10“重置此电脑”时出现问题解决教程...

在win10系统中,“重置此电脑”功能相当于重装系统,可以将系统恢复到初始的状态,解决电脑使用过程中出现的系统异常或操作卡顿等问题。那么,这个近乎重装系统的功能如果出现问题,那么将可能导致系统无法正常启动。别担心…

win10千万不要重置_ Win10重置此电脑功能详细使用教程

Win10重置此电脑这个功能,知道的人一定不少吧,相信一定有更多的人在不明真相的情况下用了这个功能,运气不好的小伙伴就丧失了很多宝贵的资料。其实,这也不能怪大家,有些名称微软说的也很含糊,比如说“个人文件”,在不同的条件下,它指代的内容也不一样。今天我来讲解一下…

win10重置此电脑卡在99%的解决方法(6种)

当电脑运行不正常时,有些人会选择使用“重置此电脑”。但是事实证明这个功能很容易操作失败,许多人抱怨他们在使用这个功能时出现错误,比如重置卡在正在重置此电脑99%一天。这很有可能是硬件驱动出现了问题或Windows安装程序出错而导致。不用…