paperMemo-prepare

寻找数据集的网站

https://www.visualdata.io/discovery

预处理RealEstate10K

下载

RealEstate10K 数据集介绍-【大规模摄像机轨迹视频剪辑数据集】

PS:大小大约7TB

抓取 YouTube 上的视频,并以指定时间戳、帧姿态来剪辑。应用类似于视图合成的模型中,例如,在Google的SIGGRAPH 2018年SIGGRAPH论文《立体放大:使用多平面图像学习视图合成》中,在训练过程中从每个剪辑中采样了三帧帧,两个用于预测模型,第三个作为计算视图合成损失的ground truth 训练网络。

数据集由一组.txt文件组成,格式如下:

1
2
3
4
<Video URL>
<frame1>
<frame2>
<...>

同一个视频的剪辑帧大约90%在训练集、10%在测试集。

每个frame包括3个参数

第1列:时间戳(int,视频开始的微秒数)

第2-6列:相机内在参数(float: focal_length_x, focal_length_y,principal_point_x, principal_point_y),即3*3矩阵K

第7-19列:相机姿态(floats ,以行优先顺序的3x4矩阵,即3*4矩阵P = [R|t]

image-20200706174219677

因此,KP将世界坐标系的(homogeneous) 3D坐标点映射到图片中(homogeneous) 2D点

相机内部特性以与分辨率无关(resolution-independent)的归一化图像坐标表示,其中图像的左上角为(0,0),图像的右下角为(1,1)。 通过像素大小对图像进行缩放,可以调整内在参数得到存储在磁盘上的任何分辨率帧(或在训练之前调整大小)。 对于分辨率为width x height 像素的图像,图像真实比例的K矩阵为

内参性质

pytube是用于爬虫下载youtube上的视频库

1
pip install pytube3

处理代码:

1
python preprocess_RealEstate10K.py

image-20200706175046167

补充知识

相机模型

像素坐标,图像坐标,相机坐标,世界坐标)的变换关系

成像的过程实质上是几个坐标系的转换, 也可以被称为射影变换(更多关于射影变换的内容可参考《计算机视觉中的多视图几何》) 。首先空间中的一点由 世界坐标系 转换到 摄像机坐标系 ,然后再将其投影到成像平面 ( 图像物理坐标系 ) ,最后再将成像平面上的数据转换到图像平面 ( 图像像素坐标系 )

成像的过程

针孔相机模型(最简单):

针孔相机模型2

  • 相机坐标系(三维坐标系)
    相机的中心被称为焦点或者光心(principal point),以焦点Oc为原点和坐标轴Xc,Yc,Zc组成了相机坐标系

  • 图像坐标系(二维坐标系)
    成像平面中,以成像平面的中心O′为原点和坐标轴x′,y′组成了图像坐标系

    相似三角形

    由相似三角形得出:

$$
\left{
\begin{array}{l}
x = f\frac{X}{Z} \
y = f\frac{Y}{Z} \
z = f
\end{array}
\right.
$$

通过扩展坐标维度构建齐次坐标 ,将z线性化
$$
\left[\begin{array}{c}x\y\end{array}\right] \Leftrightarrow
\left[\begin{array}{c}\hat{x}\\hat{y}\\hat{z}\end{array}\right] =
\left[\begin{array}{ccc}f&0&0&0\0&f&0&0\0&0&1&0\end{array}\right]
\left[\begin{array}{c}X\Y\Z\1\end{array}\right]
$$
具体步骤就是将x和y同时除以一个不为0的z,并且将z作为其添加维度的坐标,通常可以选择z=1

内参数

与相机自身特性相关的参数,比如相机的焦距、像素大小等;

成像平面坐标系像素坐标系的变换。

上面推导中使用的像点坐标p=(x,y)是成像平面坐标系下,以成像平面的中心为原点。而实际像素点的表示方法是以像素来描述,坐标原点通常是图像的左上角,X轴沿着水平方向向左,Y轴竖直向下。

像素是一个矩形块,这里假设其在水平和竖直方向的长度分别为:αβ。所以像素坐标和成像平面坐标之间,相差了一个缩放原点的平移
假设像素坐标的水平方向的轴为μ,竖直方向的轴为ν,那么将一个成像平面的坐标(x,y)在水平方向上缩放α倍,在竖直方向上缩放β倍,同时平移((c_x,c_y),就可以得到像素坐标系的坐标(μ,ν),其公式如下:
$$
\begin{array}{c}
u = \alpha\cdot x+ c_x \
v = \beta \cdot y + c_y
\end{array}
$$
带入
$$
\left{\begin{array}{c}
u = \alpha\cdot f\frac{X}{Z}+ c_x \
v = \beta \cdot f\frac{Y}{Z} + c_y
\end{array}\right. \Rightarrow \left{\begin{array}{c}
u = f_x\frac{X}{Z}+ c_x \
v = f_y\frac{Y}{Z} + c_y
\end{array}\right. 其中,f_x = \alpha \cdot f,f_y = \beta \cdot f
$$
齐次坐标的形式:
$$
\left[\begin{array}{c}\mu\\nu\1\end{array}\right] = \frac{1}{Z}\left[
\begin{array}{ccc}f_x&0&c_x\0&f_y&c_y\0&0&1\end{array}\right]\left[\begin{array}{c}X\Y\Z\end{array}\right]
$$
齐次坐标性质:缩放一个常量因子仍然是相等的:
$$
s(a,b,c)^T=(sa,sb,sc)^T
$$

Z挪到左边:
$$
\left[\begin{array}{c}\mu\\nu\1\end{array}\right]=Z\left[\begin{array}{c}\mu\\nu\1\end{array}\right] =\left[
\begin{array}{ccc}f_x&0&c_x\0&f_y&c_y\0&0&1\end{array}\right]\left[\begin{array}{c}X\Y\Z\end{array}\right]
$$
相机的内参数矩阵(Camera Intrinsics)K
$$
K=\left[
\begin{array}{ccc}f_x&0&c_x\0&f_y&c_y\0&0&1\end{array}\right]
$$
K有4个未知数和相机的构造相关,fx,fy和相机的焦距,像素的大小有关;cx,cy是平移的距离,和相机成像平面的大小有关。

相机成像的公式:
$$
p = KP
$$
其中,p是图像中像点的像素坐标, K是相机的内参数矩阵, P是下的三维点坐标。

求解相机内参数的过程被称为**标定**,在**SLAM( simultaneous localization and mapping, 即时定位与地图构建 )**中可以假定相机的内参是已知的,**而在三维重建中内参数则是未知的**,需要手动的标定(比如使用标定板),也有自标定的方法,不过精度较低 。

外参数

在世界坐标系中的参数,比如相机的位置、旋转方向等。

上式三维点坐标是在相机坐标系下的,相机坐标系会随着相机的移动而改变坐标的原点和各个坐标轴的方向。引入一个稳定不变坐标系:世界坐标系,该坐标系是绝对不变,SLAM中的视觉里程计就是求解相机在世界坐标系下的运动轨迹。

PcP在相机坐标系坐标,Pw是其在世界坐标系下的坐标,可以使用一个 3×3 旋转矩阵R和一个 3×1平移向量t,将Pc变换为Pw
$$
P_c = RP_w + t
$$

其齐次坐标:
$$
\left[\begin{array}{c}X_c\Y_c\Z_c\1\end{array}\right] = \left[\begin{array}{ccc}R_{11}&R_{12}&R_{13}&t_1\R_{21}&R_{22}&R_{23}&t_2\R_{31}&R_{32}&R_{33}&t_3\0&0&0&1\end{array}\right]\left[\begin{array}{c}X_w\Y_w\Z_w\1\end{array}\right]
$$

化简得:
$$
\left[\begin{array}{c}X_c\Y_c\Z_c\1\end{array}\right] = \left[\begin{array}{cc}R&t\0^T&1\end{array}\right]\left[\begin{array}{c}X_w\Y_w\Z_w\1\end{array}\right]
$$
相机的外参数(Camera Extrinsics)T
$$
T = \left[\begin{array}{cc}R&t\0^T&1\end{array}\right]
$$
结合内外参数得出 相机最终的成像矩阵矩阵 :

从 将真实场景中的三维点投影( 世界坐标系 )到二维的成像平面 ( 图像像素坐标系 )
$$
\left[\begin{array}{c}\mu\\nu\1\end{array}\right] = \left[
\begin{array}{ccc}f_x&0&c_x&0\0&f_y&c_y&0\0&0&1&0\end{array}\right]\left[\begin{array}{cc}R&t\0^T&1\end{array}\right]\left[\begin{array}{c}X_W\Y_W\Z_W\1\end{array}\right]
$$
p=(μ,ν)是像素坐标系中的像素点;

Pc=(Xc,Yc,Zc)是相机坐标系场景中的三维点;

带入外参数,将该坐标变换为世界坐标系Pw=(Xw,Yw,Zw) 。

之后还有一系列畸变矫正、数字化处理等操作暂时不必了解太细。

相机坐标系参数转换

  • fx, fy: The focal length used to take image in pixels
  • cx, cy: The centre of the image. Ideally it is equal to (height/2, width/2)
  • The focal len in pixels is calculated from the Field of View and Sensor Size of camera, as derived from here:
1
2
3
4
5
F = A / tan(a)
Where,
F = Focal len in pixels
A = image_size/2
a = FOV/2

Here are the calculation for our synthetic images, with angles in degrees for image output at 288x512p:

1
2
Fx = (512 / 2) / tan( 69.40 / 2 ) = 369.71 = 370 pixels
Fy = (288 / 2) / tan( 42.56 / 2 ) = 369.72 = 370 pixels

旋转矩阵

1
2
3
4
5
6
7
8
9
10
11
12
zAxis = origin - lookat
yAxis = up
xAxis = torch.cross(yAxis, zAxis, dim=1)
xAxis = xAxis / torch.sqrt(torch.clamp(torch.sum(xAxis * xAxis, dim=1).unsqueeze(1), min=1e-10))
yAxis = yAxis / torch.sqrt(torch.clamp(torch.sum(yAxis * yAxis, dim=1).unsqueeze(1), min=1e-10))
zAxis = zAxis / torch.sqrt(torch.clamp(torch.sum(zAxis * zAxis, dim=1).unsqueeze(1), min=1e-10))

# print("xAxis: ", xAxis.shape)
xAxis = xAxis.view([batchSize, 3, 1])
yAxis = yAxis.view([batchSize, 3, 1])
zAxis = zAxis.view([batchSize, 3, 1])
rotMat = torch.cat([xAxis, yAxis, zAxis], dim=2)

bug

‘No module named ‘quaternion’’

conda install -c conda-forge quaternion

No module named ‘skimage’

conda install scikit-image

No module named ‘open3d’

conda install -c open3d-admin open3d

No module named ‘pytorch3d’

项目链接:https://github.com/facebookresearch/pytorch3d

ubuntu

conda install pytorch3d -c pytorch3d

window

https://www.cnblogs.com/VVingerfly/p/13502376.html

image-20200830121024538

No module named ‘openEXR’

主要是window报这个错,因为直接pip install openEXR会出现编译问题。

参考在windows上安装python库–pyexr

先下载对应python版本的OpenEXR库文件

pip install 下载位置\OpenEXR-1.3.2-cp37-cp37m-win_amd64.whl

就可以了。

image-20200830115546415

发生了一个小意外,当时运用openEXR库中的Imath moudle 误导入了imath库,

哈哈哈哈,发现有人用韩文做函数名也是可以的。

image-20200827202134723

AttributeError: Can’t pickle local object ‘Sharpen..create_matrices’

参考:https://blog.csdn.net/weixin_43866860/article/details/93890551

把Pytorch的DataLoader模块,当 num_workers设置为0.

因为window没有Ubuntu的fork()调用。

AttributeError: module ‘numpy’ has no attribute ‘float128’

参考:https://blog.csdn.net/tianxifeng/article/details/103523076

首先去https://www.lfd.uci.edu/~gohlke/pythonlibs/网站下载编译好的二进制安装包PyOpenGL,在pip安装(但还是没有解决,因此去Ubuntu吧。)

image-20200830115559394

Missing key(s) in state_dict: “module.backbone.layers.0.stage_1.layers.0.weight”,

去掉字典里的‘module.’

当前模型框架

模型框架

数据集由 realsense(现实场景)与cleargrasp(透明物体)两部分组合,其中cleargrasp(透明物体)需要自己生成ground truth

疑问:

单个数据集所给参数不一致,所以单独训练网络? 担心泛化能力。

每次训练接着上一次训练,运行12个小时的结果(训练时长太长,一个物品5000张图片,训练集有5种物品2.5W张图片)并且运行时间稍长电脑就会卡。

image-20200908123700702

训练Normal时内存不够

RuntimeError: CUDA out of memory. Tried to allocate 480.00 MiB (GPU 0; 7.79 GiB total capacity; 4.55 GiB already allocated; 362.38 MiB free; 6.21 GiB reserved in total by PyTorch) (malloc at /opt/conda/conda-bld/pytorch_1587428398394/work/c10/cuda/CUDACachingAllocator.cpp:289)

image-20201022211621834

能否用生成的数据做groud truth?

ClearGrasp没有多视角结果图,但是包含大量的透明物体(能够做透明物体的视觉合成)

RealEstate10K没有对应的法线轮廓图,迁移过去(细节丢失较为严重,但是对于有孔洞的场景能够表示出来)

image-20200916212349051

image-20200916212411629

image-20200916212429656

image-20200916212447357

image-20200916212509988

image-20200916213811558

image-20200916213827073

image-20200916213839791

image-20200916213901235image-20200916214000157

image-20200916213921431

image-20200916213940405

透明多视角数据集的构建

所需

其中Laval数据集(或许可用HDR+ Burst Photography Dataset代替)需要翻墙.

http://indoor.hdrdb.com/

需要和http://vision.gel.ulaval.ca/~jflalonde/ 这位研究员索要,邮箱:jflalonde@gel.ulaval.ca

索要内容如下:

title: Academic research application for The Laval Indoor HDR Dataset

Dear Prof. Jean-François Lalonde,

Thank you for reading!
This is from College of Computer Science and Electronic Engineering, Hunan University, China. I am now a master student and is studying and doing research on Computer Vision.

I am currently constructing my dataset according to this paper that applies to The Laval Indoor HDR Dataset. This paper is “ Through the Looking Glass: Neural 3D Reconstruction of Transparent Shapes” :https://arxiv.org/abs/2004.10904
I am wondering if you could kindly send me the Laval Indoor HDR Dataset and the necessary information about it. I am willing to fill in and sign the terms of use agreement to download the dataset and promise they will be used only for research purposed.

Thank you very much for your kind consideration and I am looking forward to your early reply.

All the best,
Zezu Wang


Zezu Wang(王泽祖)
a graduate student in computer technology,
Hunan University, Changsha, China

Emial:
zezuwang@hnu.edu.cn

zezuwang@gmail.com

  • Laval Indoor scene dataset: Please download the dataset from this link. We use 1499 environment map for training and 645 environment map for testing. Please turn the .exr files into .hdr files, since our renderer does not support loading .exr files yet. Please save the training set and testing set in Envmap/train and Envmap/test separately.

    来源:HDR文件格式简介

    .hdr

    HDR的全称是High-Dynamic Range(高动态范围)。在此,我们先解释一下什么是Dynamic Range(动态范围),动态范围是指图像中所包含的从“最亮”至“最暗”的比值,也就是图像从“最亮”到“最暗”之间灰度划分的等级数;动态范围越大,所能表示的层次越丰富,所包含的色彩空间也越广。那高动态范围(HDR)顾名思义就是从“最亮”到“最暗”可以达到非常高的比值。

    以HDRsoft的高动态范围(HDR)图像格式保存的光栅图像或数码照片; 用于增强数字图像的色彩和亮度范围; 可以进行处理以修正暗影或洗掉图像的某些区域。

    .exr

    OpenEXR是由工业光魔(Industrial Light & Magic)开发的一种HDR标准。OpenEXR文件的扩展名为.exr,常见的OpenEXR文件是FP16(16bit Float Point,也被称为half Float Point)数据图像文件,每个通道的数据类型是FP16,一共四个通道64bpp,每个通道1个bit位用来标志“指数”,5个bit用来存放指数的值,10个bit存放色度坐标(u,v)的尾数,其动态范围从6.14 × 10 ^ -5到6.41 × 10 ^ 4。

    以OpenEXR格式存储的光栅图像,这是由Industrial Light&Magic开发的一种高动态范围(HDR)图像文件格式; 支持多层图像,有损和无损压缩以及16位和32位像素; 用于存储深光栅图像以获得高质量图形; 由光栅图形编辑程序和成像应用程序使用.

  • Optix Renderer: Please download our Optix-based renderer from this link. There is an Optix renderer included in this repository. But it is the renderer specifically modified to render the two-bounce normal. Please use the renderer from the link to render images. We will refer to the renderer in this repository as renderer-twobounce and the renderer from the link as renderer-general in the following to avoid confusion.

  • Colmap: Please install Colmap from this link. We use Colmap to reconstruct mesh from point cloud.

  • Meshlab: Please install Meshlab from this link. We use the subdivision algorithm in Meshlab to smooth the surface so that there is no artifacts when rendering transparent shape. This is important when the BRDF is a delta function.

环境配置

window(一直出错)

编译OptiX SDK 6.5.0

VS2015

参考【OptiX】OptiX介绍与示例编译

Optix SDK sample编译

image-20200929211451022

## ubuntu

cmake

1
2
3
sudo apt  install cmake-qt-gui
# 打开图形化cmake界面
cmake-gui

CUDA & OptiX

Installing the latest NVidia Driver, CUDA, and OptiX on Linux/Ubuntu 18.04

编译OptiX SDK7.1.0

1
2
3
4
5
6
7
8
9
10
11
12
#到.../NVIDIA-OptiX-SDK-7.1.0-linux64-x86_64/SDK/下

mkdir build
cd build/
#gcc对应版本
cmake .. -DCMAKE_C_COMPILER=/usr/bin/gcc-7
make -j4

显示
[100%] Linking CXX executable ../bin/optixHair
[100%] Built target optixHair
则成功

编译OptiX SDK6.5.0

出现”Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so
CMake Error at /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message):Could NOT find GLUT (missing: GLUT_glut_LIBRARY GLUT_INCLUDE_DIR)”

参考: 在Windows/Ubuntu下安装OpenGL环境(GLUT/freeglut)与跨平台编译(mingw/g++)

1
sudo apt-get install build-essential freeglut3 freeglut3-dev binutils-gold

搞定

opencv

下载镜像

ubuntu18.04下编译OpenCV3.4.9

注意一下python的版本,切换成自己常用的,删掉python2

1
2
测试
~/opencv-3.4.9/samples/cpp/example_cmake$g++ example.cpp -L /home/pabebe/opencv-3.4.9/build/lib -I /home/pabebe/opencv-3.4.9/build/include/ -lopencv_calib3d -lopencv_objdetect -lopencv_core -lopencv_photo -lopencv_dnn -lopencv_shape -lopencv_features2d -lopencv_stitching -lopencv_flann -lopencv_superres -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_imgproc -lopencv_videostab -lopencv_ml

the DevIL image library

来源:https://zoomadmin.com/HowToInstall/UbuntuPackage/libdevil-dev

1
2
sudo apt-get update -y
sudo apt-get install -y libdevil-dev

以下均用的OptiX SDK6.5.0, 因7.1.0会报错

编译 OptixRenderer(renderer-twobounce,论文已经包含的两次折射反射)

1
2
cmake-gui
如图配置

编译 OptixRenderer

最后,在build目录下打开终端

1
2
3
make
or
make -j4

出现’’[100%] Linking CXX executable ../../bin/optixRenderer’完成

### 编译 OptixRenderer(renderer-general)

下载链接

步骤同上.

Meshlab

参考Ubuntu下安装MeshLab教程

1
2
3
4
5
6
7
8
9
10
sudo add-apt-repository ppa:zarquon42/meshlab
sudo apt-get update
sudo apt-get install meshlab

卸载
sudo apt-get remove meshlab

移除PPA,输入以下命令:
sudo apt-get install ppa-purge
sudu ppa-purge ppa:zarquon42/meshlab

Colmap

参考

COLMAP在Ubuntu18.04下安装

三维重建_COLMAP安装、使用和参数说明(翻译自官方文档)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#依赖
sudo apt-get install

git

cmake

build-essential

libboost-program-options-dev

libboost-filesystem-dev

libboost-graph-dev

libboost-regex-dev

libboost-system-dev

libboost-test-dev

libeigen3-dev

libsuitesparse-dev

libfreeimage-dev

libgoogle-glog-dev

libgflags-dev

libglew-dev

qtbase5-dev

libqt5opengl5-dev

libcgal-dev

sudo apt-get install libcgal-qt5-dev
sudo apt-get install libatlas-base-dev libsuitesparse-dev

#Ceres Solver优化库安装
git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
git checkout $(git describe --tags) # Checkout the latest release
mkdir build
cd build
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make
sudo make install

#安装colmap
git clone https://github.com/colmap/colmap
cd colmap
git checkout dev
mkdir build
cd build
cmake ..
make
sudo make install

exr文件转hdr文件

1
2
3
4
sudo apt install pfstools
sudo apt install pfsview
for img in *.exr; do pfsin ${img} | pfsout ${img%%.exr}.hdr; done
sudo mv *.hdr /media/pabebe/E/download/100samplesDataset/hdr/train/

http://pfstools.sourceforge.net/download.html

生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 生成3000随机透明物体形状
python createShape.py --mode train --rs 0 --re 3000
# 生成相机参数以及对应depth maps渲染的xml
python createRenderFilesForDepths.py --mode train --rs 0 --re 3000
# 对于每种形状,从不同的视图渲染75个depth maps,并将depth maps融合在一起以生成一个mesh
python renderAndIntegrate.py --mode train --rs 0 --re 3000 --renderProgram /home/pabebe/workspace/OptixRenderer-master/build/bin/optixRenderer
# 为10个视图重建创建相机姿势
python createCamera10.py --mode train --rs 0 --re 3000
#创建渲染文件
python createRenderFilesRegularized.py --mode train --rs 0 --re 3000 --envRoot /media/pabebe/E/download/100samplesDataset
# 一个形状渲染10张图片
python renderImage.py --camNum 10 --mode train --rs 0 --re 3000 --renderProgram /home/pabebe/workspace/OptixRenderer-master/build/bin/optixRenderer
# 渲染the ground-truth 两次折射或反射后的法线和深度
python renderTwoBounce.py --camNum 10 --mode train --rs 0 --re 3000 --renderProgram /home/pabebe/workspace/TransparentShapeDatasetCreation/OptixRenderer/build/bin/optixRenderer

#为每个形状创建10个视图visual hull 。
python createVisualHull.py --camNum 10 --mode train --rs 0 --re 3000
#创建对应的渲染xml
python createRenderFileForVH.py --camNum 10 --mode train --rs 0 --re 3000
#结合两次折射或反射后的法线和深度渲染visual hull
python renderTwoBounceVisualHull.py --camNum 10 --mode train --rs 0 --re 3000

sh: 1: xvfb-run: not found

Xvfb是一个在类Unix系统中运行在内存的显示服务器,让你可以没有连接物理显示设备就能运行图形用户界面程序(比如谷歌浏览器)。许多人用Xvfb运行早期版本的谷歌浏览器来做“headless”测试。

sudo apt install xvfb

相机参数

camera中有三个参数,position、lookAt、up。

position,设置camera的位置。也就是把摄像机放在哪里。

lookAt,设置camera看向的位置,即摄像机在position的位置看向哪里。若position设置为(500,500,500),lookAt设置为(100,100,100)。其意思就是把camera放在坐标为(500,500,500)的位置,并把摄像头对准(100,100,100)位置看过去。

up。为摄像头的正方向。假设人眼为摄像头,那么摄像头的正方向就是从嘴巴–>眼睛–>头顶的方向为正方向。那么如果设置up为(1,0,0),则说明摄像头正方向(嘴巴–>眼睛–>头顶的方向)正方向和X轴的正方向平行。若up为(-1,0,0),则与X轴的负半轴平行。同理yz轴一致。(up值决定了你是躺着看,还是站着看还是倒立着看)

img

RefImgPerspcam.gif

球坐标系

球坐标系是一种利用球坐标(r,θ,φ)来表示一个点 P 在三维空间的位置的三维正交坐标系。

下图描述了球坐标的几何意义:原点O与目标点P之间的径向距离为r,O到P的连线与正z-轴之间的夹角为天顶角θ,O到P的连线在xy-平面上的投影线与正x-轴之间的夹角为方位角φ。

假设 P 点在三维空间的位置的三个坐标是 (r,theta,phi)。那么, 0 ≤ r 是从原点到 P 点的距离, 0 ≤ θ ≤ π 是从原点到 P 点的连线与正 z-轴的夹角, 0 ≤ φ < 2π 是从原点到 P 点的连线在 xy-平面的投影线,与正 x-轴的夹角。当 r=0 时,theta 与 phi 都一起失去意义。当 theta = 0 或 theta = pi 时,phi 失去意义。

20201004153838189

20201007214718398

训练

1
normal2 gt 出现 nan值, 说明之前渲染有问题

image-20210111163718046

39\

参考文章

SLAM入门之视觉里程计(2):相机模型(内参数,外参数) 讲的很详细

[图像]畸变校正详解

针孔相机投影模型以及畸变模型

多视图几何基础——深入理解相机内外参数

预处理realEstate10K代码,由于是两年前的版本不适用于现在,因此大幅度修改。

相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换

如何使用Typora编辑数学公式

---------------- 本文结束 ----------------

本文标题:paperMemo-prepare

文章作者:Pabebe

发布时间:2020年12月06日 - 17:31:26

最后更新:2021年04月08日 - 17:19:41

原始链接:https://pabebezz.github.io/article/5dace05d/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%