面試準備

C++面試總結

  1. New、Delete和malloc、free的區(qū)別?
  • New和Delete自動調用<u>構造函數(shù)</u>和<u>析構函數(shù)</u>
  • 前者是<u>運算符</u>,后者是<u>函數(shù)</u>

  1. New和Delete自動調用構造函數(shù)和析構函數(shù)
  • Delete調用<u>一次</u>析構函數(shù),Delete []調用<u>多次</u>析構函數(shù)
  • Delete針對new,Delete []針對New []

  1. 面向對象的三個特征?
  • <u>封裝</u>:將數(shù)據(jù)和算法捆綁成一個整體,這個整體就是對象,描述對象的數(shù)據(jù)被封裝在其內部。
  • <u>繼承</u>:指一種事物保留了另一種事物的全部特征,并且具有自身的獨有特征。
  • <u>多態(tài)</u>:當多種事物繼承自一種事物時,同一種操作在它們之間表現(xiàn)出不同的行為。

  1. 對象和類之間的關系?
  • 對象:一個實際概念(實物)
  • 類:一個抽象概念(類型或屬性)
  • 類的實例化生成對象,對象的抽象化生成類
  • 一個對象可以包含多個類,一個類只能對應一個實例對象

  1. 動態(tài)空間申請使用New和不使用
  • New:

    創(chuàng)建需要指針接收,一處初始化,多處使用

    銷毀需要使用Delete

    創(chuàng)建在<u>堆空間</u>,使用廣泛可作為參數(shù)和返回值

    頻繁調用不適合New,一邊作為全局變量使用

  • 不使用New:

    ??臻g申請內存

    頻繁調用使用


  1. static的作用
  • 在函數(shù)內被定義之后數(shù)值保持不變
  • 模塊內函數(shù)外,表示本地全局
  • 修飾函數(shù),智能在本地調用,并且使用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;          
        }      
    }  
}  
  • 中值濾波

中位數(shù)的值代替當前值

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函數(shù)可以自己重寫
            smooth[ j*width+i ] = num[4];
        }
    }
}
  • 混合中值濾波

取上下左右拐角點+當前值得到中值V1

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

當前值V

V、V1、V2取中值

  • 高斯濾波

取高斯模板去濾波

  • 卡爾曼濾波

核心是使用正太分布,利用估計的正太分布和確定的正態(tài)分布去計算當前的正太分布

  • 雙邊濾波

值域核函數(shù)+空間域核函數(shù)

[圖片上傳失敗...(image-af0ebc-1538147338568)]

[圖片上傳失敗...(image-ceb5e8-1538147338568)]

[圖片上傳失敗...(image-ce4b77-1538147338568)]

1.SVM推導實現(xiàn)

2.項目改進和遺憾?

3.編寫高通濾波器和直方圖均衡化?

4.自己論文或者項目使用的算法細節(jié)

  • Gabor濾波器

就是sin()函數(shù)和傅里葉函數(shù)的乘積
波長:3, 6
方向:0, 45,90 , 135
空間縱橫比:0.5
帶寬:高斯方差:2pi

  • 灰度共生矩陣

灰度級量化0-15
四個特征:能量、熵、逆方差、相關性
特征可視化:使用5X5,步長為1的掩膜,計算5X5的特征

5.壞點檢測算法

類型:亮點、暗點與色點三類
特點:比周圍點亮很多的壞點 、比周圍點暗很多的壞點、沒有提供一個正確的像素值,但是并沒有比周圍點特別亮或者特別暗的像素
壞點和噪點的區(qū)別:噪點不確定性,壞點是固定的,顏色不確定
檢測壞點:avg=sum(*),dif=(次max點 - 次min點),范圍avg±dif,出了這個范圍即定義為壞點
連續(xù)多幀判斷,如果50%以上都出現(xiàn)這樣的情況,就判斷為壞點,否則為噪點,使用中值濾波去除。

1.相機防抖

  • 運動估計,找出最優(yōu)運動向量

(a) 灰度投影法

(b) 塊匹配法

(c) 位平面匹配法

(d) 邊緣匹配法

(e) 特征點匹配法

主要思想是這樣的:在第一幀圖像中選擇一塊特征明顯的紋理Patch,然后在隨后的每一幀圖像中找到與該紋理Patch最相似的Patch,然后將找到的Patch“釘”到第一幀Patch的所在位置上。

  • 運動補償,根據(jù)運動向量補償當前幀,去除抖動。

利用陀螺儀找到核函數(shù),然后進行透視變換

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),并且假設圖像中每個像素點服從一個未知函數(shù)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進行了代碼優(yōu)化

    • 取消float為int
    • 原圖像和目標圖像對齊
image
  • 立方卷積插值:

    權值計算方法使用三次多項式4X4個點

    img

16.常用邊緣檢測算子

1.設計一個OCR引擎

  • 版面分析:
  • 預處理:
  • 行列分割:
  • 字符識別:
  • 矯正識別結果:

1.數(shù)據(jù)預處理

  • 去均值:
  • 歸一化:
  • 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_: \mbox{目標B的均值} , \mu_{}: \mbox{全部圖像的均值}
  • w_{a}:\mbox{背景A的概率},以此類推。。。

22.均值迭代

  • 設定閾值T,背景A和目標B
  • 計算A、B均值:\mu_{a} 、 \mu_
  • 更新閾值T_{1} = \frac{\mu_{a}+\mu_}{2}
  • abs(T{}-T_{1})<\psi

3.區(qū)域生長

  • 給定一個種子點
  • 使用Vector數(shù)據(jù)結構
  • 使用八領域進行判斷標準
  • 不斷迭代vector.push()和vector.pop()

4.圖像去霧

5.特征檢測

  • SIFT檢測

差分高斯金字塔(高斯模糊->LOG->DOG)
空間極值點檢測(多尺度檢測->泰勒二階展開->Hessian矩陣)
特征描述子(確定半徑->角度劃分為八個方向0-45-90-135...->描述區(qū)域設置為4X4->最終描述為4X4X8)

  • (a)在高斯模糊的時候可以采用分離高斯卷積,這樣可以更好的保留邊緣細節(jié)。
  • SURF檢測

構建高斯金字塔(圖像大小不會變化,相同層核系數(shù)不同,不同層核大小不同)
特征點檢測(二階高斯使用盒濾波器代替計算Hessian矩陣)
特征描述子(利用Harr小波特征計算描述子,利用積分圖計算Harr小波,4X4X4)
特征點匹配(不僅計算歐氏距離,還增加了一個Hessian矩陣的跡,如果方向相反則一定不匹配)

  • Harris角點

利用滑動窗口
使用一階泰勒公式展開,然后計算矩陣的特征值

6.畸變矯正模型

利用相機標定取糾正圖像

7.相機標定

圖像坐標系到像素坐標系(仿射變換)
[圖片上傳失敗...(image-d6f652-1538214340234)]
相機坐標系到圖像坐標系(透視變換)
[圖片上傳失敗...(image-4b7efb-1538214340234)]
世界坐標系到相機坐標系(剛體變換)
[圖片上傳失敗...(image-d90adc-1538214340234)]
畸變:徑向畸變、切向畸變
[圖片上傳失敗...(image-999faf-1538214340234)]
[圖片上傳失敗...(image-dd9b20-1538214340234)]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容