我正在尝试为我的 SLAM 项目模拟镜头失真效果。扫描的彩色 3D 点云已经提供并加载到 OpenGL 中。我想要做的是以给定的姿势渲染 2D 场景,并在来自鱼眼相机的真实图像和渲染图像之间进行一些视觉测距。由于相机镜头畸变严重,渲染阶段也要考虑。
问题是我不知道把镜头畸变放在哪里。着色器?
我找到了一些开放代码,将失真放入几何着色器中。但是我猜这个畸变模型与计算机视觉社区中的镜头畸变模型不同。在 CV 社区中,镜头畸变通常发生在投影平面上。
这个与我的工作非常相似,但他们没有使用失真模型。
有人有好主意吗?
我刚刚找到了另一个实现。他们的代码在片段着色器和几何着色器中实现了失真。但是片段着色器版本可以应用于我的情况。因此,我想以下内容会起作用:
# vertex shader
p'=T.model x T.view x p
p_f = FisheyeProjection(p') // custom fish eye projection
Run Code Online (Sandbox Code Playgroud) 我发现一些 Latex 语法在我的 git 页面中没有用 MathJax 和 Jekyll 呈现。
例如,在这篇文章中
这一行: $z = \overbrace{\underbrace{x} \text{real} +\underbrace{iy} \text{imaginary}}^\text{complex number}$
应该看起来像这样

其他一些乳胶语法效果很好,像这样
我应该添加什么来解决这个问题?我猜 MathJax 没有加载所需的库(例如,上面的例子中的 \usepackage{amsmath})。
页面代码在这里。
下面的代码展示了我对matjax的配置。
<script type="text/x-mathjax-config"> MathJax.Hub.Config({ TeX: { equationNumbers: { autoNumber: "all" } } }); </script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
processEscapes: true
}
});
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud) 我有N乘以4的数据,如下所示将数据推回去。
vector<vector<int>> a;
for(some loop){
...
a.push_back(vector<int>(4){val1,val2,val3,val4});
}
Run Code Online (Sandbox Code Playgroud)
N小于13000。为防止不必要的重新分配,我想提前4个空间保留13000。
在阅读了有关该主题的多个相关文章(例如,如何保留多维向量?)之后,我知道以下将完成工作。但是我想使用reserve()或任何类似的函数(如果有)来使用它push_back()。
vector<vector<int>> a(13000,vector<int>(4);
Run Code Online (Sandbox Code Playgroud)
要么
vector<vector<int>> a;
a.resize(13000,vector<int>(4));
Run Code Online (Sandbox Code Playgroud)
如何仅保留内存而不增加向量大小?