面经学习(二)

1、请说明图像处理中空域滤波与频域滤波的基本概念、典型方法、适用场景及主要区别。
答:空域滤波 是直接在图像像素上操作。它会取某个像素周围的一小块邻域,然后按照某种规则重新计算该像素值,所以它更像是在原图上直接做局部处理。常见的空域方法包括均值滤波、高斯滤波、中值滤波和双边滤波。比如高斯滤波本质上是加权平均,离中心越近权重越大,适合去除高斯噪声和做预平滑;中值滤波则是用邻域中值替换当前像素,对椒盐噪声尤其有效,而且比普通均值滤波更保边。

频域滤波 则不是直接改像素,而是先通过傅里叶变换把图像映射到频率空间,再对不同频率成分做处理,最后变换回图像域。这里要理解:低频 通常对应整体亮度和缓慢变化区域,高频通常对应边缘、纹理、细节,也可能包含噪声。所以频域低通滤波就是保留低频、抑制高频,效果上表现为平滑和去噪;频域高通滤波则相反,常用于边缘增强和锐化。对于周期条纹噪声这类具有明显频谱特征的干扰,频域方法通常比空域方法更有针对性。

python 复制代码
img = cv2.imread('test.jpg', 0)
out = cv2.GaussianBlur(img, (5, 5), 1.0)

out = cv2.medianBlur(img, 5)

out = np.abs(np.fft.ifft2(np.fft.ifftshift(f * mask)))

2、请任选两种典型图像去噪算法,比较它们的原理、适用噪声类型、优缺点以及实际应用场景。
答:中值滤波 vs 非局部均值(NLM)

中值滤波 属于传统局部非线性滤波,它只看当前位置附近一个小邻域,计算简单,对孤立异常值特别鲁棒, 所以很适合处理椒盐噪声。但它的缺点也明显:它只利用局部信息,对复杂纹理和细节的恢复能力有限,核一旦变大,图像会明显发糊。

非局部均值 的思想则更进一步。它不是只看当前位置附近,而是在更大范围内寻找与当前小块相似的区域,再利用这些相似块做加权平均 。它利用了图像中的自相似性,所以对随机噪声尤其是高斯噪声的处理效果通常比传统局部滤波更好,而且更能保留纹理结构。但它的问题是计算量更大,对参数也更敏感,在实时系统中部署压力更大。

高斯滤波 vs BM3D

高斯滤波 本质上是一种局部线性平滑方法 。它在当前像素周围取一个邻域,用高斯权重做加权平均,距离中心越近的像素权重越大。它的核心思想很直接:通过局部平滑来抑制高频波动,因此它对轻度随机噪声有一定效果,尤其适合作为预处理步骤。

BM3D 则属于经典的高性能非深度学习去噪方法 。它的核心不再是简单的局部平均,而是利用图像中的非局部自相似性 :先在图像中寻找与当前小块相似的多个图像块,把这些相似块堆叠成一个三维数组,然后在变换域里做协同稀疏表示和阈值收缩,最后再聚合回图像。它的本质思想是:真正的图像结构在相似块堆叠后具有更强的可表示性,而噪声更容易被分离出去。

块匹配、分组、变换和聚合

python 复制代码
img = cv2.imread('test.jpg', 0)
out = cv2.medianBlur(img, 5)


out = cv2.fastNlMeansDenoising(img, None, 10, 7, 21)
#10 控制去噪强度,越大去噪越强;
后面的窗口参数控制局部块大小和搜索范围。

from bm3d import bm3d
out = bm3d(img, sigma_psd=0.1)

3、请说明自动白平衡(AWB)的目标、基本原理、常见实现思路,以及一个可落地的自动白平衡算法通常包含哪些关键步骤。
答:自动白平衡的目标,是在不同光照条件下校正图像整体偏色, 使白色物体尽量恢复为中性白,同时让整幅图像颜色看起来更自然。它的核心思路可以概括为两步:先估计 当前场景的光源颜色,再根据估计结果对RGB 通道做增益补偿。

如果让我设计一个自动白平衡算法,我一般会先在RAW 或线性域上做处理 ,并过滤掉过曝、过暗和不可靠区域,然后在可信区域上估计光源颜色 。经典方法可以采用灰世界假设、白点假设或 Gray-Edge 这类统计方法;如果是更复杂的系统,也可以结合场景先验或学习方法来提高鲁棒性。得到光源估计后,再计算 R、G、B 三个通道的增益系数 ,对图像进行颜色补偿,并结合增益范围限制、高光保护等约束避免过校正。如果是视频场景,还需要加入时域平滑,防止帧间白平衡跳变。

python 复制代码
import cv2
import numpy as np

img = cv2.imread("test.jpg").astype(np.float32)

b_mean = np.mean(img[:, :, 0])
g_mean = np.mean(img[:, :, 1])
r_mean = np.mean(img[:, :, 2])

k = (b_mean + g_mean + r_mean) / 3.0

img[:, :, 0] *= k / b_mean
img[:, :, 1] *= k / g_mean
img[:, :, 2] *= k / r_mean

out = np.clip(img, 0, 255).astype(np.uint8)

4、请说明图像拼接的完整处理流程,包括配准、变换、融合等关键步骤,并解释如何减少拼接缝、保证过渡自然。
答:图像拼接一般包括特征提取、特征匹配、变换模型估计、图像配准以及融合优化几个关键步骤。通常先提取 SIFT、SURF 或 ORB 等特征点,并在重叠区域建立匹配关系,然后结合 RANSAC 剔除误匹配,估计两幅图像之间的几何变换模型,例如仿射变换或单应矩阵。之后将待拼接图像映射到统一坐标系中,实现几何对齐。

为了保证拼接处自然过渡,关键要同时处理几何一致性和光度一致性。一方面要尽量提高配准精度,减少错位带来的双影和边缘断裂;另一方面要对重叠区域做合理融合,例如采用加权融合、多频带融合或最优缝合线方法,并结合曝光补偿、颜色校正等手段减小亮度和色彩差异。整体来说,拼接效果是否自然,不仅取决于是否能对齐,更取决于缝合区域的融合策略是否合理。
5、说明 HDR 多曝光融合的基本目标,并分析在实际系统中,多曝光图像融合需要解决哪些核心问题。
答:HDR 多曝光融合的目标,是通过融合不同曝光图像,同时保留高光和暗部细节 ,从而解决单次曝光动态范围不足的问题 。它需要解决的核心问题主要有几个方面:首先是多张曝光图之间的配准问题 ,如果相机抖动或场景中存在运动物体,直接融合会导致错位和重影;其次是**动态场景下的鬼影问题,需要识别运动区域并进行去鬼影处理。**除此之外,还要解决不同曝光图在不同区域的信息选择问题,例如短曝光更适合保留高光细节,长曝光更适合保留暗部细节,因此通常需要设计合理的融合权重。最后,HDR 结果还需要经过 tone mapping 才能在普通显示设备上自然呈现,因此还要兼顾动态范围压缩、局部对比度保持以及颜色自然性。

HDR 多曝光融合的核心难点是:配准、去鬼影、权重选择,以及融合后自然显示

复制代码
import cv2

img1 = cv2.imread("exp1.jpg")
img2 = cv2.imread("exp2.jpg")
img3 = cv2.imread("exp3.jpg")

merge_mertens = cv2.createMergeMertens()
fusion = merge_mertens.process([img1, img2, img3])

out = (fusion * 255).astype("uint8")

6、无人机高速飞行时,图像会因为机身抖动、目标运动、低照度长曝光而产生模糊。假设不依赖光学防抖,你会如何从拍摄策略、运动估计、图像恢复、动态场景鲁棒性几个角度设计一套可落地方案?"
答:对于无人机高速运动拍摄导致的模糊问题,如果不依赖光学防抖,我会从采集策略、运动建模、恢复算法和动态场景鲁棒性四个层面来做。

首先在采集侧,我会根据飞行速度、角速度和亮度信息自适应限制曝光时间,并尽量结合 burst 连拍和 IMU/陀螺仪同步,减少模糊退化并给后端提供运动先验。

其次在算法侧,我会先做一个退化分析,判断当前模糊主要来自相机运动 还是物体运动 。如果是相机运动为主、场景相对静态,我会采用多帧去模糊:先利用 IMU 或全局模型做粗配准,再用光流做局部精配准,最后进行鲁棒融合或去卷积恢复。

但如果场景里存在明显运动目标,我不会整张图直接做多帧强融合,因为这很容易带来重影和伪影。我的改进思路是:先通过全局运动与局部光流残差 来检测动态区域,生成动态 mask。背景区域继续做多帧融合,前景动态区域切换为单帧恢复或局部运动建模,在边界处再通过置信图做软融合。这样能把"相机运动"和"目标运动"分开处理,明显降低 ghost artifact。

如果是工程落地,我还会加入回退机制:当配准置信度低、动态比例高时,自动降级到轻量单帧方案,优先保证结果自然稳定,而不是盲目追求锐度。
7、你如何评估一个图像增强或恢复算法的效果?有哪些客观和主观评价指标?
答:

如果有 GT,我会先看全参考指标,比如 PSNR、SSIM ,必要时加 LPIPS。这里 PSNR 和 SSIM更偏保真,适合看恢复结果和真值是否接近;LPIPS 更偏感知,更接近人眼对"像不像"的判断。

但真实工程里很多数据没有 GT,这时我不会继续执着于 PSNR,而是会结合无参考指标,比如 NIQE、BRISQUE,再配合主观 A/B test 或 MOS 打分,去看图像是否自然、有没有伪影、有没有过锐化或假细节。

另外我会特别重视分场景评估,而不只看平均值。因为很多算法在平均分上提升明显,但在夜景、高运动、人脸、高纹理这些关键场景会翻车,所以我会做 bucket 分析和 worst-case 分析。

如果这个算法是为下游检测、跟踪、OCR 服务的,我还会直接看任务指标,比如 mAP、跟踪成功率,而不是只看画质分数。

最后在端侧落地时,我一定会把时延、内存、功耗和稳定性一起纳入评价。因为工程上最优解不是单一画质最好,而是画质和资源之间的整体平衡。
8、你能不能从 RAW 输入开始,讲一下一张图在 ISP 里的主要处理流程?如果你是做图像算法的,你会怎么和 ISP 团队配合,把算法真正落到产品上?
答:

我会把它理解成一条从RAW 到可显示图像的成像链路 。前面通常是传感器层面的基础校正 ,比如黑电平校正、坏点修复、镜头阴影校正,这部分更偏物理保真;中间会做一些核心恢复模块 ,比如降噪、白平衡、去马赛克,把原始信号逐步恢复成可用的 RGB 信息;后面则更多是感知和显示相关处理,比如颜色校正、gamma、tone mapping、局部对比度增强和锐化,让图像在显示端看起来更自然、更通透。

我觉得理解 ISP 的关键,不是把模块顺序背下来,而是要知道不同模块解决的问题不同、所在的数据域不同,而且前后强耦合。比如 RAW 域更适合做保真恢复类任务,RGB 域更适合做感知增强;降噪如果太强,后面的锐化就容易出假边,tone mapping 也可能把伪影放大。

如果我是图像算法工程师,和 ISP 团队协作时我会重点对齐四件事:输入输出域、模块前后依赖、评价指标和资源预算。因为很多算法离线单测很好,但接入整条 ISP 后效果会变,原因往往不是算法本身失效,而是前后模块耦合导致输入分布变化或者伪影被放大。所以我会把算法接入看成 pipeline 联调问题,而不是单模块交付问题。
9、你对深度学习在图像去马赛克、超分辨率等传统任务中的应用有何了解?
我理解深度学习在去马赛克、超分这类传统图像恢复任务里的价值,核心在于它把原来依赖人工设计的图像先验,变成了可以从数据中学习的先验。

像去马赛克,本质上是从 CFA 采样恢复完整 RGB,传统方法通常靠插值和边缘规则,优点是稳定、快、可解释,但在复杂纹理和颜色边界上容易出现伪色和 zipper artifact。深度学习方法能同时学习局部结构、颜色相关性和纹理先验,所以在细节恢复和伪影抑制上通常更强。

超分也是类似,传统插值方法简单稳定,但只能放大,恢复不出真实高频;深度学习通过学习 LR 到 HR 的映射,可以恢复更多边缘和纹理信息。不过这里有一个关键权衡,就是保真和感知的平衡:如果强调 PSNR,结果往往更稳但偏平;如果加感知损失甚至对抗损失,图会更锐,但也更容易出现假细节。

从工程角度看,我不会简单认为深度学习一定替代传统方法。它的优势是上限高,但代价是更依赖数据、泛化风险更大、部署成本更高。所以在真实产品里,通常是保留稳定的传统链路,在收益最高的模块引入学习式方法,同时重点关注时延、功耗和鲁棒性,而不是只看离线指标。

深度学习在传统图像恢复任务里的核心价值,是把"手工设计先验"升级为"数据驱动先验",但真正落地时必须同时权衡保真、感知、泛化和端侧成本。

1

相关推荐
John.Lewis2 小时前
C++加餐课-二叉树:进阶算法
数据结构·c++·算法
郝学胜-神的一滴2 小时前
ReLU激活函数全解析:从原理到实战,解锁深度学习核心激活单元
人工智能·pytorch·python·深度学习·算法
夜瞬2 小时前
NLP学习笔记05:命名实体识别(NER)入门——从规则方法到 BERT
笔记·学习·自然语言处理
AGV算法笔记2 小时前
最新感知算法论文分析:RaCFormer 如何提升雷达相机 3D 目标检测性能?
数码相机·算法·3d·自动驾驶·机器人视觉·3d目标检测·感知算法
脱氧核糖核酸__2 小时前
LeetCode热题100——54.螺旋矩阵(题解+答案+要点)
c++·算法·leetcode·矩阵
lxh01132 小时前
电话号码的字母组合
java·javascript·算法
爱学习的小可爱卢2 小时前
算法—Java Map 核心方法与实战场景指南
java·开发语言·算法
WWZZ20252 小时前
Sim2Sim理论与实践3:深度强化学习
人工智能·算法·机器人·深度强化学习·具身智能·四足·人形
会编程的土豆2 小时前
【数据结构与算法】栈的应用
数据结构·c++·算法