当前位置:首页 > 显示光电 > 显示光电
[导读]红外焦平面阵列(IRFPA)的每一个像元,从 InSb、MCT 到非制冷 VOₓ/uA 微测辐射热计,响应率天生不一致——同温度黑体照下去,输出灰度能差 30%。裸图就是"麻点 + 竖条纹",没法用。NUC(Non-Uniformity Correction,非均匀性校正)就是把每个像元的响应拉平到同一基准,硬件侧分"片上 NUC + 外置标定系数"两段走。下面以国产非制冷 400×300 / 640×512(VOₓ,NETD < 40 mK)为主线。

红外焦平面阵列(IRFPA)的每一个像元,从 InSb、MCT 到非制冷 VOₓ/uA 微测辐射热计,响应率天生不一致——同温度黑体照下去,输出灰度能差 30%。裸图就是"麻点 + 竖条纹",没法用。NUC(Non-Uniformity Correction,非均匀性校正)就是把每个像元的响应拉平到同一基准,硬件侧分"片上 NUC + 外置标定系数"两段走。下面以国产非制冷 400×300 / 640×512(VOₓ,NETD < 40 mK)为主线。

一、NUC 的三种硬件实现路径

1. 一点校正(Single-Point,室温单标定)

只在室温 T0 下一次标定,每个像元存一个 Offset,Gain 默认 1。公式:Y_corr[i,j] = Raw[i,j] - Offset[i,j]。

硬件最简单——sensor 的 ISP/ASIC 里给一片 SRAM(400×300×12 bit ≈ 1.44 Mb)存 Offset 表,上电从 OTP/eFlash 加载,实时减。但温漂大(VOₓ 的 Tc1 ≈ -2%/℃,Tc2 ≈ -5%/℃²),环境温度变 10℃,均匀性从 0.5% 飘到 3%,只适合恒温小像元场景。

2. 两点校正(Two-Point,主流)

用低温黑体 T1(如 20℃)+ 高温黑体 T2(如 50℃)各拍一张,每像元算:

/* 两点系数标定(上位机或 MCU 算完写 Sensor 寄存器)*/

for (i = 0; i < H; i++) {

   for (j = 0; j < W; j++) {

       Gain[i][j]  = (T2 - T1) / (Raw_T2[i][j] - Raw_T1[i][j]);

       Off[i][j]  = T1 - Gain[i][j] * Raw_T1[i][j];

       /* 写 Sensor 的 Gain/Off RAM */

       sensor_write_reg(GAIN_BASE + addr, float_to_u16(Gain[i][j]));

       sensor_write_reg(OFF_BASE  + addr, float_to_u16(Off[i][j]));

   }

}

实时路径:Raw → ×Gain → +Off → 输出。主流国产 sensor(如 Guide IR510、海康 H 系)ASIC 里 Gain/Off 双 12-bit RAM 是标配,640×512 双表约 6.7 Mb SRAM。

3. 多点+非线性(高端制冷款)

InSb/MCT 响应非线性强,3–5 点黑体(如 -20/0/20/40/60℃)分段拟合二阶多项式,系数存 ROM。非制冷 VOₓ 一般两点够用,高温段(> 80℃)才补第三点。

二、盲元处理(DPC)和 NUC 的绑定

NUC 解决"响应不一致",但还有"死像元/响应过低像元"——VOₓ 典型盲元率 0.1–0.5%。DPC 一般跟 NUC 同硬件路径走:

• 盲元表:OTP 里存盲元坐标 bitmap(1 bit/像元),640×512 → 320 字节够

• 替换算法:实时流里盲元位置用 4/8 邻域中值或均值替(中值抗边缘假影更好)

/* 实时 NUC + DPC 流水线(Sensor 内部 ISP 逻辑)*/

pixel_raw = fifo_read();

addr = i * W + j;

if (dpc_bitmap[addr]) {

   pixel_out = median_4neighbor(buf, i, j);   /* 盲元:邻域中值 */

} else {

   pixel_out = pixel_raw * Gain[addr] + Off[addr];  /* 正常:两点校正 */

}

国产 sensor 一般把 DPC 放 NUC 前(先替盲再校正),避免盲元把 Gain/Off 算歪;也有反过来放的,看 ISP pipeline 顺序。

三、标定硬件链路

两点标定要的硬件配套:

1. 黑体源:温控精度 ±0.1℃(如 ERC 的 BB701),面源黑体 ≥ 100 mm 口径,覆盖全 FOV

2. 遮光筒:黑体→镜头之间加遮光筒(内壁 Acktar 黑绒),防环境光漏进

3. Sensor 积分时间(Tint)同步:标定 T1/T2 时 Tint 固定(如 VOₓ 给 12 ms),别让 AGV 自动调 Tint,否则 Raw_T1/Raw_T2 差里混了 Tint 变化,Gain 算飘

4. 温控板:Sensor 底板 Therm 电调(非制冷 VOₓ 一般控 25±0.1℃,温漂源头先压住)

标定流程伪代码:

/* 两点标定流程 */

blackbody_set(20); delay(3000);        /* 等黑体温稳 */

capture_frame(Raw_T1);

blackbody_set(50); delay(3000);

capture_frame(Raw_T2);

calc_gain_offset(Raw_T1, Raw_T2, 20, 50);

burn_to_sensor_otp();                  /* 写 OTP / 或存外置 EEPROM */

四、调试三指标

板子回来用黑体 + 均匀面源验证:

1. 非均匀性 NU = σ(V_i)/V_mean(校正后裸图去盲元后算),VOₓ 两点校正后 < 0.3% 算合格,< 0.15% 优秀

2. NETD:黑体 ΔT=1 K,输出灰度差 / 噪声 RMS,400×300 VOₓ 两点校正后应 < 40 mK

3. 盲元替换边缘:对着刀口靶看盲元邻域有无"拉丝"(中值替会稍糊,均值替有拉丝,二选一看场景)

⚠ 温漂验证必做:Sensor 底板 25℃ → 45℃,NU 不应涨 > 50%(两点校正好的一般 25→45℃ 只涨 20%)。涨太多说明 Gain/Off 表是"一点思维"做的,或黑体 T1/T2 温差太小(建议 ≥ 20℃ 跨度)。

五、三个翻车高发点

• 黑体没罩遮光筒:环境光(顶灯、窗户)漏进,Raw_T1/T2 里混了非黑体分量,NU 校正后剩 1–2% 条纹

• 积分时间和黑体不同步:标定 T1 时 Tint=12 ms、标定 T2 时 AGV 自动改成 10 ms(因为 T2 亮),Gain 表里混了 Tint 比,高温段校正后偏暗

• 盲元表中值替过度:运动场景(行人、车)盲元邻域出现"鬼影",因为中值在边缘处把真实梯度抹了——边缘区改用均值替或 3×3 加权

IR NUC 的真谛:两点校正(T 跨 ≥ 20℃)+ Gain/Off 双 RAM + 盲元中值替前置 + 黑体标定 Tint 锁死 + 25→45℃ 温漂 NU 涨幅 < 50%。这套走完,400×300 VOₓ 的 NETD 压到 35 mK 内,麻点图变均匀灰阶,后续测温算法(ΔT→℃)的误差才能压到 ±2℃ 以内。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭