【问题标题】:What methodology to follow to find coordinates on a curved surface?遵循什么方法来找到曲面上的坐标?
【发布时间】:2019-09-28 08:49:46
【问题描述】:

我在拍照时很难找到“曲面上的坐标”。想象一个桶或一个曲面,其表面上有 n 个点,我们需要确定它们的位置。当从“正面”拍摄表面并旋转约 30 度时,点的相对位置看起来会有所不同。

如果是平板,我会考虑将长度归一化并找到每个点的相对坐标。由于它是一块平板,每个归一化坐标都会给出与旋转角度无关的相同数字。但是当它在曲面上时,这种归一化无助于找到坐标。是否有一种方法可以在对象旋转时找到坐标?

可以在此处看到示例问题的视觉效果:

可以看到另一个示例图的俯视图:

【问题讨论】:

  • 你知道表面的数学吗?在投影之前,您是否有任何数据(例如最终颜色)可以识别与其位置相关的表面像素?
  • 首先,您如何将点从表面投影到相机屏幕上?您是否在屏幕平面上使用正交投影?或者您是否使用标准点屏幕投影(通过在屏幕后面的固定点和 3D 点之间绘制线条并查看线条与屏幕平面的交点进行投影)?其次,你的表面是圆柱形的吗?也就是说,当你切片它时,它总是相同的曲线,比方说,有一个水平面,这条曲线基本上是垂直平移的,扫过表面?
  • 第二,您是否始终围绕固定轴旋转相机,垂直运行?至少在你的照片上是这样的。你有每个相机镜头的屏幕上点的坐标吗?特别是,我们是否可以假设您非常了解相机的参数,例如您查看 3D 世界的点与屏幕(如果相关)之间的距离,以及该点的正交投影在屏幕上的位置(通常应该在屏幕二维坐标系的原点)。你知道曲面方程吗?
  • 您好,感谢您的回答。不幸的是,这将应用于现实生活中的物体进行测量,这意味着我将没有表面方程。我正在考虑从足够远的地方拍摄照片,以获得几乎正交投影的照片并摆脱透视效果。并且使用固定的相机,对象围绕其轴旋转。

标签: geometry coordinates coordinate-transformation geometry-surface projection-matrix


【解决方案1】:

看起来您处于以下情况:您有一条称为axis 的固定垂直线,它是您围绕其旋转表面的垂直旋转轴。此外,您有一个平面S,代表您的相机屏幕。屏幕平面S 也是垂直的,这相当于它平行于旋转axis。然后,屏幕平面S 的法线向量N 指向axis

我们通过以下方式引入固定坐标系(称为相机系统,我们从相机的角度看世界,它是固定的,因为您的相机是固定的):我们选择一个固定点O 在屏幕平面S 上并在S 上绘制O ---> y 轴作为S 上平行于axis 并穿过O 的唯一线。轴O ---> x 是垂直于O ---> y 轴的唯一线,因此是水平的。法线向量NO ---> z 轴对齐,该轴也是水平的,从相机开始穿过axis,与后者正交。

屏幕平面上的坐标系,称为屏幕系统,就是得到的坐标系z = 0(3D点在屏幕上的正交投影S),即两个-三维系统O x y 其中屏幕系统的O--->xO--->y 轴也是相机系统的轴,如上定义。

据我了解,您拍摄了两次表面照片,一次是在一个位置,然后第二次是在将其围绕axis 旋转一定角度a 之后。旋转前取表面上的标记点之一P。然后是正交投影p1在屏幕上S在screen0system中有坐标[x1,y1]。在以axis 周围表面的角度a 旋转后,点P 现在在屏幕S 上具有正交投影p2,在屏幕系统中具有新坐标[x2,y2]。我假设您可以确定屏幕上任何点相对于屏幕系统的坐标。如果我没看错的话,目标相当于确定P在三个空间O x y z旋转前后的坐标。但是,由于您在屏幕上的投影S 是正交的,因此您只需确定旋转前后点Pz 坐标即可。从那里,您可以继续找到表面上P 的曲线坐标,这可能只是屏幕投影到表面上的坐标,因此表面参数化可以是例如:

X = x1
Y = y1
Z = z1(x1, y1)    

我们还将假设您知道相机屏幕S 和旋转轴axis 之间的距离l。我相信到目前为止所做的所有这些假设都是非常合理的,因为您可以控制设置相机(即屏幕平面S 及其坐标系,相当自然)和旋转轴axis . 情况如下图:

如您所见,我们选择了水平切片y = y1,由于屏幕和相机坐标系的整体布置,我们选择了y = y1 = y2。观察到由于axis 的旋转,我们有dist(P0, axis) = dist(Pa, axis)。因此三角形P0 Pa axis 是等腰三角形,在顶点axis 处有角度a。因此,如果你通过顶点axis 绘制这个三角形的反射对称轴,你会得到同一个直角三角形的两个副本,其中有方程

dist(P0, Pa)/(2*dist(axis, P0)) = sin(a/2)

将后一个方程与方程结合起来

dist(P0, axis) = dist(Pa, axis) 

如果你将两个方程平方并将它们放在一起作为一个系统,你会得到两个方程的系统

dist(P0, Pa)^2 = 4*(dist(axis, P0))^2*(sin(a/2))^2

dist(P0, axis)^2 = dist(Pa, axis)^2 

如果你看三个(直角)梯形O p1 P0 axis,然后是O p2 Pa axis,最后是P0 p1 p2 Pa,得到两个二次方程组,其两个未知数是z坐标z1z2。其余参数给出:x1, x2, l, a。你必须解决z1z2。将有四对解决方案,您必须选择与实际情况相对应的解决方案。然而,精确求解系统可能很困难,因此您可以使用牛顿法找到一个非常好的近似解。

我已经在图片上写了系统,你可以在公式中看到它。角度a 是你的theta

【讨论】:

    【解决方案2】:

    假设这个圆柱体上的点之间的距离总是相同的,你只需要找出一个坐标三元组,然后你就可以在测地线上计算其他坐标。

    所以它会在大地坐标系中: (x1, y1, z1) (x1 + 距离, y1, z1) (x1 + 2*距离, y1, z1)

    这仅适用于坐标之间的距离恒定且已知并且您知道测地线的角度...

    【讨论】:

    • 我想我可以通过比较对象的宽度来比较对象的角度,只需采用 acos(widthx/width1),因为它适用于平板。点的位置是固定的,但彼此之间的距离可能是距离 1 和距离 2,当查看对象的 2D“照片”时,x 和 y 方向可能不同。
    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2022-11-28
    相关资源
    最近更新 更多