EWA Volume Splatting

摘要
本文提出了一种基于椭圆高斯核的直接体绘制新框架,使用了一种投影方法(splatting approach)。为避免混叠伪影(aliasing artifacts),我们引入了一种重采样滤波器的概念,该滤波器结合了重建核与低通滤波核。由于该方法与Heckbert用于纹理映射的EWA(椭圆加权平均)滤波器相似,我们将其称为EWA体投影(EWA Volume Splatting)。该方法即使在使用非球形核的情况下,也能实现高质量图像,既无混叠伪影,也不会产生过度模糊。因此,它适用于规则、直角坐标系和非规则体数据集。

此外,我们的框架引入了一种计算足迹函数(footprint function)的新方法。这种方法使任意椭圆核的高效透视投影成为可能,并且仅需非常低的额外计算成本。最后,我们表明,EWA体重建核可以简化为表面重建核。这使得我们提出的投影基本单元在重建表面和体数据时具有通用性。

1 Introduction

体绘制是科学和工程应用中用于可视化采集和模拟数据集的重要技术。理想的体绘制算法能够在3D空间中重建一个连续函数,将其转换到屏幕空间,然后沿视线方向计算不透明度积分。1989年,Westover [18, 19] 提出了用于交互式体绘制的投影方法(splatting),它对这一过程进行了近似。投影算法将体数据解释为一组吸收和发射光的粒子。每个粒子的线积分预先计算,从而生成足迹函数(footprint function)。每个足迹将其贡献分散到图像平面中,这些贡献按从后到前的顺序进行合成,最终形成图像。

我们为体投影算法引入了一种新的足迹函数,该函数结合了椭圆高斯重建核和低通滤波器。我们的推导方法与Heckbert提出的椭圆加权平均(EWA)纹理滤波器 [4] 相似,因此我们将该算法命名为EWA体投影(EWA Volume Splatting)。

EWA体绘制具有吸引力,因为它可以防止输出图像中的混叠伪影,同时避免过度模糊。此外,它支持任意椭圆高斯重建核,并能高效地支持透视投影。我们的方法基于一个新的框架来计算足迹函数,该框架依赖于将体数据转换到所谓的射线空间(ray space)。这一转换等价于透视投影。通过在每个体素上使用局部仿射变换,我们推导出EWA足迹在屏幕空间中的解析表达式。足迹的栅格化使用前向差分(forward differencing)技术,仅需一个一维的足迹表即可支持所有重建核和任意观察方向。

我们的投影单元可以轻松集成到常规投影算法中。由于其灵活性,它可以用于渲染直角坐标、曲线坐标或非结构化的体数据集。通过沿体数据梯度方向压扁3D高斯核,我们将展示EWA体投影如何简化为适合高质量等值面渲染的表面投影。

本文结构如下:
我们在第2节讨论了相关的前期工作。接下来,第3节回顾了典型的体绘制管道和体绘制方程,特别是我们阐述了典型的投影算法如何计算体绘制方程。在第4节中,我们提出了EWA体绘制框架。我们首先分析了因输出函数采样不当而导致的混叠问题。随后,我们引入了EWA重采样滤波器,该滤波器结合了任意椭圆高斯重建核和高斯低通滤波器。我们的推导基于体数据的局部仿射变换,使得重建核可以解析地进行积分。此外,我们展示了如何将EWA重建核从体数据平滑过渡到表面数据(第5节)。最后,第6节和第7节讨论了我们的实现细节及其结果。

2. 前期工作
投影法(Splatting)的最初研究由Westover提出 [18]。基本的投影算法在从后到前合成投影单元(splat)时,存在可见性判断不准确的问题。这会导致诸如颜色溢出等可见伪影。后来,Westover [19] 通过引入轴对齐的片缓冲区(sheet buffer)解决了该问题。然而,这种技术在动画中会出现令人不适的跳跃伪影。最近,Mueller和Crawfis [14] 提议将片缓冲区与图像平面对齐,而不是与体数据的某一轴对齐。此外,他们分别对每个重建核的多个切片进行投影。这种技术与基于切片的体绘制方法 [2, 1] 类似,且避免了跳跃伪影。Mueller和Yagel [15] 结合了投影法与光线投射技术,以加速透视投影的渲染过程。Laur和Hanrahan [7] 描述了一种分层投影算法,支持在渲染过程中逐步细化。此外,Lippert [9] 引入了一种基于体数据小波表示的直接投影算法。

Westover的原始框架没有处理透视投影中采样率变化的问题。在体数据中,当发散射线的采样率低于体网格采样率时,可能会出现混叠伪影。Swan等人 [17] 使用与距离相关的足迹拉伸方法,使其充当低通滤波器。这种抗混叠方法与EWA体投影方法密切相关,我们将在第7节进一步讨论。

如果3D核不是径向对称的(例如用于直线网格、曲线网格或非规则网格),则需要额外注意。此外,对于3D空间中的任意位置,所有核的贡献必须总和为1,否则图像中会出现斑点伪影。对于直线网格,Westover [19] 提议使用椭圆形足迹,并将其反向变形为圆形足迹。对于曲线网格,Mao等人 [10] 使用随机泊松重采样生成一组新点,其核为球体或椭球体。他们计算椭圆足迹的方法与Westover [19] 非常相似。如第4节所述,我们的技术可用于非规则网格,以高效、准确地投影和栅格化椭圆投影核。

我们沿着Heckbert的开创性工作 [4] 的思路发展了EWA体投影技术。Heckbert引入了EWA滤波,以避免表面纹理的混叠。我们最近扩展了他的框架,用于表示和渲染在非规则点采样表面上的纹理函数 [21]。第5节将展示EWA体投影与表面投影之间的联系。


3. 初步知识
3.1 体绘制管道
体绘制主要有两种基本方法:一种是逆向映射算法,从图像平面上的像素向体数据中发射射线;另一种是正向映射算法,将数据映射到图像平面上。在接下来的讨论中,我们将描述一种正向映射技术。将数据映射到图像平面包括一系列中间步骤,在这些步骤中,数据被转换到不同的坐标系中,与传统的渲染管道类似。

我们在图1中引入了相关术语。请注意,术语“空间”(space)与“坐标系”(coordinate system)是同义的。该图总结了一条正向映射体绘制管道,其中数据从左到右依次流动。

概述中,我们简要描述了与我们技术相关的坐标系和转换。体数据最初以对象坐标系表示。为了从任意视角渲染数据,首先通过视图变换将其映射到摄像机空间。我们在第4.3节中讨论了此变换的影响。摄像机坐标系的定义使其原点位于投影中心。

接下来,我们将数据进一步转换到射线空间(ray space),该坐标系在第3.2节中引入。射线空间是一种非笛卡尔坐标系,能够以简单的形式表示体绘制方程。在射线空间中,视线与某一坐标轴平行,从而简化了体函数的解析积分。我们在第4.4节中介绍了从摄像机空间到射线空间的转换,这是我们技术的关键部分。由于该转换的目的类似于渲染管道(如OpenGL)中的投影变换,因此也称为投影映射(projective mapping)。

对体绘制方程进行求解后,结果为屏幕空间中的2D图像。在最后一步中,该图像会被转换到视口坐标系。为了突出我们技术的核心内容,后续的解释中不涉及视口变换。然而,该变换可以很容易地融入实现中。此外,我们不讨论前向映射管道中的体分类和着色部分,相关内容可参考文献 [13] 或 [20] 的详细讨论。

3.2 投影算法(Splatting Algorithms)

我们回顾了用于快速直接体绘制的低反照率(low albedo)近似体绘制方程 [5, 12],该方法在文献 [19, 6, 13, 8] 中有所应用。图2左侧部分说明了相应的二维情境。从这种形式的体绘制方程出发,我们讨论了一些简化假设,最终导出众所周知的投影算法公式。由于其高效性,投影算法 [19, 13] 是最受欢迎的前向映射体绘制技术之一。

我们稍作修改了传统符号,引入了射线空间(ray space)的概念。在射线空间中,一个点用三个坐标的列向量 x=(x0,x1,x2)Tx = (x_0, x_1, x_2)^Tx=(x0​,x1​,x2​)T 表示。给定一个投影中心和一个投影平面,这三个坐标具有以下几何解释:

  • 坐标 x0和 x1指定投影平面上的一个点。
  • 通过投影中心和投影平面上点 (x0,x1)的射线称为视线(viewing ray)。
  • 使用记号 x^=(x0,x1)T,我们用 x^ 表示穿过 (x0,x1)的视线。
  • 第三个坐标 x2指定从投影中心到视线上的某点的欧几里得距离。

4 EWA体积重采样滤波器:体积溅射中的混叠

4.1 体积溅射中的混叠

混叠是任何渲染算法中的一个基本问题,它在渲染的图像或图像的一部分被采样到离散的栅格网格(即像素网格)时发生。混叠会导致视觉伪影,如锯齿状的轮廓边缘和纹理中的莫尔条纹。通常,在动画中这些问题会变得特别令人不悦。

从信号处理的角度来看,混叠是容易理解的:在将连续函数采样到规则的采样网格之前,必须对其进行带宽限制,以符合网格的奈奎斯特频率。这可以确保在采样图像时不会出现混叠伪影。

在本节中,我们将系统地分析如何对溅射方程进行带宽限制。

溅射方程(方程 4)将输出图像表示为屏幕空间中的连续函数 Iλ(x^)I_\lambda(\hat{x})Iλ​(x^)。为了在没有混叠伪影的情况下将该函数正确地采样到离散输出图像中,它必须经过带宽限制,以匹配离散图像的奈奎斯特频率。从理论上讲,我们可以通过将 Iλ(x^)I_\lambda(\hat{x})Iλ​(x^) 与适当的低通滤波器 h(x^)h(\hat{x})h(x^) 卷积来实现这种带宽限制,从而得到反混叠的溅射方程。

一个理想的重采样滤波器,结合了足迹函数 qkq_kqk​ 和低通核 hhh。因此,我们可以通过将原始溅射方程(4)中的足迹函数 qkq_kqk​ 替换为重采样滤波器 ρk\rho_kρk​,来近似反混叠溅射方程(6)。这意味着我们不是直接对输出函数 Iλ(x^)I_\lambda(\hat{x})Iλ​(x^) 进行带宽限制,而是分别对每个足迹函数进行带宽限制。在上述假设下,我们得到了一种溅射算法,该算法生成一个带宽限制的输出函数,遵守栅格图像的奈奎斯特频率,从而避免混叠伪影。

请记住,重建核是在视线空间中进行积分的,因此足迹函数在整个体积中大小和形状变化显著。因此,方程(8)中的重采样滤波器具有强烈的空间变异性。

Swan 等人提出了一种基于重建核均匀缩放来带宽限制衰减函数的溅射抗混叠技术【17】。他们的方法在使用径向对称核时与我们的方法产生类似的结果。然而,对于更一般的核,例如椭圆形核,均匀缩放是理想低通滤波的一个较差近似。混叠伪影无法避免,且会引入额外的模糊。

另一方面,我们的方法在这些情况下提供了非均匀缩放,从而在图像质量上表现更优,如第7节所示。此外,我们上述的分析表明,带宽限制衰减函数并不能保证图像没有混叠伪影。由于阴影和边缘效应,超过奈奎斯特频率的频率仍然存在。然而,这些效应在[17]中并未讨论。

4.2 Elliptical Gaussian Kernels

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

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

相关文章

Vue实训---0-完成Vue开发环境的搭建

1.在官网下载和安装VS Code编辑器 完成中文语言扩展(chinese),安装成功后,需要重新启动VS Code编辑器,中文语言扩展才可以生效。 安装Vue-Official扩展,步骤与安装中文语言扩展相同(专门用于为“…

C# 超链接控件LinkLabel无法触发Alt快捷键

在C#中,为控件添加快捷键的方式有两种,其中一种就是Windows中较为常见的Alt快捷键,比如运行对话框,记事本菜单等。只需要按下 Alt 框号中带下划线的字母即可触发该控件的点击操作。如图所示 在C#开发中,实现类似的操作…

赛氪媒体支持“2024科普中国青年之星创作交流活动”医学专场落幕

2024年11月15日下午,由中国科普作家协会、科普中国发展服务中心主办,什刹海文化展示中心承办,并携手国内产学研一体融合领域的领军者——赛氪网共同支持的“2024科普中国青年之星创作交流活动”医学科普专场,在什刹海文化展示中心…

《现代制造技术与装备》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《现代制造技术与装备》是不是核心期刊? 答:不是,是知网收录的第二批认定学术期刊。 问:《现代制造技术与装备》级别? 答:省级。主管单位:齐鲁工业大学&#xff0…

(十一)Python字符串常用操作

一、访问字符串值 Python访问子字符串变量,可以使用方括号来截取字符串。与列表的索引一样,字符串索引从0开始。 hh"LaoTie 666" hh[2] mm"床前明月光" mm[3] 字符串的索引值可以为负值。若索引值为负数,则表示由字符…

数据结构(初阶6)---二叉树(遍历——递归的艺术)(详解)

二叉树的遍历与练习 一.二叉树的基本遍历形式1.前序遍历(深度优先遍历)2.中序遍历(深度优先遍历)3.后序遍历(深度优先遍历)4.层序遍历!!(广度优先遍历) 二.二叉树的leetcode小练习1.判断平衡二叉树1)正常解法2)优化解法 2.对称二叉…

20.100ASK_T113-PRO 开发板开机自动QT程序简单的方法一

本文详细介绍了在嵌入式系统中实现程序开机自启动的多种方法,包括通过修改/etc/profile、/etc/rc.local文件,以及在/etc/init.d目录下创建启动脚本等方式。文章还解释了不同配置文件的作用及它们之间的区别。 开机自动启动QT应用程序 用户模式下的启动 …

Android蓝牙架构,源文件目录/编译方式学习

Android 版本 发布时间 代号(Codename) Android 1.0 2008年9月23日 无 Android 1.1 2009年2月9日 Petit Four Android 1.5 2009年4月27日 Cupcake Android 1.6 2009年9月15日 Donut Android 2.0 2009年10月26日 Eclair Android 2.1 2…

LeetCode 145.二叉树的后序遍历

题目:给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 思路:左 右 根 代码: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* Tre…

GitLab|数据迁移

注意:新服务器GitLab版本需和旧版本一致 在旧服务器执行命令进行数据备份 gitlab-rake gitlab:backup:create 备份数据存储在 /var/opt/gitlab/backups/ 将备份数据传输到新服务器的/var/opt/gitlab/backups/下,并修改文件权限(下载前和上传…

实验四:构建园区网(OSPF 动态路由)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、在 eNSP 中部署网络 2、设计全网 IP 地址 3、配置二层交换机 4、配置路由交换机并测试通信 5、配置路由接口地址 6、配置 OSPF 动态路由,实现全网互通 一、实验简介 使用路由…

外卖系统开发实战:从架构设计到代码实现

开发一套外卖系统,需要在架构设计、技术选型以及核心功能开发等方面下功夫。这篇文章将通过代码实例,展示如何构建一个基础的外卖系统,从需求梳理到核心模块的实现,帮助你快速掌握开发要点。 一、系统架构设计 一个完整的外卖系…

“AI玩手机”原理揭秘:大模型驱动的移动端GUI智能体

作者|郭源 前言 在后LLM时代,随着大语言模型和多模态大模型技术的日益成熟,AI技术的实际应用及其社会价值愈发受到重视。AI智能体(AI Agent)技术通过集成行为规划、记忆存储、工具调用等机制,为大模型装上…

C语言——break、continue、goto

目录 一、break 二、continue 1、在while循环中 2、在for循环中 三、go to 一、break 作用是终止循环&#xff0c;在循环内遇到break直接就跳出循环。 注&#xff1a; 一个break语句只能跳出一层循环。 代码演示&#xff1a; #include<stdio.h>void test01() {for (…

AR智能眼镜|AR眼镜定制开发|工业AR眼镜方案

AR眼镜的设计与制造成本主要受到芯片、显示屏和光学方案的影响&#xff0c;因此选择合适的芯片至关重要。一款优秀的芯片平台能够有效提升设备性能&#xff0c;并解决多种技术挑战。例如&#xff0c;采用联发科八核2.0GHz处理器&#xff0c;结合12nm制程工艺&#xff0c;这种低…

设计LRU缓存

LRU缓存 LRU缓存的实现思路LRU缓存的操作C11 STL实现LRU缓存自行设计双向链表 哈希表 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种常见的缓存淘汰算法&#xff0c;其基本思想是&#xff1a;当缓存空间已满时&#xff0c;移除最近最少使…

自动驾驶3D目标检测综述(三)

前两篇综述阅读理解放在这啦&#xff0c;有需要自行前往观看&#xff1a; 第一篇&#xff1a;自动驾驶3D目标检测综述&#xff08;一&#xff09;_3d 目标检测-CSDN博客 第二篇&#xff1a;自动驾驶3D目标检测综述&#xff08;二&#xff09;_子流行稀疏卷积 gpu实现-CSDN博客…

MySQL数据库学习(持续更新ing)

1. 什么是数据库&#xff1f;什么是数据库管理系统&#xff1f;什么是SQL&#xff1f;他们之间的关系是什么&#xff1f; 数据库&#xff1a;Database&#xff0c; 简称DB。按照一定格式存储数据&#xff0c;一些文件的组合。 数据库管理系统&#xff1a;DataBaseManagement&…

【线程】Java线程操作

【线程】Java线程操作 一、启动线程1.1 run()和start()的区别 二、终止线程三、等待线程四、线程的状态 一、启动线程 Java中通过start()方法来启动一个线程&#xff0c;其次我们要着重理解start()和run()的区别。 1.1 run()和start()的区别 我们通过一份代码来进行观察&…

MySQL学习/复习10视图/用户/权限/语言连接数据库

一、视图 1.1创建视图 1.2视图影响基表 1.3基表影响视图 1.4删除视图 1.5视图使用规则 二、数据库的用户 2.1mysql中的user表 注意事项&#xff1a;主机/用户名/密码/权限 2.2用户的创建 注意事项&#xff1a;设置密码与登录地点需谨慎 2.3删除用户 注意事项&#xff1a;% 2.4…