GPU-Computation(CUDA)tex2d / tex3d - 如何处理各向异性像素/体素

时间:2017-01-20 14:40:23

标签: c++ cuda interpolation raytracing texture2d

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

请参阅NVIDIA使用的CUDA texture API

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

例如,我的图像大小(100px x 50px),分辨率为(2px / mm x 1px / mm)。光线在任意点进入图像,而离开是在其他地方。从入射到离开点的方向对射线进行采样。在每个采样点(pos.x,pos.y),tex2D函数执行(双三次双线性)插值,将相邻像素值加权,并考虑它们与采样点的距离。

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

我的问题:CUDA会处理尺寸的不同分辨率,还是CUDA会看到相同距离内的所有像素(因此也就是方形网格)? CUDA使用的公式似乎是平方网格(google:CUDA Texture fetching)的公式。

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

建议您提出任何建议。如果您需要更多说明,请随时提出。我会说明我的问题。

1 个答案:

答案 0 :(得分:1)

我不相信你想要做的事情(我认为是)可以用纹理来实现。 {/ 3}}描述了使用纹理支持的唯一过滤模式。

一些重点:

  1. 纹理没有解决方案。只是有尺寸。
  2. 纹理数据在所有维度中隐式均匀分布。
  3. 纹理插值以精度降低的定点算术格式完成,该格式提供8位表示精度
  4. 对于您正在描述的非均匀网格上的插值,这似乎都不是什么有用的。在使用统一过滤模式之前,您至少需要执行坐标转换。努力和费用与在用户代码中自己编写插值例程大致相同。