GPU 计算 (CUDA) tex2d/tex3d - 如何处理各向异性 pixel/voxel

GPU-Computation (CUDA) tex2d/tex3d - How to deal with anisotropic pixel/voxel

我是 cuda 编程的新手,我对 texXD 函数有疑问。我的目标是使用优化的 CUDA 功能实现一个简单的基于 GPU 的光线追踪器。

请参阅 NVIDIA 使用的 CUDA texture API

在我的研究中,我必须处理每个维度具有不同分辨率的图像(例如 CT 图像,(x,y) 具有与 (z) 不同的分辨率)。重新采样到各向同性 pixel/voxel 大小可能会带来一些问题(尤其是对于医学诊断)。

例如,我有一张尺寸为 (100px x 50px) 且分辨率为 (2px/mm x 1px/mm) 的图像。光线在任意点进入图像并在其他地方离开。光线在从入口到离开点的方向上被采样。在每个采样点 (pos.x,pos.y),tex2D 函数执行一个 (bicubicbilinear) 插值,将相邻像素值考虑到它们的距离加权样本点。

example image: 在这两种形状中,角点的命名方式相同 (x1,y1),.... 唯一的区别是角点之间的物理 space。插值点为 (x,y)。我使用矩形网格的公式计算了一个示例,并为两个网格产生了不同的结果。但是,如果我使用编号矩形的面积比,我会得到不同的结果。

我的问题:CUDA 会处理维度的不同分辨率还是 CUDA 会看到相同距离内的所有像素(因此作为方形网格)? CUDA 使用的公式似乎是用于方形网格的公式(google:CUDA 纹理获取)。

或者我可以在使用 tex2D 之前将图像重新采样为方形网格而不会丢失大量信息吗?

任何建议都值得推荐。如果您需要更多说明,请随时询问。我会具体说明我的问题。

我不相信(我认为是)您正在尝试做的事情可以使用纹理来实现。 here.

描述了唯一支持使用纹理的过滤模式

一些要点:

  1. 纹理没有分辨率。只是有尺寸。
  2. 纹理数据在所有维度上隐式均匀分布。
  3. 纹理插值以精度降低的定点算术格式完成,它提供 8 位表示精度

None 这似乎是任何对您描述的 non-uniform 网格上的插值有用的东西。在使用统一过滤模式之前,您至少需要执行坐标转换。工作量和费用与在用户代码中自己编写插值例程大致相同。