3D Surface Reconstruction with Enhanced High-Frequency Details

核心问题:

  • 当前基于神经隐式表示(如 NeuS)的 3D 表面重建方法,通常采用随机采样策略。
  • 这种随机采样难以充分捕捉图像中的高频细节区域(如纹理、边缘、光照突变),导致重建的表面过于平滑,缺乏精细的细节。

解决方案: 作者提出了一种名为 FreNeuS 的新方法,核心思想是利用图像中的高频信息来引导和约束重建过程,从而增强表面细节的恢复。

主要创新点(贡献):

  1. 高频信息引导的动态采样策略 (High-frequency Dynamic Sampling):

    • 问题:随机采样倾向于在平滑(低频)区域采样更多,而高频细节区域采样不足。
    • 方法:
      • 首先,通过梯度检测(公式 1)和高频区域分割(公式 2)生成输入图像的高频图(High-frequency Map)。该图清晰地标识出纹理、边缘等高频区域(如图 1, 图 2)。
      • 根据高频图,将图像像素分为高频像素集 (I_H) 和低频像素集 (I_L)。
      • 在训练时,不再随机采样所有像素,而是根据高频/低频区域的比例 (w = [1](@context-ref?id=7)|I_H| / |I_L|) 动态分配采样数量(公式 3):
        • 从高频区域 (I_H) 采样 w * B 条光线 (Rays)。
        • 从低频区域 (I_L) 采样 (1-w) * B 条光线。
      • 优势:在保持采样随机性的同时,显著提高了对高频细节区域的采样密度,确保模型能获得更多关于表面细节的信息。
  2. 高频信息约束机制 (High-frequency Constraint Mechanism):

    • 问题:即使增加了高频区域的采样,渲染结果在细节区域仍可能过于平滑(如图 2 NeuS 结果)。
    • 方法:
      • 基于高频图,为每条采样的光线分配一个权重 w_High^i(公式 4):
        • 如果光线对应像素在高频区域 (P ∈ I_H),权重为 a (较大值)。
        • 如果光线对应像素在低频区域 (P ∉ I_H),权重为 b (较小值)。
      • 在计算渲染颜色损失时,使用这个权重图 W_High 进行加权(公式 5):
        • L_Frecolor = (1/|S|) Σ ||Ĉ_s - C_s|| * W_High
      • 效果:该约束机制迫使模型在优化过程中更加关注高频区域的重建精度,显著减小细节区域的渲染误差。
  3. 高频增强模块 (High-frequency Enhancement Module):

    • 这是实现上述两个核心创新的基础模块。
    • 方法:
      • 对输入 RGB 图像进行高斯滤波去噪
      • 计算图像的梯度强度和方向(公式 1:M(x,y), θ(x,y))。
      • 通过灰度阈值分割识别并输出高频图(如图 1)。
    • 作用:该模块简单有效地提取了图像中蕴含表面细节变化的关键信息(深度突变、颜色突变、光照突变等)。

整体流程 (Overview - 图 1):

  1. 输入 RGB 图像。
  2. 通过高频增强模块(高斯滤波 -> 梯度计算 -> 边界追踪)生成高频图
  3. 基于高频图进行动态采样:计算高频/低频区域比例 w,按比例 w*B(1-w)*B 分别从高频和低频区域采样光线。
  4. 对每条光线进行采样点,计算 SDF 值、梯度,并进行体积渲染得到渲染颜色 C_s
  5. 计算损失:
    • 高频约束颜色损失 L_Frecolor:使用高频权重图 W_High 加权的 RGB 损失。
    • Eikonal 正则化损失 L_reg(公式 6):约束 SDF 的梯度模长为 1,保证 SDF 性质。
  6. 总损失 L_total = L_reg + λ * L_Frecolor(公式 7,λ=1.2)用于优化整个模型。

在单视图三维重建中应用高频动态采样与约束机制需解决深度歧义信息缺失问题。


一、高频动态采样策略的适配方案

1. 高频区域识别优化
  • 问题:单视图缺乏多视角验证,传统梯度检测易受噪声干扰。
  • 解决方案
    • 预训练边缘检测器:采用HED/HoG等模型生成高频图(图1),替代传统梯度计算:
      # 示例:HED边缘检测(PyTorch)
      model = torch.hub.load('pytorch/vision', 'hed', pretrained=True)
      hed_map = model(input_img)  # 输出[0,1]概率图
      
    • 不确定性加权:对低置信度区域(如遮挡边界)降低采样权重:$w_{\text{uncertain}} = 1 - \text{hed\_map}(x,y)$
2. 动态采样改进
  • 问题:单视图高频区域占比低(通常<15%),随机采样仍可能忽略关键细节。
  • 分层采样策略
    1. 高频区域:强制采样至少50%光线(如512条中256条)
    2. 低频区域:重要性采样(基于SDF梯度变化率): $p_{\text{low}} \propto \|\nabla \text{SDF}\| \cdot \text{hed\_map}(x,y)$
    3. 遮挡边界:用MiDaS深度图识别深度突变区,补充采样10%光线

二、高频约束机制的强化设计

1. 自适应权重分配
  • 原论文局限:固定权重(a=1.5, b=0.5)在单视图中会放大噪声误差。
  • 改进方案
    • 基于局部曲率的动态权重$a = \min(2.0, 0.5 + \kappa \cdot 10) $,其中$\kappa$ 为Hessian矩阵估计的曲率,强化高曲率区域约束
    • 损失函数调整: 
2. 多模态高频融合
  • 问题:RGB高频信息在单视图中不足。
  • 融合策略
    • 深度高频:对MiDaS深度图做Sobel边缘检测,与RGB高频图取并集
    • 语义高频:用SAM分割物体边界,增强关键结构权重:
      combined_hf = torch.max(rgb_hf, depth_hf, sam_mask)
      

三、单视图重建系统架构

关键模块实现
  1. SDF预测网络(基于NeuS架构):

    • 输入:像素坐标+高频图通道
    • 输出:SDF值+RGB颜色
    • 核心代码:
      class SingleViewNeuS(nn.Module):def __init__(self):self.encoder = ResNet34(pretrained=True)  # 图像编码器self.mlp = MLP(in_dim=256+3, out_dim=4)  # 输入含高频特征def forward(x, hf_map):feat = self.encoder(x) sdf_color = self.mlp(torch.cat([feat, hf_map], dim=1))return sdf_color[...,:1], sdf_color[...,1:]  # SDF, RGB
      
  2. 训练流程

    • 每迭代1000次更新一次高频图(适应优化过程)
    • 损失函数组合:$\mathcal{L} = \mathcal{L}_{\text{Eikonal}} + \lambda_1 \mathcal{L}_{\text{Frecolor}} + \lambda_2 \|\text{SDF}_{\text{pred}} - \text{SDF}_{\text{coarse}}\|$
      • $\text{SDF}_{\text{coarse}}$:由MiDaS深度推导的粗糙SDF

四、解决单视图特有挑战

1. 深度歧义补偿
  • 形状先验注入
    • 添加CLIP语义损失:$\mathcal{L}_{\text{CLIP}} = 1 - \cos(\text{CLIP}(I_{\text{render}}), \text{CLIP}(I_{\text{input}}))$
    • 预训练扩散模型生成多视角一致性高频图(如Stable Diffusion + ControlNet)
2. 遮挡区域处理
  • 拓扑感知采样
    • 对遮挡边界(SAM掩码)施加2倍采样权重
    • 在损失中增加空洞惩罚项: $\mathcal{L}_{\text{hole}} = \sum \text{SDF}(x_{\text{occluded}})^2$

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88254.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88254.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88254.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Science Robotics 耶鲁大学开源视触觉新范式,看出机器人柔性手的力感知

摘要&#xff1a;在机器人视触觉传感领域&#xff0c;如何兼顾成本与性能始终是一大挑战。耶鲁大学在《Science Robotics》上发表最新研究&#xff0c;提出了一种“Forces for Free”&#xff08;F3&#xff09;新范式。该研究通过观测一个经过特殊优化的开源柔性手&#xff08…

关于java项目中maven的理解

我的理解&#xff1a;maven是java项目的依赖管理工具&#xff0c;通过pom.xml文件配置要下载的依赖&#xff0c;settings.xml配置maven下载的镜像没有就默认在maven中央仓库下载依赖&#xff0c;本地仓库是存储下载好的依赖ai:1. 功能定位局限Maven 不只是依赖管理工具&#xf…

缓存三大问题详解与工业级解决方案

文章目录缓存三大问题详解与工业级解决方案概念总览问题详解1. 缓存穿透 (Cache Penetration)问题描述典型场景危害2. 缓存击穿 (Cache Breakdown)问题描述典型场景危害3. 缓存雪崩 (Cache Avalanche)问题描述典型场景危害工业级解决方案缓存穿透解决方案方案1: 布隆过滤器方案…

FreeRTOS 中主函数 while 循环与任务创建的紧密联系

FreeRTOS 中主函数 while 循环与任务创建的紧密联系 在嵌入式开发领域&#xff0c;FreeRTOS 是一款被广泛应用的轻量级实时操作系统&#xff0c;为开发者提供了高效的多任务调度机制。对于初学者来说&#xff0c;理解主函数中的 while 循环与通过 xTaskCreate 创建的任务之间的…

Flutter基础(前端教程⑦-Http和卡片)

1. 假设后端返回的数据格式{"code": 200,"data": [{"name": "张三","age": 25,"email": "zhangsanexample.com","avatar": "https://picsum.photos/200/200?random1","statu…

pytorch chunk 切块

目录 chunk切块 chunk​​​​​​​切块 import torch# 创建一个形状为 [2, 3, 4] 的张量 x torch.arange(6).reshape(2, 3) print("原始张量形状:", x.shape) print("x:", x) # 输出: 原始张量形状: torch.Size([2, 3, 4])# 沿着最后一个维度分割成 2 …

PCIe基础知识之Linux内核中PCIe子系统的架构

5.1 先验知识 驱动模型&#xff1a;Linux建立了一个统一的设备模型&#xff0c;分别采用总线、设备、驱动三者进行抽象&#xff0c;其中设备和驱动均挂载在总线上面&#xff0c;当有新的设备注册或者新的驱动注册的时候&#xff0c;总线会进行匹配操作(match函数)&#xff0c;…

2.2 TF-A在ARM生态系统中的角色

目录2.2.1 作为ARM安全架构的参考实现2.2.2 与ARM处理器内核的协同关系2.2.3 在启动链中的核心地位2.2.4 与上下游软件的关系与底层固件的协作与上层软件的接口2.2.5 在ARM生态系统中的标准化作用2.2.6 典型应用场景2.2.1 作为ARM安全架构的参考实现 TF-A&#xff08;Trusted …

Chrome 开发者警告:`DELETE err_empty_response` 是什么?jQuery AJAX 如何应对?

在Web开发的世界里,我们时常会遇到各种各样的错误信息,它们像一个个谜语,等待我们去破解。今天我们要聊的这个错误——DELETE err_empty_response,尤其是在使用 jQuery 的 $.ajax 发送 DELETE 请求时遇到,确实让人头疼。它意味着浏览器尝试删除某个资源,却收到了一个空荡…

python作业 1

1.技术面试题 &#xff08;1&#xff09;TCP与UDP的区别是什么&#xff1f; 答&#xff1a; TCP建立通信前有三次握手&#xff0c;结束通信后有四次挥手&#xff0c;数据传输的可靠性高但效率较低&#xff1b;UDP不需要三次握手就可传输数据&#xff0c;数据传输完成后也不需要…

centos7 java多版本切换

文章目录前言一、卸载原来的jdk二、下载jdk三、解压jdk三、配置环境变量四、切换JAVA环境变量前言 本来是为了安装jenkins&#xff0c;安装了对应的java,node,maven,git等环境&#xff0c;然后运行jenkins时候下载插件总是报错&#xff0c;我下载的jenkins是 2.346.1 版本&…

用Python和OpenCV从零搭建一个完整的双目视觉系统(四)

本系列文章旨在系统性地阐述如何利用 Python 与 OpenCV 库&#xff0c;从零开始构建一个完整的双目立体视觉系统。 本项目github地址&#xff1a;https://github.com/present-cjn/stereo-vision-python.git 在上一篇文章中&#xff0c;我们完成了相机标定这一最关键的基础步骤…

STM32-中断

中断分为两路&#xff1a;12345用于产生中断&#xff1b;678产生事件外设为NVIC设计流程&#xff1a;使能外设中断设置中断优先级分组初始化结构体编写中断服务函数初始化结构体&#xff1a;typedef struct {uint8_t NVIC_IRQChannel; 指定要使能或禁用的中断通道例如: TIM3_I…

Shader面试题100道之(61-80)

Shader面试题&#xff08;第61-80题&#xff09; 以下是第61到第80道Shader相关的面试题及答案&#xff1a; 61. 什么是UV展开&#xff1f;它在Shader中有什么作用&#xff1f; UV展开是将3D模型表面映射到2D纹理空间的过程&#xff0c;用于定义纹理如何贴合模型。在Shader中&a…

C#基础:Winform桌面开发中窗体之间的数据传递

1.主窗体using System; using System.Windows.Forms;public partial class MainForm : Form {public MainForm(){InitializeComponent();}// 打开二级窗体private void btnOpenSecondaryForm_Click(object sender, EventArgs e){// 创建二级窗体并订阅事件SecondaryForm second…

工程改Mvvm

导入CommunityToolKit vs2017只能导入7 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input;namespace WpfApp1.vi…

【HarmonyOS Next之旅】DevEco Studio使用指南(四十二) -> 动态修改编译配置

目录 1 -> 通过hook以及插件上下文实现动态配置 2 -> 在hvigorfile.ts中通过overrides关键字导出动态配置 3 -> 通过hook以及插件上下文动态配置构建配置 3.1 -> 修改每个hvigorNode中的build-profile.json5 3.2 -> 修改module.json5中的配置信息 3.3 -&g…

Android View事件分发机制详解

Android 的 View 事件分发机制是处理用户触摸&#xff08;Touch&#xff09;事件的核心流程&#xff0c;它决定了触摸事件如何从系统传递到具体的 View 并被消费。理解这个机制对于处理复杂的触摸交互、解决滑动冲突至关重要。 核心思想&#xff1a;责任链模式 事件分发遵循一个…

【CMake】自定义package并通过find_package找到

在一些场景下我们需要编写一些库&#xff0c;并希望其他程序可以找到这些库并引用。 CMake采用package这个概念来解决这个问题。 关于CMake的find_package文章有很多&#xff0c;但这些文章的内容大多不直观讲了一堆讲不到点子上&#xff0c;让人看了一头雾水。因此我想通过本文…

【MATLAB例程】AOA与TDOA混合定位例程,适用于二维环境、3个锚点的定位|附代码下载链接

本 MATLAB 程序实现了基于 Angle of Arrival (AOA) 与 Time Difference of Arrival (TDOA) 的二维定位方法&#xff0c;通过自适应融合与最小二乘优化&#xff0c;实现对未知目标的高精度估计。本例中固定使用了 3 个基站&#xff08;锚点&#xff09;&#xff0c;算法框架支持…