用于球形物体图像的测量单元

时间:2014-12-28 14:45:35

标签: image math distance geometry-surface

测量球形物体图像中任意2点之间的差异的单位是什么。

例如网球上2个红点之间的距离。

enter image description here

注意:事实上,由于球是非欧几里德,所以不能使用“欧几里德距离”。球几乎是球形的,成像系统将球表面投射在平面上,其中图像元素不是等间隔的,也不代表相等的区域。真欧几里德距离取决于点相对于相机的实际位置。

1 个答案:

答案 0 :(得分:2)

一般想法

假设图片采用空间的等距投影,我们可以测量图片上的坐标,就好像它们是平面上的坐标一样。

从那里我们可以将它们转换成任意以球为中心的球坐标系,然后我们就可以很容易地得到它们之间的距离。

解释

让我们假设您知道球体的半径r。我们将使用以球体中心为中心的坐标系,x是与图片引起的平面投影正交的方向(因此矢量直接出现在照片之外)。然后方向y和z在图片中,让我们取y水平和z垂直。参见图纸以供参考。

coordinate system's vectors

然后由此引起的球面坐标系使得我们与球体的中心距离始终为r,并且2角度为θ和phi:

angles illustrated http://motionscript.com/mastering-expressions/img/spherical-coords.gif

angles defined from coordinates

现在我们可以将每个点转换为球面坐标并计算它们之间的距离。

转换为球面坐标

对于每个点,z坐标是点与水平线之间的图像上的垂直距离,将两个相等的一半切割成球。用r,球的半径表示z = c * rc[-1,1] z = r * cos(theta)表示,如果点低于线,则为负,如果高于正数则为正。

measure z

我们知道theta = arccos(c),所以[0,Π]。由于theta在y,因此这里没有特殊情况。

现在以相同的方式测量y = r * b,这是点与在2中切割球的垂直线之间的水平距离(向右为正)。b和{{ 1}} [-1,1]

measure y

我们需要theta的正弦值,sin(theta) = sqrt(1 - c*c),然后是phi = arcsin( b / sqrt(1 - c*c) )。因为我们可以看到图片上的点,我们知道它的坐标系定义为x > 0。这意味着phi位于[-Π/2,Π/2],所以这里的三角学也没有任何技巧或惊喜。

球体上的点之间的距离

好的一切都在this math exchange question中解释,因为大多数大弧距离都是用纬度和经度表示的,它们使用不同的约定。

final formula from mathexchange question

现在我们用以前计算过的c1,c2,b1和b2替换公式的元素:

c and b, 1 and 2

你最终获得的公式是final formula,其中cos -1 也称为arccos函数。

我不会深入研究细节(特别是因为从移动应用程序中包含乳胶是如此痛苦),但步骤如下:

  • 扩展余弦内的差异
  • 在唯一的非平凡术语中,用sqrt(1-sin 2 )转换phi的余弦
  • 将该术语的sin(theta)推入平方根,有些乘以sin(phi)会给你b平方术语
  • 将平方根下的剩余正方形表示为1-cos 2

最终的衡量单位将是您表达的任何单位r

如您所见,您只需要在arccos结束后的半径(对于bc s,您只需要r的大小和y {1}} s和z在图片上,而不是在物理世界中。

然后,如果你只想比较同一个球体上的点的距离,你可以简化r,并比较球体中心点之间的角度(即只使用arccos的结果而不用乘以r),因为这些角度与球体上弧线的距离成正比。然后,您的测量单位将以弧度为单位。