6月7日-6月8日,TP-LINK提前批(图像算法岗)面试题6道

129 阅读7分钟

#这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战

1.adaboost和随机森林有什么区别

  • 相同点:
  1. 二者都是bootsrap自助法选取样本。
  2. 二者都是要训练很多课决策树。
  • 不同点:
  1. Adaboost后面树的训练,其在变量抽样选取的时候,对于上一颗树分错的样本,抽中的概率会加大。
  2. 随机森林在训练每一棵树的时候,随机挑选了部分变量作为拆分变量,而不是所有的变量都去作为拆分变量。
  3. 预测新数据时,adaboost中所有的树加权投票来决定因变量的预测值,每棵树的权重和错误率有关;随机森林按照所有树中少数服从多数树的分类值来决定因变量的预测值。

AI领域更新更全面试题>>>www.julyedu.com/questions/w…

2.LBP特征和SIFT的特征的意义

  • SIFT:Scale-Invariant Feature Taransform 尺度不变特征变换

SIFT算法分解为如下四步:

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

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

  3. 方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。旋转不变性,利用梯度的方法求取局部结构的稳定性。

  4. 关键点描述(128维):在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。描述子是关键点领域高斯图像梯度统计结果的一种表示,通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量。

  • LBP:Local Binary Pattern 局部二值模式

对灰度图像进行二值化,经典LBP算法窗口是3*3的正方形窗口,以窗口中心像素为阈值,相邻8领域像素灰度和中心像素值比较,若大于这标1或者则标0,则中心点可以由8位二进制来表示,共有2^8 = 256种LBP值,中心像素的LBP值反映了该像素周围区域的纹理信息。

由于LBP无尺度和旋转不变性,后续有研究针对这两点进行改进。如圆形LBP算子达到旋转不变性的要求。

6.8 二面(线上,视频面试)

3.颜色校正、白平衡的过程

  • 此处举例Local Color Correction 局部颜色较正算法的步骤:
      • 根据输入图像计算出掩膜图像;
      • 结合输入图像和掩模图像计算出最终结果

掩膜图像一般根据彩色图像各个通道的图像灰度值获得。假设RGB图像各个通道的像素灰度值为R,G,B,则掩膜图像可以表示为I = (R + G + B) / 3I=(R+G+B)/3,之后对掩膜图像进行高斯滤波:

高斯滤波时,选取较大值进行滤波,以保证对比度不会沿着边缘方向过度减小。上述的输出结果表明:图像哪部分需要提亮,哪部分需要减暗。最后输出图像为:

, 如果掩膜图像大于128,将得到一个大于1的指数,并对图像该点的亮度移植,反之增加亮度。如果等于128,则不改变该像素点亮度。

代码样例:

#include <iostream>
#include <opencv2/opencv.hpp>


using namespace cv;
using namespace std;


Mat LCC(const Mat& src)
{
    int rows = src.rows;
    int cols = src.cols;
    int** I = new int* [rows];
    for (int i = 0; i < rows; i++) {
        I[i] = new int[cols];
    }
    int** inv_I;
    inv_I = new int* [rows];
    for (int i = 0; i < rows; i++) {
        inv_I[i] = new int[cols];
    }
    # 掩膜
    Mat Mast(rows, cols, CV_8UC1);
    for (int i = 0; i < rows; i++) {
        uchar* data = Mast.ptr<uchar>(i);//???
        for (int j = 0; j < cols; j++) {
            //获取图像的掩膜
            I[i][j] = (src.at<Vec3b>(i, j)[0] + src.at<Vec3b>(i, j)[1] + src.at<Vec3b>(i, j)[2]) / 3.0;
            inv_I[i][j] = 255;
            *data = inv_I[i][j] - I[i][j];
            data++;
        }
    }
    //高斯滤波
    GaussianBlur(Mast, Mast, Size(41, 41), BORDER_DEFAULT);


    Mat dst(rows, cols, CV_8UC3);
    for (int i = 0; i < rows; i++) {
        uchar* data = Mast.ptr<uchar>(i);
        for (int j = 0; j < cols; j++) {
            for (int k = 0; k < 3; k++) {
                float Exp = pow(2, (128 - data[j]) / 128.0);
                //输出结果
                int value = int(255 * pow(src.at<Vec3b>(i, j)[k] / 255.0, Exp));
                dst.at<Vec3b>(i, j)[k] = value;
            }
        }
    }
    return dst;
}


int main()
{
    Mat img, result;
    img = imread("july.jpg", IMREAD_COLOR);


    namedWindow("ResultImg", WINDOW_AUTOSIZE);
    namedWindow("OriginImg", WINDOW_AUTOSIZE);


    result = LCC(img);
    if (result.empty())
    {
        cout << "Error! THE IMAGE IS EMPTY.." << endl;
        return -1;
    }
    else
    {
        imshow("OriginImg", img);
        imshow("ResultImg", result);
        imwrite("july_lcc.jpg", result);
    }
    waitKey(0);
    return

原始图像

颜色校正之后的图像

注意左图中较亮(6周年附近)和较暗(右下角盆栽)区域和右图中对应区域的区别;

  • 白平衡:

人的视觉系统具有颜色恒常性,能从变化的光照环境和成像条件下获取物体表面颜色的不变特性,但成像设备不具有这样的调节功能,不同的光照环境会导致采集的图像颜色与真实颜色存在一定程度的偏差,需要选择合适的颜色平衡(校正)算法,消除光照环境对颜色显现的影响。灰度世界算法是最常用平衡算法。

灰度世界算法以灰度世界假设为基础,该假设认为:对于一幅有着大量色彩变化的图像,RGB三个分量的平均值趋于同一灰度值Gray。 从物理意义上讲,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为“灰色”。 颜色平衡算法将这一假设强制应用于待处理图像,可以从图像中消除环境光的影响,获得原始场景图像。

算法执行步骤:

  • 一般有两种方法确定Gray: 要么取固定值(如最亮灰度值的一半,八位显示的话即为128),要么通过计算图像,RGB三通道的均值

,取

  • 计算RGB三通道的增益系数:

  • 根据Von Kries对角模型,对于图像中的每个像素C,调整其RGB分量:

可以colorcorrect库实现:

from PIL import Image 
import colorcorrect.algorithm as cca
from colorcorrect.util import from_pil, to_pil


img = Image.open("street.png")
to_pil(cca.grey_world(from_pil(img))).show()

原图:

使用灰度世界算法进行白平衡变换后:

4.HOG特征的意义

Hog: Histograms of oriented gradients

HOG通过计算局部图像提取的方向信息统计值来统计图像的梯度特征,它跟EOH、SIFT及shape contexts有诸多相似之处,但是它有明显的不同之处:HOG特征描述子是在一个网格密集、大小统一的单元上进行计算,而且为了提高性能,它还采用了局部对比度归一化思想。它的出现,使得目标检测技术在静态图像的人物检测、车辆检测等方向得到大量应用。

在传统目标检测中,HOG可以称得上是经典中的经典,它的HOG+SVM+归一化思想对后面的研究产生深远的影响,HOG的出现,奠定了2005之后的传统目标检测的基调和方向。

5.决策树有哪些种类

常见的决策树算法主要有:

      • ID3、C4.5和CART树;
      • 随机森林、Adaboost、GBDT
      • Xgboost和LightGBM

6.SVM的KKT条件是啥

一般地,一个最优化数学模型能够表示成下列标准形式:

其中,f(x)是需要最小化的函数,h(x)是等式约束,g(x)是不等式约束,p和q分别为等式约束和不等式约束的数量。

同时,得明白以下两点:

  • 凸优化的概念:为一凸集, 为一凸函数。凸优化就是要找出一点 ,使得每一满足 。
  • KKT条件的意义:它是一个非线性规划(Nonlinear Programming)问题能有最优化解法的必要和充分条件

而KKT条件就是指上面最优化数学模型的标准形式中的最小点 x* 必须满足下面的条件:

经过论证,我们这里的问题是满足 KKT 条件的(首先已经满足Slater条件,再者f和gi也都是可微的,即L对w和b都可导),因此现在我们便转化为求解第二个问题。

也就是说,原始问题通过满足KKT条件,已经转化成了对偶问题。而求解这个对偶学习问题,分为3个步骤:首先要让L(w,b,a) 关于 w 和 b 最小化,然后求对

的极大,最后利用SMO算法求解对偶问题中的拉格朗日乘子。