线性插值中当x,y坐标的数值大小数量级相差太大导致的问题
目录一、核心问题二、直接导致的 6 大类问题1. 浮点插值精度丢失、结果失真2. 转定点运算Q15/Q31/Q6直接溢出 / 截断报废3. 斜率极端微小 y 波动→x 剧烈跳变 / 反之4. 回归 / 拟合L1/L2 最小二乘完全跑偏5. 数值求导、斜率计算失效6. LUT 分段、索引映射逻辑崩坏三、针对性解决办法四、总结在博文根据ISP各个ISO节点标定后的参数如何插值生成当前增益下对应的ISP参数。如果不把ISO置于log域插值相应的ISO参数则有可能出现如下问题。一、核心问题假设坐标点点(x120, y133280)、(x280, y214745600)、插值y87040x区间几十量级101y区间几万一千四百多万量级104∼107横纵坐标量级差极大工程 / 算法 / 定点运算里坑非常多。二、直接导致的 6 大类问题1. 浮点插值精度丢失、结果失真线性插值公式xx1(x2−x1)⋅(y−y1)/(y2−y1)分母y2−y1极大分子差值很小浮点数有效尾数有限小数部分被抹平 表现算出来的x几乎贴在 20 附近微小真实偏移算不出来插值卡死。2. 转定点运算Q15/Q31/Q6直接溢出 / 截断报废你 ISP 常用定点y动辄千万级远超 Q15 最大值32767就算 Q31做大差值减法、乘法、除法中间乘积直接溢出变负数 / 乱码右移截断后有效小数位全丢插值完全不准 嵌入式 C 定点代码里这种量级差 极易算崩。3. 斜率极端微小 y 波动→x 剧烈跳变 / 反之这条直线y 稍微动一点对应 x 变化极小反过来 x 动一点y 爆炸式变化 工程上标定、LUT 插值、Gamma/DRC 分段查表时传感器微小噪声→y 抖动→插值 x 乱跳画面闪色、梯度断层。4. 回归 / 拟合L1/L2 最小二乘完全跑偏如果你后续要做多点拟合、校正像拼接亮度拟合、CCM/LSC 参数拟合y 量级碾压 x权重完全失衡拟合会无脑优先贴合 y完全不管 x 误差 模型畸变校正参数完全不收敛3A、调色不准。5. 数值求导、斜率计算失效算kΔy/ΔxΔx很小Δy巨大 → 斜率爆炸大浮点存不下、定点直接溢出后续增益、补偿系数一算就超量程。6. LUT 分段、索引映射逻辑崩坏ISP 大量用 LUT 查表把 y 当索引、x 当输出y 值域太宽稀疏分布大部分区间挤在一起索引分辨率极低 LUT 有效档位被浪费暗部 / 低亮度区域完全没精细分度过渡生硬。三、针对性解决办法坐标归一化 / 压缩值域把 y 做归一化缩到0∼1 或 0∼32767适配 Q15再插值算完反推还原。对数映射Gamma 类思路亮度 / 曝光类插值对 y 取 log 再线性插贴合人眼 压缩动态范围。分段插值 非均匀 LUT大动态 y 拆多段低数值段加密节点高数值段稀疏节点。定点运算提前防溢出先移位降阶、分步乘除不要一口气算大数差值乘法。四、总结xy 量级差巨大浮点丢精度、定点必溢出、拟合会跑偏、插值分辨率报废、ISP 画面易断层闪色。