照片测星定位法原理简介
鬼蝉
编辑于 2023年12月05日 16:34

  照片测星定位在前段时间引起了很多朋友的兴趣,并且带来了诸多关于“镜头畸变怎么消除”、“图上只有一颗星怎么认的”之类的质疑,特此将相关的原理及步骤公开。

  这个方法从10月最初构思并试用至今,在多位网友的回复建议下不断改进,已经是得到了极大的发展。但经过这段时间的持续优化和尝试发现,通过照片测量的天体高度角最多仍有20角分的误差,即使做到最好也无法将定位误差降低到18千米以下。也就是说,通过照片测星得到的定位如果与实际位置偏离不到18千米是运气好而不是测得准。所以这个方法对住在城市里的普通人来说还是相当安全的,不会导致个人信息泄露。另外对带有球状畸变的照片,我目前也没有办法进行校正,故定位会有很大误差。

  那么接下来我就会一步一步解析通过照片进行测星定位的原理及实施方法,具体的计算式我不会列出,供大家思考练习。

第一节 从“过洋牵星术”说起

  我国古代有一种被称为“过洋牵星术”的定位方法,它是利用一系列用等长的绳子串着的大小不同的木板来测量北极星的高度,从在茫茫大海中知道纬度的航海导航技术,那么它是怎么实现的呢?

  众所周知,恒星距离我们非常遥远,远远大于地球的直径和公转轨道直径,所以可以认为一颗星无论在什么时候什么地点看都是处于天球上的同一个位置(参考:赤经、赤纬)。随着四季流转,太阳在天球上的黄道运行,天球的不同部分会依次照亮;而昼夜半球又会因地球自转发生自东向西的转动,这才导致了我们不同季节、不同时间看到的星星不一样。

  在一个具体的时刻,每颗星星的位置则是固定的。如同太阳有直射点一般,星星也会“直射”在地球上的某一个点,这个点又被称为它的地理位置(GP;该术语直译自wiki百科,国内学界可能有不同翻译,还请专业人士补充)。对于处于一个天体的直射点GP的人而言,该天体就在他的正头顶上,仰角为90°。天空中仰角90度的位置也被称为天顶(Zenith,我的同志短剑好像动了一下)。而对于身处地球上别处的人来说,刚才所说的那个天体就不是在正头顶上了,而会和天顶有一定的夹角,这个夹角也被被称为天顶角;天顶角和高度角是互余的关系,在实际操作中我们也更容易以地平线作为参考测出高度角。一颗星星的高度角一经测定,我们就知道了自己和那颗星星的GP之间相对地心的夹角是多少了(图1)。

  “过洋牵星术”正是利用了这个原理。因为北极星的GP近似在北极点,所以从图1中可以看到,测量出北极星的高度角就可以知道自己的纬度了。由于古时候的航海多是沿着北半球海岸线航行,因此只要知道了纬度就可以大致知道自己身处沿海何处。

○ 本节计算方法提示(不想看可跳过)

· 高度角+天顶角=90°(互余关系)

· 所在位置与GP相对地心夹角=天顶角(平行直线同位角相等)

双星定位法

  看完上一节的内容后,如果仔细思考就会发现,所有能测到某颗星仰角为的地点集合在一起便是在球面上的一个以GP为圆心的圆(如图2中红色或蓝色的圆)。如果测到了两个不同的天体的仰角,便可以在地球上画出以两个GP为圆心、不同半径的圆。这两个圆会有两个交点,观测者必然在其中一个交点上。再进一步发挥空间想象力,通过两颗星星的相对方位关系(谁左谁右?谁高谁低)就可以判断自己的位置是两个交点中的哪一个。如在图2中,天体1(红色GP)和天体2(蓝色GP)确定出来的交叉点有南北两个,站在北边的交叉点观察时,天体1在天体2的右边,站在南边的交叉点时则反之。

○ 本节计算方法提示

· 与GP地心夹角为(90°-)的圆方程可以用立体几何来求解:

    1. 把地球视为一个单位球体,并以地心为原点,以0°0°方向为x轴正方向,北极点方向为z轴正方向,建立Oxyz右手直角坐标系

    2. 求出某时刻一颗星星的单位方向向量;

    3. 求出以sin为法向量且经过点sin的平面方程;

    4. 用上述平面方程和球体方程联立求得所截圆的方程。

· 两个交点的方程可以用球体方程加上两个平面方程一同联立求得,正常情况下会求出两个截然不同的坐标。

· 求得的xyz坐标可以通过反三角函数转化回地球上的经纬度

照片上的天体辨识和测量

  正常情况下,一张照片的光轴就是照片正中心点,因此拿到照片后第一件事就是用横竖线将照片的中心点标出。接下来可以使用PS的色阶、对比度、高反差保留等等功能,最大限度地提高照片中星星的清晰度。看得清星星以后,再用标尺工具量出每颗星星相对画面中心点的坐标,单位像素(图3)。

  打开星图软件,这里使用的是stellarium,将时间暂停并调到照片拍摄的时间,通过个人经验和星图对比得知标记的每颗星星分别是谁。由于时间已经准确确定,所有类型的天体包括恒星、行星、卫星甚至是偶然入镜的人造卫星都可以使用。我一般会选用其中5颗,以获得较多的数据取平均值。

  在图3中我标识并测量了木星、天囷一、昴宿六、天苑一和天囷八的像素坐标。

  接下来,我们在星图软件中,将观测地的经纬度设为0°,0°,读取这五颗星的时角和赤纬,该时角我将其称为“参考时角”(个人叫法,请专业人士补充)。通过参考时角和赤纬即可换算出这些星星的直射点GP的经纬度。

○ 本节计算方法提示

· 时角赤纬和直射点GP经纬度换算:

1. 赤纬 = 纬度

2. 360°-参考时角 × 15°/h = 经度

照片成像原理与像素焦距

  在之前的回帖中很多人质疑“照片的广角畸变是怎么消除的”。事实上我通过普通照片的成像原理出发,直接绕过了这个问题,把广角畸变扼杀在摇篮里。

  一张普通的数码照片相当于是从视点出发透过一张想象的相纸看外面的世界,所有指向星星的方向向量会被投影到一个与视点距离为z的平面上。要想复原出这些星星本来的方向向量,只需先按上一步的方法量出星星在照片上的x, y坐标,再求出这张照片所在的平面与我们视点之间的距离z就可以了(图4)。此处距离z的作用和相机的焦距相似,我将其称为像素焦距。

  现在我们通过日期时间算出所有星星的位置,可以用向量的点乘求出这些天体之间的理论夹角;此外我们还测量了所有星星在照片上的, 坐标。通过代入未知数,每一组实测坐标都可以相对理论夹角求出一个像素焦距。最后取平均可得到 = 1301.73363。

  “广角畸变”的产生正是将直接用(, )坐标计算的投影的长度直接当成夹角来计算导致的问题,这在离照片中心很近的时候影响不大,因为lim(x→0) tanx=x。但如果我们用向量而非照片上的长度来求算,就可以直接绕开“广角畸变”。

天顶位置确定

  这里用到了简单的透视原理。

  正常的照片符合透视原理,画面中出现的所有平行直线都必然汇聚在照片上的一个点,这个点被称为这组平行线的“灭点”。虽然“灭点”在现实中对应这组平行线方向上的无穷远点,但因为照片只记录“与光轴的夹角信息”,而不记录“距离信息”,因此“灭点”得以在照片上实实在在地存在(有些地平论者会对此狡辩,因此我在这里要特意强调这点)。有时候这些灭点也可能超出照片的画幅,只要适当拓宽就一样可以标注出灭点的位置(图5)。

  我们在上一节已经学会了将照片上的, 坐标转化为空间向量求解点和点之间的夹角,现在我们确定出天顶的坐标之后,也就可以很容易地算出每颗星星的高度角了。

  在后续的回复中,有人提到这是一个变态方程的求解,但是我不懂变态方程,于是我换了一个思路:选出照片中所有指向天顶的线段,求出它们所在直线的方程,然后找到一个与所有这些直线距离之和最小的一个点,坐标为(-131.48, -862.29)。

定位计算

  现在我们已经知道了这些星星的直射点经纬度和它们的高度角,到这里就万事俱备只欠东风了,只需要硬着头皮按着第二节的方法计算,就可以得到一系列的经纬度坐标:

  (如果忘了我再说一遍省得你往回翻啊,根据5颗星星的GP坐标和高度角可以求出观测者所在5个平面的方程;将这一系列方程两两为一组依次与单位球方程联立就能求出10×2=20组可能得经纬度坐标)

  (其实就是在解两平面一球面交点的方程)

  观察表4发现,每一组的两个计算结果中都有一个值是在123°(E)、41°(N)附近,而另一个值则偏差很大。

结果汇总

  最后我们将正确的经纬度挑选出来,取平均值,就得到了我们想求的结果了:

  求得的经纬度坐标位于沈阳市附近。之前的帖子中只使用两颗星进行求算,并且计算天顶和地平参考点只各使用了建筑物上的各两条线段,误差较大;现在使用5颗星的坐标,20条线段延长线取平均值来求天顶,以星星的理论夹角反推z值,因而可以将误差范围缩到该方法的最小值。最后的误差只受两个因素影响:天顶xy坐标的准确度、时间准确度。

全文完,欢迎交流讨论!