opencv笔试面试必背题目

算法工程师,技术软件类求职opencv必背八股文

更多算法/业务/HR面等笔试题面试题 —— > 个性签名自取!


1.opencv中RGB2GRAY是怎么实现的

答:以R、G、B为轴建立空间直角坐标系,则RGB图的每个象素的颜色可以用该三维空间的一个点来表示,而Gray图的每个象素的颜色可以用直线R=G=B上的一个点来表示。于是rgb转gray图的本质就是寻找一个三维空间到一维空间的映射,最容易想到的就是射影(即过rgb空间的一个点向直线R=G=B做垂线),事实上Matlab也是这样做的,输出的灰度图像是RGB三种颜色通道的加权和;

Gray = 0.29900 * R + 0.58700 * G + 0.11400 * B。

灰度可以说是亮度(luminance)的量化值,而RGB的定义是客观的三个波长值,转换时需要考虑人眼对不同波长的灵敏度曲线,所以系数不相等。

目前通过卷积神经网络进行检测的方法主要分为one-stage和two-stage,分别写出了解的对应的算法。

2在共性上两类检测算法有哪些差异?

One-stage:yolov1、yolov2、yolov3、SSD、RetinaNet(2分)

Two-stage:Fast R-CNN、Faster R-CNN(2分)

Two-stage检测算法的共性,以faster r-cnn为例,使用了复杂的网络用于每个候选区域的分类和回归;ROI pooling后的feature channels数目较大,导致内存消耗和计算量都比较大。

One-stage检测算法的共性,从网络结构上看只是多分类的rpn网络,相当于faster rcnn的第一阶段,因此one-stage主要的优势是速度快。其预测结果是从feature map回归出目标的位置及分类,有的也采用了anchor的概念。而two-stage对上述结果进行roi pooling后会进一步细化,因此two-stage算法检测精度一般相对较高。还有一种观点是,two-stage的rpn部分相当于做了正负样本均衡,这也是two-stage检测效果相对较好的一个原因。one-stage算法对小目标检测效果较差,如果所有的anchor都没有覆盖到这个目标,那么这个目标就会漏检。如果一个比较大的anchor覆盖了这个目标,那么较大的感受野会弱化目标的真实特征,得分也不会高。two-stage算法中的roi pooling会对目标做resize, 小目标的特征被放大,其特征轮廓也更为清晰,因此检测也更为准确。

3.连续图像转化为数字图像需要进行哪些操作?

答:取样 量化

4. 数字图像中有哪些基本特征?

答:颜色特征、纹理特征、形状特征、空间关系特征等。

5.图像边缘检测中常用的边缘检测算子有哪些?

答:Roberts算子、Prewitt算子、Sobel算子、Canny算子、Laplacian算子等。

6对霍夫变换的理解

霍夫变换常用来提取图像中的直线和圆等几何形状。它通过一种投票算法检测具有特定形状的物体。该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。

答案

针对每个像素点,使得theta从-90度到180度,使用极坐标p = xcos(theta) + ysin(theta) 计算得到共270组(p,theta)代表着霍夫空间的270条直线。将这270组值存储到H中。

如果一组点共线,则这组点中的每个值,都会使得H(p,theta)加1。

因此找到H(p,theta)值最大的直线,就是共线的点最多的直线,H(p,theta)值次大的,是共线点次多的直线。可以根据一定的阈值,将比较明显的线全部找出来

7对HOG特征的理解

问题解析

HOG(Histogram of Oriented Gridients的简写)特征检测算法,一种解决人体目标检测的图像描述子,是一种用于表征图像局部梯度方向和梯度强度分布特性的描述符。其主要思想是:在边缘具体位置未知的情况下,边缘方向的分布也可以很好的表示行人目标的外形轮廓。

整体流程简单描述如下:

1将输入图像(你要检测的目标或者扫描窗口)灰度化,即将彩色图转换为灰度图

2颜色空间归一化:采用Gamma校正法对输入图像进行颜色空间的标准化(归一化),目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰

3梯度计算:计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰

4梯度方向直方图:将图像划分成小cells(例如88像素/cell), 统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的描述符

5重叠直方图归一化:将每几个cell组成一个block(例如33个cell/block),一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征描述符。

6HOG特征:将图像image内的所有block的HOG特征描述符串联起来就可以得到该image(你要检测的目标)的HOG特征描述符,就得到最终的可供分类使用的特征向量了

答案

HOG的主要思想是:在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布(即梯度的统计信息,而梯度主要位于边缘的地方)很好地描述。HOG特征检测算法的几个步骤:颜色空间归一化—>梯度计算—>梯度方向直方图—>重叠块直方图归一化—>HOG特征

8常用的图像局部特征和全局特征

常用的全局特征就是颜色,纹理,形状,直方图等,局部特征有关键点,角点等

9图像的插值方法有哪些?

最近邻法

双线性内插法

三次内插法

10Graph-cut的基本原理和应用

GraphCut方法图像分割问题与图的最小割(min cut)问题相关联。

首先用一个无向图G=表示要分割的图像,V和E分别是顶点(vertex)和边(edge)的集合。此处的Graph和普通的Graph稍有不同。普通的图由顶点和边构成,如果边的有方向的,这样的图被则称为有向图,否则为无向图,且边是有权值的,不同的边可以有不同的权值,分别代表不同的物理意义。而Graph Cuts图是在普通图的基础上多了2个顶点,这2个顶点分别用符号”S”和”T”表示,统称为终端顶点。其它所有的顶点都必须和这2个顶点相连形成边集合中的一部分。

答案

根据待分割的图像,确定图的节点与边,即图的形状已确定下来,是给图中所有边赋值相应的权值,然后找到权值和最小的边的组合,就完成了图像分割。

11SIFT/SURF的特征提取方法,是如何保持尺度不变性的?

问题解析

主要考察SIFT/SURF特征的理解,SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。

尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯差分函数来识别潜在的对于尺度和旋转不变的关键点。

关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。

关键点方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而保证了对于这些变换的不变性。

关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度作为关键点的描述符,它允许比较大的局部形状的变形或光照变化。

SURF 算法,是SIFT算法的增强版,它的计算量小,运算速度快,提取的特征与SIFT几乎相同。

12Canny边缘检测的流程

Canny边缘检测的流程是:

图像降噪。我们知道梯度算子可以用于增强图像,本质上是通过增强边缘轮廓来实现的,也就是说是可以检测到边缘的。但是,它们受噪声的影响都很大。那么,我们第一步就是想到要先去除噪声,因为噪声就是灰度变化很大的地方,所以容易被识别为伪边缘。

计算图像梯度,得到可能边缘。计算图像梯度能够得到图像的边缘,因为梯度是灰度变化明显的地方,而边缘也是灰度变化明显的地方。当然这一步只能得到可能的边缘。因为灰度变化的地方可能是边缘,也可能不是边缘。这一步就有了所有可能是边缘的集合。

非极大值抑制。通常灰度变化的地方都比较集中,将局部范围内的梯度方向上,灰度变化最大的保留下来,其它的不保留,这样可以剔除掉一大部分的点。将有多个像素宽的边缘变成一个单像素宽的边缘。即“胖边缘”变成“瘦边缘”。

双阈值筛选。通过非极大值抑制后,仍然有很多的可能边缘点,进一步的设置一个双阈值,即低阈值(low),高阈值(high)。灰度变化大于high的,设置为强边缘像素,低于low的,剔除。在low和high之间的设置为弱边缘。进一步判断,如果其领域内有强边缘像素,保留,如果没有,剔除。

13. 图像锐化 – sharpen

图像锐化,是使图像边缘更清晰的一种图像处理方法,细节增强(detail enhancement)我理解也包含了图像锐化,常用的做法是提取图像的高频分量,将其叠加到原图上。图像高频分量的提取有两种做法,一种是用高通滤波器,得到高频分量,另一种是通过低通滤波,用原图减低频得以高频。

直接提取高频的方法有sobel算法和laplcian算子。sobel算子是图像的一阶导数,提取的是梯度信息,分水平和垂直两种,常常用来做边缘检测、方向判别,sobel算子在斜坡处不为0,因此会产生较粗的边缘。laplcian算子是图像的二阶导,在图像开始变化和结束变化的地方值不为0,渐变时结果为0,因此laplacian比sobel算子更适合做sharpen。

除了直接提取高频的方法外,我们也可以先提取低频,原图减去低频得到高频。这种方法称为非锐化掩模(unsharpen mask),我们常使用低通滤波器(高斯、双边)对图像进行滤波,这种方法滤波器很好控制(包括大小和强弱),从而可以控制高频分量的强弱。

平滑:把图像变模糊

锐化:把图像变清晰

图像锐化主要用于增强图像的灰度跳变部分,这一点与图像平滑对灰度跳变的抑制正好相反,事实上从平滑与锐化的两种运算算子上也能说明这一点,线性平滑都是基于对图像邻域的加权求和或积分运算,而锐化则通过其逆运算导数(梯度)或有限差分来实现。

  • 2
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV(开源计算机视觉库)是一种广泛应用的计算机视觉和图像处理库。在OpenCV算法面试中,面试官可能会问及以下几个方面的问题: 1. OpenCV库的基本概念和特点:应聘者需要明确说明OpenCV是一个开源库,具有跨平台性、包含众多算法模块、支持多种编程语言等特点。 2. 图像处理基础知识:应聘者需要了解图像处理的基础知识,如图像的表示、颜色空间转换、滤波等内容,并能够解释图像处理算法在OpenCV中如何实现。 3. 特征提取与描述:面试官可能会询问关于特征提取与描述算法的问题,如SIFT、SURF、ORB等算法的原理和应用场景,以及在OpenCV中如何使用这些算法进行特征匹配。 4. 物体检测与识别:面试官可能会问及物体检测与识别的相关算法,如Haar分类器、HOG+SVM等算法,应聘者需要知道这些算法的基本原理和使用方法。 5. 目标跟踪和运动估计:应聘者需要了解目标跟踪和运动估计的常见算法,如KCF、Meanshift等,并能够解释这些算法的原理与应用。 6. 图像分割:面试官可能会问关于图像分割的问题,如常见的分割算法有哪些,如何使用这些算法实现图像分割等。 总之,OpenCV算法面试需要应聘者具备扎实的图像处理和计算机视觉基础知识,并能够熟练运用OpenCV库中的各种算法解决实际问题。最好能够结合具体的项目经验进行回答,展示自己的实际操作能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值