有没有大佬懂图片处理能够实现的,或者使用其他技术实现,绿泡泡:RHlsYW5fc3RyaXZl
1
yankebupt 48 天前
四角的视角方向已知的话,深度图精度足够高的话,不考虑投射到空间点云然后投影插值么?
算了看到 C++,肯定是要性能,要么就是四角的摄影机角度不知道要自己算(空间卷积拟合运算量爆炸),要么就是深度图精度不够,估计不行…… 话说为什么有人会用 C++在干这种 Nvidia DLSS 插帧在干的事情…… 课设么? |
2
yankebupt 48 天前
我不是专家,但是如果不知道视角插帧的话,我知道的至少有两种。
一种是 AI 模型插帧,性能巨差但是显卡加速,本质是卷积或者偷懒或优化过的卷积,被遮挡的像素估计出来像一点 可能半开源 还有一种就纯 2D 位移缩放旋转,被遮挡的像素基本就糊成一片(随便填的),比较快,CPU 能实时 60 插 120 帧 1080P 之类 后一种你可以下个 SVP Project 看看选项,有各种优化,性能的,估计(搜索)方法的,遮挡像素怎么填充的,满足各种喜好和性能需求…… |
3
dylanstrive OP @yankebupt 对的,就是课设。其他高级一点的方法都不懂,唯一能着手的就是 opencv 图像层面的处理,对性能其实也没啥要求,就是纯粹为了达到效果,都是些老的不能再老的一些东西了,像什么 DIBR 、根据 EPI 插值计算这些
|
4
decaydave 47 天前 1
只接触过 FSR3 插帧,可以跟你分享下大概思路
1. 基本逻辑,跟你说的差不多,用速度把图 A 、结果图 Result 和图 B 中的一点 p 关联起来,取这些位置的颜色 c_A ,c_B ,然后根据一定规则把这些颜色混合起来 c_Result = mix_function(c_A, c_B, params),最后把这个颜色存进 Result 对应的位置。所以关键在于怎么混合 2. 深度怎么用: Depth Clip ,大概目的是对于图 Result 中的一点 p ,算这一点在图 A 和图 B 中的对应点是否能被看见,把这个 vec2(bool)存到一个 mask 里,在混合的时候查询当前点的 DepthClip ,如果在 A 中不可见,那混合的时候就不考虑 A 的贡献,在 B 中不可见则不考虑 B 。 DepthClip 具体怎么算: 重投影深度 D_B 到 Result 时刻,取三个深度 buffer 上对应点的值 D_A, D_B, D_Result (要转进 Camera space),从你图里看应该没有 reverted depth ,那就 DepthClip.invisible_in_A = D_Result - D_A > threshold; DepthClip.invisible_in_B = D_Result - D_B > threshold. 至于这个 threshold 怎么算可以参考这篇文章 (Same as FSR3) https://www.microsoft.com/en-us/research/publication/minimum-triangle-separation-for-correct-z-buffer-occlusion/ 3. 有了 Depth Clip 后 Result 画面上会有一些地方同时不能在 A 和 B 中看见(DepthClip=(false,false)),也就是说 c_A 和 c_B 的贡献都会被去除。为了不让这些纯黑影响画面效果,FSR3 还有个填缝机制 (Inpainting) 本质上就是求当前画面的 mip chain (下采样),直到所有缝都被填上为止。然后将这些颜色填进缺失的像素中。 其他细节: 深度重投影 (包括写入 c_Result 本质上也是个重投影) 会出现多像素通过速度指向同一个像素的情况 (竞争), 处理竞争的思路本质上是保证前后遮挡关系,所以取深度较小者写入即可 |
5
IC0ZB 46 天前
有没有相机位姿的,有位姿直接 3d 空间投影好了。按理说你 opengl 渲染出来的应该是知道相机位姿的吧
|
6
dylanstrive OP @IC0ZB 你应该指的应该是 DIBR 基于深度渲染,根据相机位姿重投影到世界坐标系,然后将这些点再投影到虚拟相机位置的成像面,会存在遮挡空洞,最主要是课设不让做这个
|
7
dylanstrive OP @decaydave 谢谢佬的详细思路流程,我接下来再按照你的方式去尝试,奈何代码能力有点弱,万分感谢
|
8
dylanstrive OP @decaydave 大佬你好 我按照你的思路简单实现了整个大体流程,整个代码大概就 100 行不到,但是最后的效果不是很好,可以帮我优化修改一下吗,应该对你而言就是很简单了,有偿
|