面灵AI→

帝尔激光计算机视觉岗技术面面经

轮次
技术面
时间
2026-10
来源
牛客网

《面试题目》

  1. 自我介绍
  2. 超分辨网络设计最难的部分在哪里?怎么设计这个网络?
  3. 相机标定中世界坐标系、相机坐标系、成像坐标系、像素坐标系之间是怎么转换的?
  4. 卷积层的卷积原理是什么?
  5. 卷积层和全连接层有什么区别?
  6. 双目视觉系统的测距原理是什么?你项目中怎么实现的?
  7. Java 平台上怎么实现解耦调用?
  8. Java 平台调用模型算法时的数据流是怎样的,各部分之间是什么关系、步骤如何?
  9. 形态学变换中腐蚀和膨胀的原理是什么?
  10. Canny 边缘检测的原理是什么?Canny 算子是什么?
  11. 傅里叶变换的理论是什么,有什么作用和应用?
  12. 最小二乘法求最优解的原理和步骤是什么?
  13. 相机具体是怎么标定的?
  14. 单应性矩阵是多大的?每个向量代表什么?如果一张图像先缩放两倍,再沿 x 轴左移 20 像素、y 轴向下移动 10 像素,这个矩阵的具体值是多少?
  15. 除了超分辨网络,还学过检测相关的网络吗?做过 YOLO 吗?
  16. PointNet++ 的结构和理论是什么?
  17. 双目视觉系统的测距算法是怎么实现的?用了哪些工具和公式?
  18. CUDA 进行模型加速是怎么实现的?

《参考解析》

相机标定要讲清四套坐标系和整条变换链路。 世界坐标系描述场景中物体的绝对位置;相机坐标系以光心为原点、Z 轴指向光轴;成像(图像)坐标系是相机坐标系在成像平面上的投影,单位是物理长度;像素坐标系以图像左上角为原点、单位是像素。整条链路是几个矩阵相乘:外参(旋转加平移,把世界坐标转到相机坐标)、透视投影(用焦距把三维点按深度除到成像平面)、内参(按像素当量换算并加上主点偏移),再叠加径向与切向畸变做非线性校正。张正友标定法用棋盘格在多姿态下拍摄,先由平面上的对应点解出每张图的单应性矩阵,再借助旋转向量的单位正交约束分离内外参,最后用最大似然或最小二乘做非线性优化。被问「怎么标定的」时,光报算法名字不够,要说清输入是哪些对应点、输出是什么、重投影误差用来判断标定质量。

单应性矩阵是三阶的,描述平面到平面的射影映射。 H 是 3×3,归一化后通常只有 8 个自由度(可把 h33 固定为 1),因此有四组以上对应点就能求解。八个元素里前两列决定平面上的旋转与缩放(含切变),第三列是平移,最后一行的前两项刻画透视带来的远近比例变化。它只对平面目标或纯旋转相机成立,三维场景的任意映射要用基础矩阵,这是常被追问的区分点。算那个例子:先缩放两倍,再沿图像 x 轴向左移动 20 像素、y 轴向下移动 10 像素,在常见的图像坐标系(原点左上、y 向下)里就是 x’ = 2x − 20、y’ = 2y + 10,齐次矩阵为 [[2, 0, −20], [0, 2, 10], [0, 0, 1]];如果 y 轴约定为向上,同一个位移的符号就相反。先声明坐标系约定再给矩阵,比直接甩数字更稳。

形态学变换与 Canny 的链路要能连起来讲。 腐蚀是用结构元素在图上滑动取邻域最小值,亮的细节被吃掉、目标变瘦,用来去噪和断开细小连接;膨胀取邻域最大值,目标变胖、空洞被填,用来连接断裂和补洞。两者组合出开运算(先腐蚀后膨胀,去小噪点保大体形状)和闭运算(先膨胀后腐蚀,填小洞连断线),在工业视觉的缺陷检测里常用来先压掉背景干扰再算面积。Canny 是四步:高斯滤波降噪、用 Sobel 一类算子算梯度幅值与方向、沿梯度方向做非极大值抑制把边缘细化到单像素宽、最后双阈值加滞后连接——高于高阈值的点直接算边缘,低于低阈值的丢弃,落在中间的只有连到确定边缘才保留。面试常追的就是高斯核大小与两个阈值怎么定。

傅里叶变换换的是看问题的坐标系。 图像是空域信号,变换后拆成不同频率的成分:低频对应平缓背景和大块区域,高频对应边缘、纹理和噪声。工程价值有三处:滤波变得简单,高斯滤波在频域就是一个低通响应相乘,理想低通能去噪但会带来振铃,所以实际多用巴特沃斯这类平滑过渡;周期性噪声(条纹、摩尔纹)在频域表现为一对孤立亮点,直接挖掉比在空域设计滤波器容易得多;它还是卷积定理和相位相关配准这类频域算法的前提。回答时最好带上自己用过的场景,并说清代价——要做正反两次变换,边界处理不当会出现伪影。

双目测距的核心是视差与三角关系。 两个相机水平放置、光轴平行时,空间点在左右图像上的横坐标之差就是视差 d,距离 Z = f × B / d,f 为像素单位的焦距、B 为基线。误差随距离增长得很快(近似与 Z² 成正比),所以远处精度会迅速变差,工程上靠加大基线、提高分辨率,或改用结构光与 ToF 来补。真正难的是落地流程:先做双目标定拿到内外参与畸变系数,再用极线校正把两幅图对齐到同一水平线,然后做立体匹配求视差图——这一步最耗时也最容易出错,需要代价聚合、左右一致性检查、亚像素插值和空洞填充,OpenCV 里对应 stereoRectify、SGBM、reprojectImageTo3D 这套组合。被追问公式时,把针孔模型、视差公式和重投影误差讲清楚就够了。

CUDA 加速不是「配好环境就变快」。 面试官问这个,是想知道有没有真的写过并行代码。回答要落到三件事:哪些计算值得搬到 GPU(逐元素卷积、矩阵乘、点云近邻搜索这类数据并行度高、访存规整的算子);怎么组织(线程层次与 block 大小的选择、合并访存、先把数据拷进显存并尽量复用、减少主机与设备之间的来回拷贝);怎么判断收益(用 nsight 或简单计时对比 CPU 与 GPU 耗时,看显存占用与 kernel 占用率,确认瓶颈在计算而不是在拷贝)。如果项目里只是调用 PyTorch 的 .cuda() 或 OpenCV 的 CUDA 模块,就如实说是调用现成算子,同时讲清自己理解的并行粒度,这比含糊其辞安全得多。