当前位置: 首页 > news >正文

JPL 公式由来

目录

一、JPL 公式的历史背景

二、数学基础

三、单系数:C^≈M+m/4(JPL 原始版)

1. 数学最优与工程折衷

2. 误差分析(JPL 当年的验证)

四、两段式(JPL 改进版):M+m/8 与 M+m/2

五、 变体

六、JPL 公式的本质

七、可直接用的定点 C 代码


JPL 最早提出、工业界沿用至今的经典近似:C≈M+m/4​或C≈M+m​/8


一、JPL 公式的历史背景

  • 时代:1960–1970 年代,NASA / JPL 做深空探测(水手号、维京号)
  • 硬件没有 FPU、没有硬件开方、没有通用除法
    • 只有整数 ALU、移位器、极慢的软件除法
  • 需求
    • 彩色图像处理:RGB → YUV / IQ 后要算色度幅值 C = √(U²+V²)
    • 用于:饱和度、自动白平衡、色彩校正、边缘检测
    • 必须每像素 1–2 周期、纯整数、无除法 / 开方

JPL 为航天器实时图像处理,发明了这套极简近似,后来成为ISP / 嵌入式 / 计算机视觉工业标准


二、数学基础


三、单系数:C^≈M+m/4(JPL 原始版)

1. 数学最优与工程折衷

前面推导:全局 MMSE 最优 k ≈ 0.30JPL 选:k=1/4​=0.25为什么是 1/4?

(1)数学上:极接近最优,误差极小

  • 最优:0.30
  • 1/4 =0.25
  • 偏差仅0.05相对误差 < 2%(全角度)

(2)工程上:唯一完美选择

  • 1/4 = 1 >> 21 次右移即可
  • 无浮点、无除法、单周期完成
  • 其他值(0.3、0.3006)都需要:
    • 乘法 + 多次移位 + 舍入(复杂、慢、占门数)

2. 误差分析(JPL 当年的验证)

角度 θ ∈ [0°, 45°],设 M=cosθ,m=sinθ:

θMmC=1M+m/4绝对误差相对误差
101100%
15°0.9660.25911.0650.0656.5%
30°0.8660.511.0160.0161.6%
45°0.7070.70710.884-0.116-11.6%

关键观察

  • 0°、30° 附近误差极小
  • 45° 误差偏大(≈-11.6%)→ 所以 JPL 后来加第二段

四、两段式(JPL 改进版):M+m/8 与 M+m/2

为压低 45° 误差,JPL 用两段固定 k

1. 分段规则(标准 JPL)

2. 为什么选:

  • k₁=1/8(0.125)
    • 小角度(M≫m)最优区间:0.10~0.15
    • 1/8 完美落在中间
    • 实现:1 >> 3
  • k₂=1/2(0.5)
    • 45° 附近最优:0.45~0.50
    • 1/2 是数学上最优点
    • 实现:1 >> 1
  • 分段点 M=4m
    • 4 是2 的幂,比较只需整数减法 / 移位
    • 刚好是误差曲线的拐点

3. 两段式误差(极大改善)

表格

θM≥4m?近似式估计值真实 C误差
M+m/8110%
15°M+m/21.0961+9.6%
30°M+m/21.1161+1.6%
45°M+m/21.0601+6.0%
  • 最大误差 < ±6%(远好于单段)
  • 人眼完全不可察觉(饱和度误差 <5% 无感)

五、 变体

很多用M≥3m而非 4m:

为什么改成 3m?

  • 3m 比 4m 更 “晚切”:覆盖更多小角度用 m/8
  • 第二段7/8 M + 1/2 m等价:C^=M−8M​+2m​
    • 依然纯移位、无除法
    • 45° 误差进一步压到< 3%

六、JPL 公式的本质

  1. 数学:在 M≤C≤M+m 之间,用线性组合 M + k・m拟合圆
  2. 最优 k:单段≈0.30,两段≈0.125、0.5
  3. 工程:只选1/8、1/4、1/2→ 因为只有它们是2 的幂倒数纯移位实现
  4. 历史:JPL 1970 年代为深空探测发明,全行业沿用成标准

七、可直接用的定点 C 代码

// 输入:U, V(int16_t) // 输出:C ≈ √(U²+V²)(uint16_t) uint16_t jpl_chroma(int16_t U, int16_t V) { int16_t a = (U >= 0) ? U : -U; int16_t b = (V >= 0) ? V : -V; int16_t M = (a > b) ? a : b; int16_t m = (a < b) ? a : b; int16_t C; if (M >= (m << 2)) { // M >= 4*m C = M + (m >> 3); // M + m/8 } else { C = M + (m >> 1); // M + m/2 } return (uint16_t)C; }
http://www.jsqmd.com/news/645553/

相关文章:

  • 避坑指南:处理TROPOMI哨兵5号NC数据时,为什么你的ArcGIS多维工具读不出来?
  • 森林火灾烟雾识别 人工智能AI图像识别 yolo工业安放智能化 森林建筑安全防火监控智能化 深度学习火焰图像识别第10322期
  • Audiveris:如何让纸质乐谱在几分钟内变成数字音乐?
  • 云计算服务模式
  • 2026河南成考机构实力排行榜:翼程蝉联榜首,Top5深度测评 - 商业科技观察
  • 5分钟快速掌握Illustrator批量替换脚本:ReplaceItems.jsx完整使用指南
  • 2026年双腿义肢厂家最新推荐/假肢,专业假肢,假脚假肢,上臂义肢 - 品牌策略师
  • Win系统Nvidia显卡驱动安装全攻略:从检测到配置
  • Horos:专业医疗影像查看器的完整入门指南
  • 告别MinGW!Qt Creator 4.14.2 配置 MSVC2019 构建套件保姆级教程(Windows 10 + Qt 6.0.3)
  • 想要高质量视频素材数据集?2026年供应商推荐:卓特视觉 - 品牌2026
  • 2026年PVC公司榜单分析,PVC排水管/PVC七孔管/PVC家装管/PVC穿线管/PVC电力管 - 品牌策略师
  • 别再被 ee.Initialize() 坑了!手把手教你正确配置 Python 本地 GEE API(附项目名查找指南)
  • Pixel Aurora Engine实际作品:符合Game Boy Advance 32KB ROM限制的压缩输出
  • HBuilderX中Git插件高效开发指南:从安装到分支管理
  • GRACE数据处理避坑指南:手把手教你用Matlab搞定RL06数据读取(附改进版工具箱)
  • QMCDecode:解锁QQ音乐加密格式的终极指南 [特殊字符]
  • 大麦网抢票神器:Python自动化脚本完整使用指南
  • 【行业深度对谈】穿透“文凭焦虑”:翼程教育17年深耕河南,合规办学助力中原经济区人才学历突围 - 商业科技观察
  • 如何彻底解决电脑噪音和过热问题:Fan Control风扇控制的终极指南
  • 从零开始:用CubeIDE给STM32F103装上ThreadX实时系统(附LED+串口测试案例)
  • 权威甄选 | 2026 云南纯玩正规旅行社推荐,畅玩云南更安心 - 深度智识库
  • 2026年号易招商政策解析与通信分销副业开展指南 - 号易官方邀请码666666
  • WorkshopDL:无需Steam客户端,3分钟搞定创意工坊模组下载
  • 如何在3分钟内为视频添加专业字幕?AutoSubs让你告别手动打字时代
  • 如何永久保存微信聊天记录?WeChatMsg完全指南让你告别数据丢失
  • 京东e卡回收渠道有哪些?抽屉里那张卡,值得更好的去处 - 京顺回收
  • STM32CubeIDE串口轮询收发避坑指南:从printf重定向到数据错乱,新手常踩的5个坑
  • 别再只调占空比了!深入理解PWM驱动直流电机的三大关键参数(频率、占空比、精度)
  • Azure DevOps Server 25H2 - 企业级本地 DevOps 协作与持续交付平台 (2026 年 4 月更新)