帝尔激光计算机视觉岗技术面面经
- 轮次
- 技术面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 自我介绍
- 超分辨网络设计最难的部分在哪里?怎么设计这个网络?
- 相机标定中世界坐标系、相机坐标系、成像坐标系、像素坐标系之间是怎么转换的?
- 卷积层的卷积原理是什么?
- 卷积层和全连接层有什么区别?
- 双目视觉系统的测距原理是什么?你项目中怎么实现的?
- Java 平台上怎么实现解耦调用?
- Java 平台调用模型算法时的数据流是怎样的,各部分之间是什么关系、步骤如何?
- 形态学变换中腐蚀和膨胀的原理是什么?
- Canny 边缘检测的原理是什么?Canny 算子是什么?
- 傅里叶变换的理论是什么,有什么作用和应用?
- 最小二乘法求最优解的原理和步骤是什么?
- 相机具体是怎么标定的?
- 单应性矩阵是多大的?每个向量代表什么?如果一张图像先缩放两倍,再沿 x 轴左移 20 像素、y 轴向下移动 10 像素,这个矩阵的具体值是多少?
- 除了超分辨网络,还学过检测相关的网络吗?做过 YOLO 吗?
- PointNet++ 的结构和理论是什么?
- 双目视觉系统的测距算法是怎么实现的?用了哪些工具和公式?
- 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 模块,就如实说是调用现成算子,同时讲清自己理解的并行粒度,这比含糊其辞安全得多。