V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dylanstrive
V2EX  ›  外包

有偿! C++图像处理方向问题求解决

  •  
  •   dylanstrive · 43 天前 · 1604 次点击
    这是一个创建于 43 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 已经使用 OpenGL 渲染出 13*13 个视角的图片
    • 现在想法是取四个角落的图片然后插值预测中间视角的图片和渲染出来的图片量化对比,越相似越好
    • 考虑使用光流法计算角落视角图片的像素位移,然后根据像素位移计算中间视角图片,考虑对比稠密和稀疏两种方式
    • 另外还有深度图,能否结合深度图来解决融合权重,来更好的处理像素

    基本流程如下

    基本流程

    OpenGL 渲染出来的视角图片

    渲染出来的视角图片

    有没有大佬懂图片处理能够实现的,或者使用其他技术实现,绿泡泡:RHlsYW5fc3RyaXZl

    8 条回复    2024-12-18 13:53:21 +08:00
    yankebupt
        1
    yankebupt  
       43 天前
    四角的视角方向已知的话,深度图精度足够高的话,不考虑投射到空间点云然后投影插值么?
    算了看到 C++,肯定是要性能,要么就是四角的摄影机角度不知道要自己算(空间卷积拟合运算量爆炸),要么就是深度图精度不够,估计不行……
    话说为什么有人会用 C++在干这种 Nvidia DLSS 插帧在干的事情……
    课设么?
    yankebupt
        2
    yankebupt  
       43 天前
    我不是专家,但是如果不知道视角插帧的话,我知道的至少有两种。
    一种是 AI 模型插帧,性能巨差但是显卡加速,本质是卷积或者偷懒或优化过的卷积,被遮挡的像素估计出来像一点
    可能半开源
    还有一种就纯 2D 位移缩放旋转,被遮挡的像素基本就糊成一片(随便填的),比较快,CPU 能实时 60 插 120 帧 1080P 之类
    后一种你可以下个 SVP Project 看看选项,有各种优化,性能的,估计(搜索)方法的,遮挡像素怎么填充的,满足各种喜好和性能需求……
    dylanstrive
        3
    dylanstrive  
    OP
       43 天前
    @yankebupt 对的,就是课设。其他高级一点的方法都不懂,唯一能着手的就是 opencv 图像层面的处理,对性能其实也没啥要求,就是纯粹为了达到效果,都是些老的不能再老的一些东西了,像什么 DIBR 、根据 EPI 插值计算这些
    decaydave
        4
    decaydave  
       43 天前   ❤️ 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 本质上也是个重投影) 会出现多像素通过速度指向同一个像素的情况 (竞争), 处理竞争的思路本质上是保证前后遮挡关系,所以取深度较小者写入即可
    IC0ZB
        5
    IC0ZB  
       41 天前
    有没有相机位姿的,有位姿直接 3d 空间投影好了。按理说你 opengl 渲染出来的应该是知道相机位姿的吧
    dylanstrive
        6
    dylanstrive  
    OP
       41 天前
    @IC0ZB 你应该指的应该是 DIBR 基于深度渲染,根据相机位姿重投影到世界坐标系,然后将这些点再投影到虚拟相机位置的成像面,会存在遮挡空洞,最主要是课设不让做这个
    dylanstrive
        7
    dylanstrive  
    OP
       41 天前
    @decaydave 谢谢佬的详细思路流程,我接下来再按照你的方式去尝试,奈何代码能力有点弱,万分感谢
    dylanstrive
        8
    dylanstrive  
    OP
       3 天前 via Android
    @decaydave 大佬你好 我按照你的思路简单实现了整个大体流程,整个代码大概就 100 行不到,但是最后的效果不是很好,可以帮我优化修改一下吗,应该对你而言就是很简单了,有偿
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2189 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 01:51 · PVG 09:51 · LAX 17:51 · JFK 20:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.