OpenISP 模块拆解 · 第12讲:双边滤波降噪 (BNF)

OpenISP 模块拆解 · 第12讲:双边滤波降噪 (BNF) OpenISP 模块拆解 · 第12讲双边滤波降噪 (BNF)模块作用BNF 是双边滤波降噪openISP 中接在 NLM 后继续处理 Y 通道。它根据空间距离和灰度差异共同决定权重在平滑噪声的同时尽量保护边缘。openISP 实现源码类名为BNF(img, dw, rw, rthres, clip)。参数含义dw5x5 空间距离权重rw灰度差分段权重rthres灰度差阈值clip输出上限配置中的dw中心权重最大8 12 32 12 8 12 64 128 64 12 32 128 1024 128 32 12 64 128 64 12 8 12 32 12 8核心思想对每个 5x5 邻域weight spatial_weight * range_weight空间越近spatial_weight越大灰度越接近中心点range_weight应越大。这样跨边缘的像素会因为灰度差大而权重低。代码流程对 Y 图做 2 像素 reflect padding。遍历每个像素的 5x5 邻域。计算邻居与中心的绝对差。根据rthres把差值映射成rw。与dw相乘得到总权重。做加权平均。裁剪输出。读源码注意点源码里每个像素都会print([x,y]...)大图会非常慢且输出巨大。rdiff变量后来被替换成 range weight命名容易误导。阈值分支依赖rthres[128,32,8]这种从大到小的配置。面试问答Q1: 双边滤波为什么能保边因为它不仅看空间距离还看像素值差异。边缘两侧即使空间上近但灰度差大range weight 低因此不会被强烈平均。Q2: BNF 和 NLM 的区别是什么BNF 是局部滤波比较单像素灰度差NLM 是非局部滤波比较 patch 相似度。NLM 更复杂BNF 更轻量。Q3: range threshold 过大或过小有什么影响阈值过大时跨边缘像素也可能参与平均边缘变软。阈值过小时只有极相似像素参与降噪变弱。Q4: 为什么双边滤波可能产生塑料感如果过度平滑低纹理区域被抹得太干净而边缘仍保留会出现不自然的块面感或塑料质感。Q5: BNF 一般放在锐化前还是后通常放在锐化前。先降噪再锐化可以避免锐化把噪声当细节增强。