2

我想要你对我遇到的问题的智力建议。(x,y,z,I)我有 3D 点数据以及代表 3D 场景的强度场。我希望将此 3D 数据转换为图像(具有强度值的 2D 矩阵'I')。

我计划使用针孔相机模型(维基百科)对 3D 点进行透视投影。

x'=f*x/zy'=f*y/z

我应该选择什么值'f'?图像的大小如何取决于它?(比如说我需要一张 500*500 大小的图片,适合什么值'f'

由于二维图像中的坐标是整数,我应该如何量化x'y'值并替换相应的强度值?例如,如果我得到两组(通过使用f=10)作为

x,y,z,I
(3,1,2,128) -> x',y',I(15,5,128)
(3.1,1.1,2,150) -> (15.5,5.5,150)

在上述两组中,我应该只是四舍五入x'y'值并在该坐标处使用它的强度,还是应该使用非整数坐标的强度平均值?

生成的图像是否能清楚地描绘 2D 场景(如从相机拍摄的照片)?

将非常感谢您的想法。谢谢

4

1 回答 1

0

是否使用平均强度或最近邻或其他类型的插值取决于您的应用程序。例如,OpenGL 在执行此操作时为您提供选择选项(请参阅 GL_TEXTURE_MIN_FILTER 和 GL_TEXTURE_MAG_FILTER)。

我建议你尝试不同的方法,看看它们是什么样子的;线性和最近邻插值之间的区别是一行代码。有关您的预期应用程序的更多信息可能会有所帮助。

算法上最简单的投影方法不一定是计算效率最高的。如果不是投影点,而是从 2D 像素位置开始,找到相应的附近 3D 点并执行插值(即使只是最近邻插值)以获得强度,则编码要容易得多。这将阻止您在图像中出现例如间隙,并且您不再需要担心由于放大以及像素之间的空间而进行插值。

如何再次投影数据取决于您要实现的目标,因此有关应用程序的更多信息将很有用 - 例如,您是否尝试将所有点都放入图像中?还是您要填充图像?还是云的某些特性使它在投影时很可能被挤压成正方形?如果它是由图像阵列收集的,那么应该可以轻松地对其进行投影(并且上述大部分机制都是不必要的,因为它应该很容易恢复原始坐标)。否则,可能会有图像中没有出现的点或图像中没有对应点的部分。

如果我做出一些假设,那么我可以求解极限的投影方程。如果我们假设一个 640 x 480 的图像并且投影的中心在图像的中心,那么我们有:

x'=f*x/z + 320

(请注意,这是在滥用焦距,因为通常将其映射到像素上,而真实模型将其映射到图像阵列的比例上,然后再映射到像素上)。

设点数组中的最大值和该点greatestx:x的对应值xgreatestx:zz

639.5=f*greatestx:x/greatestx:z + 320

所以,

f = 319.5*greatestx:z / greatestx:x

如果对最小的 x 值、最小的 y 值和最大的 y 值执行此操作:

f = -319.5*smallestx:z / smallestx: x

f = 239.5*greatesty:z / greatesty: y

f = -239.5*smallesty:z / smallesty: y

Now if we choose the smallest f of the above then we guarantee the point cloud to fit into the image (but there might be gaps). If we choose the largest f then we guarantee there to be no gaps in the image (but there might be parts that don't fit onto the image).

于 2013-01-28T14:24:54.787 回答