4、星敏感器原理:星敏感器工作原理、CCD/CMOS图像传感器、星点提取算法、质心计算

各位同学,咱们今天聊聊星敏感器。这东西说白了,就是卫星的「眼睛」。我当年刚接触航天时,总觉得星敏感器特别神秘——一个小盒子,怎么能知道自己在太空中的姿态?后来拆开看过,其实核心原理并不复杂。

4.1 星敏感器工作原理

星敏感器的工作流程,我习惯把它分成三步:

  1. 拍星星:用光学镜头对准星空,拍下一张星图
  2. 找星星:从图像里把星星的位置抠出来
  3. 认星星:跟星表里的星星做匹配,算出姿态

你想想看,这跟咱们在地面上用指南针找方向其实是一个道理。只不过星敏感器用的是天上的恒星,精度高得多。

核心指标:星敏感器的精度通常用角秒(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 星点提取算法

拍完星图后,怎么把星星从背景里捞出来?这就是星点提取算法要干的事。

我常用的流程是这样的:

  1. 背景估计:把整幅图的背景亮度算出来
  2. 阈值分割:比背景亮一定倍数的像素,才可能是星星
  3. 连通域分析:把相邻的亮像素连成一片,每个连通域就是一个候选星点
  4. 星点筛选:去掉太亮(可能是坏点)或太暗(可能是噪声)的候选

这里有个坑——我曾经遇到过卫星在轨运行时,星图里突然出现一大片亮斑。一开始以为是星星,后来发现是太阳光反射到遮光罩内壁。嗯,所以阈值不能设得太死,要留点余量。

注意:星点提取的阈值设置很关键。设高了会漏掉暗星,设低了会引入太多噪声。我一般建议用「动态阈值」——根据每帧图像的背景噪声水平自动调整。

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。选大了会引入更多背景噪声,选小了会丢失星点边缘信息。

我曾经有个项目,质心精度死活提不上去。后来发现是星点太亮,导致像素饱和了。饱和后的像素灰度值被截断,质心自然算不准。解决办法?缩短曝光时间,或者加中性密度滤光片。

星敏感器工作原理流程图 步骤1:光学成像 星光通过镜头聚焦 步骤2:光电转换 CCD/CMOS传感器 步骤3:星点提取 阈值分割+连通域 步骤4:质心计算 灰度重心法 步骤5:星图识别 与星表匹配 输出姿态 关键参数 • 视场角:几度~几十度 • 星等灵敏度:+3~+6等 • 数据更新率:1~20 Hz 常见问题 • 太阳光干扰 → 遮光罩 • 像素饱和 → 缩短曝光 • 星点拖尾 → 提高帧率

好了,星敏感器的核心原理就这些。从拍星星到算姿态,每一步都有讲究。我建议你们在实际项目中,多关注传感器选型和算法参数调优这两块——这是最容易出问题的地方,也是最容易出彩的地方。


公众号:蓝海资料掘金营,微信deep3321