4、星敏感器原理:星敏感器工作原理、CCD/CMOS图像传感器、星点提取算法、质心计算
各位同学,咱们今天聊聊星敏感器。这东西说白了,就是卫星的「眼睛」。我当年刚接触航天时,总觉得星敏感器特别神秘——一个小盒子,怎么能知道自己在太空中的姿态?后来拆开看过,其实核心原理并不复杂。
4.1 星敏感器工作原理
星敏感器的工作流程,我习惯把它分成三步:
- 拍星星:用光学镜头对准星空,拍下一张星图
- 找星星:从图像里把星星的位置抠出来
- 认星星:跟星表里的星星做匹配,算出姿态
你想想看,这跟咱们在地面上用指南针找方向其实是一个道理。只不过星敏感器用的是天上的恒星,精度高得多。
核心指标:星敏感器的精度通常用角秒(arcsec)表示。1角秒 = 1/3600度。好的星敏感器能做到0.1角秒以下,相当于在10公里外看一枚硬币。
我在项目中遇到过一个问题:卫星刚入轨时,星敏感器突然找不到星星了。后来排查发现,是太阳光从某个角度射进了遮光罩,导致背景噪声太大。嗯,这里要注意——遮光罩的设计非常关键。
4.2 CCD/CMOS图像传感器
星敏感器的「底片」现在主要有两种:CCD和CMOS。我刚开始做这行时,CCD还是主流。现在嘛,CMOS已经后来居上了。
| 特性 | CCD | CMOS |
|---|---|---|
| 读出噪声 | 低(2-5 e⁻) | 较高(5-15 e⁻) |
| 功耗 | 高(几百mW) | 低(几十mW) |
| 抗辐射 | 一般 | 较好 |
| 集成度 | 低 | 高(可集成ADC) |
| 帧率 | 慢(几fps) | 快(几十fps) |
我个人习惯在低轨小卫星上用CMOS。为什么?功耗低、帧率高,而且现在CMOS的读出噪声已经做到跟CCD差不多了。我曾经有个项目,用CCD的星敏感器功耗占了整星电源的15%,换成CMOS后直接降到3%。
小技巧:选传感器时,除了看分辨率,更要关注「满阱容量」和「量子效率」。满阱容量决定了你能拍多亮的星,量子效率决定了你能拍多暗的星。
4.3 星点提取算法
拍完星图后,怎么把星星从背景里捞出来?这就是星点提取算法要干的事。
我常用的流程是这样的:
- 背景估计:把整幅图的背景亮度算出来
- 阈值分割:比背景亮一定倍数的像素,才可能是星星
- 连通域分析:把相邻的亮像素连成一片,每个连通域就是一个候选星点
- 星点筛选:去掉太亮(可能是坏点)或太暗(可能是噪声)的候选
这里有个坑——我曾经遇到过卫星在轨运行时,星图里突然出现一大片亮斑。一开始以为是星星,后来发现是太阳光反射到遮光罩内壁。嗯,所以阈值不能设得太死,要留点余量。
注意:星点提取的阈值设置很关键。设高了会漏掉暗星,设低了会引入太多噪声。我一般建议用「动态阈值」——根据每帧图像的背景噪声水平自动调整。
4.4 质心计算
找到星点后,还得知道它的精确位置。质心计算就是干这个的。
最常用的方法是「灰度重心法」。说白了,就是把星点的亮度分布当成一个「质量分布」,然后算它的重心位置。
公式长这样:
x_c = Σ(x_i * I_i) / Σ(I_i)
y_c = Σ(y_i * I_i) / Σ(I_i)
其中:
- x_c, y_c 是质心坐标
- x_i, y_i 是像素坐标
- I_i 是像素灰度值
你想想看,这个公式其实跟物理里算重心是一模一样的。我当年第一次看到时,觉得这设计真巧妙。
实际工程中,质心计算能达到的精度通常在0.01~0.1像素。什么意思?就是说你的传感器如果是1000x1000像素,理论上能分辨出10万分之一的位移。这精度,够恐怖吧?
经验之谈:质心计算时,窗口大小选3x3还是5x5?我建议:星点弥散斑直径在2-3像素时用3x3,在4-5像素时用5x5。选大了会引入更多背景噪声,选小了会丢失星点边缘信息。
我曾经有个项目,质心精度死活提不上去。后来发现是星点太亮,导致像素饱和了。饱和后的像素灰度值被截断,质心自然算不准。解决办法?缩短曝光时间,或者加中性密度滤光片。
好了,星敏感器的核心原理就这些。从拍星星到算姿态,每一步都有讲究。我建议你们在实际项目中,多关注传感器选型和算法参数调优这两块——这是最容易出问题的地方,也是最容易出彩的地方。
公众号:蓝海资料掘金营,微信deep3321