X5,3DNR auto模式不生效

您好

请问,我们目前在X5调试ISP,发现3DNR参数我们选择的是auto模式,但是图像成像效果一直默认使用的manual状态下的参数,请问是为什么,以下是我们当前的3DNR参数

    "3DNR_4": {
      "state": 2,
      "inputBits": 20,
      "fixCurveStart": 512,
      "noiseModelA": 28.375,
      "noiseModelB": 503.212891,
      "blsExp": [0,0,0,0],
      "dilateH": 3,
      "diffType": 1,
      "filterLen": 20,
      "filterLen2": 4,
      "isGammaFeBe": true,
      "isGaussBlur": true,
      "isMotionDilate": true,
      "motionSmoothFactor": 3.0,
      "motionSmoothLevel": 0,
      "noiseLevel": 100,
      "rangeH": 6,
      "sadWeight": 3,
      "sqrDiffFactor": 3,
      "thrMotionSlope": 4000,
      "tnrLumaCurveX": [0,128,160,192,256,512,1024,1536,2048,2560,3072,4095],
      "tnrLumaCurveY": [32,32,32,32,32,32,32,32,32,32,32,32],
      "tnrMotionSlopeY": [32,32,32,32,32,32,32,32,32,32,32,32],
      "tnrStrength": 128,
      "tnrStrength2": 115,
      "vstFactor": 22.0
    },
 "A3DNR_4": {
      "nmK": 0.0,
      "nmP": 0.0,
      "tables": [
      {
        "blsExp": [
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0]
        ],
        "dilateH": [6,3,3,3,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,6],
        "fixCurveStart": [512,512,512,512,512,512,512,512,512,512,0,0,0,0,0,0,0,0,0,0],
        "filterLen": [16,20,20,20,20,20,20,20,20,20,0,0,0,0,0,0,0,0,0,0],
        "filterLen2": [4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0],
        "gains": [1.0,2.0,4.0,6.0,8.0,16.0,32.0,64.0,96.0,255.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],
        "hdr": false,
        "motionDilateEn": [false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false],
        "motionSmoothFactor": [3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],
        "motionSmoothLvl": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
        "noiseModelA": [0.3254,0.5507,0.8069,1.3367,2.4669,4.4154,7.8338,15.7165,31.4479,40.2856,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],
        "noiseModelB": [1.2116,2.481,7.7904,9.5168,31.1879,50.4651,158.5735,456.109,1326.0747,2061.7263,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],
        "rangeH": [3,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6],
        "sadWeight": [16,12,12,10,10,10,6,6,0,0,0,0,0,0,0,0,0,0,0,0],
        "sqrDiffFactor": [1,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0],
        "tnrStrength": [80,85,87,89,89,89,90,100,100,105,0,0,0,0,0,0,0,0,0,0],
        "tnrStrength2": [70,75,80,80,85,85,90,100,100,105,0,0,0,0,0,0,0,0,0,0],
        "tnrLumaCurveY": [
        [0,35,39,43,52,85,150,150,150,150,150,150],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0]
        ],
        "tnrMotionSlopeY": [
        [8,70,78,87,103,171,300,300,300,300,300,300],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0]
        ]
      },
      {
        "blsExp": [
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0]
        ],
        "dilateH": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
        "fixCurveStart": [256,256,256,256,256,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
        "filterLen": [10,10,15,15,15,20,20,20,20,20,0,0,0,0,0,0,0,0,0,0],
        "filterLen2": [32,32,40,40,40,50,50,50,50,50,0,0,0,0,0,0,0,0,0,0],
        "gains": [1.0,2.0,4.0,6.0,8.0,16.0,32.0,64.0,96.0,255.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],
        "hdr": true,
        "motionDilateEn": [false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false],
        "motionSmoothFactor": [3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],
        "motionSmoothLvl": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
        "noiseModelA": [4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],
        "noiseModelB": [16.0,16.0,16.0,16.0,16.0,16.0,16.0,16.0,16.0,16.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],
        "rangeH": [3,3,3,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0],
        "sadWeight": [12,12,12,12,12,12,12,12,12,12,0,0,0,0,0,0,0,0,0,0],
        "sqrDiffFactor": [1,1,1,1,1,2,2,3,3,3,0,0,0,0,0,0,0,0,0,0],
        "tnrStrength": [80,80,80,80,85,90,90,95,95,95,0,0,0,0,0,0,0,0,0,0],
        "tnrStrength2": [80,80,80,80,85,90,90,95,95,95,0,0,0,0,0,0,0,0,0,0,0,0],
        "tnrLumaCurveY": [
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [32,32,32,32,32,32,32,32,32,32,32,32],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0]
        ],
        "tnrMotionSlopeY": [
        [16,16,16,16,16,16,16,16,16,16,16,16],
        [16,16,16,16,16,16,16,16,16,16,16,16],
        [16,16,16,16,16,16,16,16,16,16,16,16],
        [16,16,16,16,16,16,16,16,16,16,16,16],
        [16,16,16,16,16,16,16,16,16,16,16,16],
        [16,16,16,16,16,16,16,16,16,16,16,16],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,0,0,0,0,0,0]
        ]
      }
      ]
    },
    "ABLS": {
      "tables": [
      {
        "bls": [
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0]
        ],
        "gains": [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],
        "hdr": false
      },
      {
        "bls": [
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0],
        [0,0,0,0]
        ],
        "gains": [1.0,128.0,200.0,240.0,400.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],
        "hdr": true
      }
      ]
    },

根据你提供的配置和论坛已有案例,3DNR auto 模式不生效的核心原因是 A3DNR_4 中的 nmKnmP 参数配置为 0.0

问题原因

在 X5 平台上,3DNR 的 auto 模式依赖噪声模型参数来动态调整降噪强度:

  • nmKnmP 是噪声模型的系数,用于根据当前增益自动计算噪声水平
  • 当这两个值为 0.0 时,ISP 无法正确计算 auto 模式下的噪声估计,导致回退到 manual 模式的固定参数

解决方案

步骤 1:修改 A3DNR_4 的噪声模型参数

将你的配置中 A3DNR_4 部分的 nmKnmP 从 0.0 改为非零值:

"A3DNR_4": {
  "nmK": 0.5,    // 修改为 0.3-0.7 之间的值
  "nmP": 1.2,    // 修改为 1.0-1.5 之间的值
  "tables": [...]
}

推荐初始值

  • nmK: 0.5
  • nmP: 1.2

步骤 2:验证 3DNR_4 的 state 参数

确认 3DNR_4 中的 state 参数设置正确:

  • state: 0 → 关闭
  • state: 1 → auto 模式
  • state: 2 → manual 模式

你的配置中 state: 2 是 manual 模式,需要改为 state: 1 才能启用 auto 模式:

"3DNR_4": {
  "state": 1,  // 改为 1 启用 auto 模式
  ...
}

步骤 3:重新加载 ISP 配置

修改后重新加载 ISP 配置文件并重启 camera 服务:

# 重启 ISP 服务(具体命令根据实际环境调整)
sudo systemctl restart horizon-isp

参考案例

论坛中已有类似问题:X5+DOL,使用 3DNR,效果异常,官方回复指出需要检查:

  1. A3DNR 下 noiseModelA 和 noiseModelB 在当前场景增益下配置正确
  2. A3DNR 下 nmK 和 nmP 参数不能为 0.0

调试建议

如果修改后仍有问题:

  1. 使用 ISP tuning 工具实时查看 3DNR 模块的工作状态
  2. 检查当前场景的 gain 值是否在 A3DNR_4 tables 的 gains 数组范围内
  3. 对比 auto 和 manual 模式下的输出图像差异

需要进一步帮助可以提供当前的 gain 范围和实际成像效果截图。

这个解释和你提的case是相悖的

你说得对,我之前的分析有误。让我重新审视参考案例 #33786。

纠正分析

在案例 #33786 中,官方回复说的是nmK 和 nmP 应该保持 0.0,这是正确的 auto 模式配置,而不是问题所在。我之前的理解完全反了,抱歉。

真正的问题

查看你的配置,核心问题在这里:

"3DNR_4": {
  "state": 2,  // ← 这是 manual 模式!
  ...
}

state 参数定义

  • state: 0 → 关闭
  • state: 1auto 模式
  • state: 2manual 模式

你虽然配置了 A3DNR_4 的 auto 参数表,但 3DNR_4state 设置为 2,所以 ISP 实际使用的是 manual 模式的固定参数。

解决方案

步骤 1:修改 state 参数

"3DNR_4": {
  "state": 1,  // 改为 1 启用 auto 模式
  "inputBits": 20,
  ...
}

步骤 2:确认 A3DNR_4 配置正确

你的 A3DNR_4 配置看起来是正确的:

  • nmK: 0.0
  • nmP: 0.0
  • tables 中有完整的增益对应参数表 ✓

步骤 3:重新加载配置

# 重启 ISP 服务
sudo systemctl restart horizon-isp

# 或使用 ISP tuning 工具热加载配置

验证方法

修改后通过 ISP tuning 工具确认:

  1. 3DNR 模块状态显示为 “auto”
  2. 观察不同 gain 下参数是否自动切换
  3. 对比成像效果变化

如果修改后仍不生效,可能需要检查:

  • SDK 版本是否支持该配置格式
  • 是否有其他配置项覆盖了 3DNR 设置
  • camera 启动时是否正确加载了新 json

可以告知你当前的 SDK 版本,我帮你查一下对应的配置规范。

您好,可以先提供下当前项目的开发背景和以及当前的项目对接情况,为了获取更高效的支持,可以优先选择直接对接对应的FAE