美文网首页
面试准备

面试准备

作者: 影醉阏轩窗 | 来源:发表于2018-09-28 23:07 被阅读0次

    C++面试总结

    1. New、Delete和malloc、free的区别?
    • New和Delete自动调用<u>构造函数</u>和<u>析构函数</u>
    • 前者是<u>运算符</u>,后者是<u>函数</u>

    1. New和Delete自动调用构造函数和析构函数
    • Delete调用<u>一次</u>析构函数,Delete []调用<u>多次</u>析构函数
    • Delete针对new,Delete []针对New []

    1. 面向对象的三个特征?
    • <u>封装</u>:将数据和算法捆绑成一个整体,这个整体就是对象,描述对象的数据被封装在其内部。
    • <u>继承</u>:指一种事物保留了另一种事物的全部特征,并且具有自身的独有特征。
    • <u>多态</u>:当多种事物继承自一种事物时,同一种操作在它们之间表现出不同的行为。

    1. 对象和类之间的关系?
    • 对象:一个实际概念(实物)
    • 类:一个抽象概念(类型或属性)
    • 类的实例化生成对象,对象的抽象化生成类
    • 一个对象可以包含多个类,一个类只能对应一个实例对象

    1. 动态空间申请使用New和不使用
    • New:

      创建需要指针接收,一处初始化,多处使用

      销毁需要使用Delete

      创建在<u>堆空间</u>,使用广泛可作为参数和返回值

      频繁调用不适合New,一边作为全局变量使用

    • 不使用New:

      栈空间申请内存

      频繁调用使用


    1. static的作用
    • 在函数内被定义之后数值保持不变
    • 模块内函数外,表示本地全局
    • 修饰函数,智能在本地调用,并且使用extern也不能跨文件调用
    • 类内定义static,只能在类外初始化,不能在类内初始化
    • 不能使用this调用,因为属于当前文件而不是属于当前类

    大华图像算法面试总结

    1. opencv各种滤波?
    • 限幅滤波:

    设置一个Thred,设本次采样值为V1,上一次采样为V

    V1 = abs(V1-V)>Thred ? V:V1

    差值大于阈值就等于上一次采样,否则等于自身

    • 均值滤波:

    平均值代替当前值

    void meanFilter (unsigned char* corrupted, unsigned char* smooth, int width, int height)  
    {            
        memcpy ( smooth, corrupted, width*height*sizeof(unsigned char) );            
        for (int j=1;j<height-1;j++)      
        {          
            for (int i=1;i<width-1;i++)          
            {              
                smooth [ j*width+i ] = (    corrupted [ (j-1)*width+(i-1) ] + 
                                        corrupted [ (j-1)*width+i] + 
                corrupted [ (j-1)*width+(i+1) ] +                                          
                corrupted [ j*width+(i-1) ]     + corrupted [ j*width+i]     + 
                corrupted [ j*width+(i+1) ] +                                          
                corrupted [ (j+1)*width+(i-1) ] + corrupted [ (j+1)*width+i] + 
                corrupted [ (j+1)*width+(i+1) ] ) / 9;          
            }      
        }  
    }  
    
    • 中值滤波

    中位数的值代替当前值

    void medianFilter (unsigned char* corrupted, unsigned char* smooth, int width, int height)
    {   
        memcpy ( smooth, corrupted, width*height*sizeof(unsigned char) );
        for (int j=1;j<height-1;j++)
        {
            for (int i=1;i<width-1;i++)
            {
                char num[9];
                int k = 0;
                unsigned char window[9];
                for (int jj = j - 1; jj < j + 2; ++jj)
                    for (int ii = i - 1; ii < i + 2; ++ii)
                        num[i+j]=corrupted[j+i*width];
                sort(num,num+9);//sort函数可以自己重写
                smooth[ j*width+i ] = num[4];
            }
        }
    }
    
    • 混合中值滤波

    取上下左右拐角点+当前值得到中值V1

    取上下左右+中间值得到中值V2

    当前值V

    V、V1、V2取中值

    • 高斯滤波

    取高斯模板去滤波

    • 卡尔曼滤波

    核心是使用正太分布,利用估计的正太分布和确定的正态分布去计算当前的正太分布

    • 双边滤波

    值域核函数+空间域核函数

    [图片上传失败...(image-af0ebc-1538147338568)]

    [图片上传失败...(image-ceb5e8-1538147338568)]

    [图片上传失败...(image-ce4b77-1538147338568)]

    1.SVM推导实现

    2.项目改进和遗憾?

    3.编写高通滤波器和直方图均衡化?

    4.自己论文或者项目使用的算法细节

    • Gabor滤波器

    就是sin()函数和傅里叶函数的乘积
    波长:3, 6
    方向:0, 45,90 , 135
    空间纵横比:0.5
    带宽:高斯方差:2pi

    • 灰度共生矩阵

    灰度级量化0-15
    四个特征:能量、熵、逆方差、相关性
    特征可视化:使用5X5,步长为1的掩膜,计算5X5的特征

    5.坏点检测算法

    类型:亮点、暗点与色点三类
    特点:比周围点亮很多的坏点 、比周围点暗很多的坏点、没有提供一个正确的像素值,但是并没有比周围点特别亮或者特别暗的像素
    坏点和噪点的区别:噪点不确定性,坏点是固定的,颜色不确定
    检测坏点:avg=sum(*),dif=(次max点 - 次min点),范围avg±dif,出了这个范围即定义为坏点
    连续多帧判断,如果50%以上都出现这样的情况,就判断为坏点,否则为噪点,使用中值滤波去除。

    1.相机防抖

    • 运动估计,找出最优运动向量

    (a) 灰度投影法

    (b) 块匹配法

    (c) 位平面匹配法

    (d) 边缘匹配法

    (e) 特征点匹配法

    主要思想是这样的:在第一帧图像中选择一块特征明显的纹理Patch,然后在随后的每一帧图像中找到与该纹理Patch最相似的Patch,然后将找到的Patch“钉”到第一帧Patch的所在位置上。

    • 运动补偿,根据运动向量补偿当前帧,去除抖动。

    利用陀螺仪找到核函数,然后进行透视变换

    1.图像降噪

    1. 图像增强
    1. 图像融合匹配
    1. 自动曝光
    1. 自动白平衡
    1. 自动对焦

    15.常用插值方法

    • 最近插值:
    image
    • 双线性插值:

      假设已知点Q11=(x1,y1),Q12=(x1,y2),Q21=(x2,y1),Q22=(x2,y2)Q11=(x1,y1),Q12=(x1,y2),Q21=(x2,y1),Q22=(x2,y2),并且假设图像中每个像素点服从一个未知函数ff,使得像素值R11=f(Q11)R11=f(Q11),以此类推。那么如何求出点P=(x,y)P=(x,y)的像素值RPRP呢?首先做两次线性插值,分别求出点R1=(x,y1)R1=(x,y1)和点R2=(x,y2)R2=(x,y2)的像素值,然后再用这两个点再做一次线性插值,就可以求出点P=(x,y)P=(x,y)的像素值了。

      其中opencv进行了代码优化

      • 取消float为int
      • 原图像和目标图像对齐
    image
    • 立方卷积插值:

      权值计算方法使用三次多项式4X4个点

      img

    16.常用边缘检测算子

    1.设计一个OCR引擎

    • 版面分析:
    • 预处理:
    • 行列分割:
    • 字符识别:
    • 矫正识别结果:

    1.数据预处理

    • 去均值:
    • 归一化:
    • PCA降维度、白化(维度归一化):

    1.图像表示几种方式

    • 真彩色:RGB表示
    • 假彩色:不同波段的色彩表示(YUV)
    • 伪彩色:灰度到RGB的映射

    20.最大熵分割

    • 设定一个阈值T,分割背景A和目标B
    • 分别计算A和B的熵
    • MAX(H(A)+H(B))
    • 其中H = -P(i)*logP(i) \ \ \ i=i,2...T

    21.OTSU阈值分割

    • 设定一个阈值T,分割背景A和目标B
    • 计算方差\delta^{2} = w_{a} * (\mu_{a}-\mu)^{2} + w_{a} * (\mu_{a}-\mu)^{2}
    • \mu_{a}: \mbox{背景A的均值} , \mu_{b}: \mbox{目标B的均值} , \mu_{}: \mbox{全部图像的均值}
    • w_{a}:\mbox{背景A的概率},以此类推。。。

    22.均值迭代

    • 设定阈值T,背景A和目标B
    • 计算A、B均值:\mu_{a} 、 \mu_{b}
    • 更新阈值T_{1} = \frac{\mu_{a}+\mu_{b}}{2}
    • abs(T{}-T_{1})<\psi

    3.区域生长

    • 给定一个种子点
    • 使用Vector数据结构
    • 使用八领域进行判断标准
    • 不断迭代vector.push()和vector.pop()

    4.图像去雾

    5.特征检测

    • SIFT检测

    差分高斯金字塔(高斯模糊->LOG->DOG)
    空间极值点检测(多尺度检测->泰勒二阶展开->Hessian矩阵)
    特征描述子(确定半径->角度划分为八个方向0-45-90-135...->描述区域设置为4X4->最终描述为4X4X8)

    • (a)在高斯模糊的时候可以采用分离高斯卷积,这样可以更好的保留边缘细节。
    • SURF检测

    构建高斯金字塔(图像大小不会变化,相同层核系数不同,不同层核大小不同)
    特征点检测(二阶高斯使用盒滤波器代替计算Hessian矩阵)
    特征描述子(利用Harr小波特征计算描述子,利用积分图计算Harr小波,4X4X4)
    特征点匹配(不仅计算欧氏距离,还增加了一个Hessian矩阵的迹,如果方向相反则一定不匹配)

    • Harris角点

    利用滑动窗口
    使用一阶泰勒公式展开,然后计算矩阵的特征值

    6.畸变矫正模型

    利用相机标定取纠正图像

    7.相机标定

    图像坐标系到像素坐标系(仿射变换)
    [图片上传失败...(image-d6f652-1538214340234)]
    相机坐标系到图像坐标系(透视变换)
    [图片上传失败...(image-4b7efb-1538214340234)]
    世界坐标系到相机坐标系(刚体变换)
    [图片上传失败...(image-d90adc-1538214340234)]
    畸变:径向畸变、切向畸变
    [图片上传失败...(image-999faf-1538214340234)]
    [图片上传失败...(image-dd9b20-1538214340234)]

    相关文章

      网友评论

          本文标题:面试准备

          本文链接:https://www.haomeiwen.com/subject/gsbmoftx.html