涼面總結(jié)之TCL圖像工程師面試

TCL宣講會(huì)之后第二天就喊我去面試了,然而前幾天的我還在玩游戲,并沒(méi)有好好準(zhǔn)備,自然是涼了,做過(guò)的項(xiàng)目的技術(shù)細(xì)節(jié)很多都沒(méi)能說(shuō)的上來(lái)。痛定思痛,來(lái)一波公開(kāi)處刑!


全景圖像融合的原理?

因?yàn)镴D上寫(xiě)的是手機(jī)圖像相關(guān)的開(kāi)發(fā)&調(diào)試,數(shù)圖課設(shè)剛好做過(guò)這個(gè),本來(lái)是一個(gè)不錯(cuò)的加分項(xiàng),然而面試的時(shí)候只講到特征點(diǎn)檢測(cè),后面基本口胡 - -!

在OpenCV中,全景圖像融合分為兩步:圖像對(duì)齊和圖像融合,一般流程是:①特征點(diǎn)檢測(cè),目前有比較多的特征點(diǎn)檢測(cè)的方法,比如FAST,ORB,SIFT等,各有優(yōu)劣勢(shì)。在多幅圖像中檢測(cè)特征點(diǎn)及其描述子。②使用這些特征點(diǎn)來(lái)計(jì)算單應(yīng)矩陣并估計(jì)相機(jī)內(nèi)外參數(shù)。單應(yīng)矩陣可以將一個(gè)射影平面映射到另一個(gè)攝影平面上。③使用光束平差法來(lái)精細(xì)化相機(jī)參數(shù)。④使用波形矯正來(lái)消除波形效應(yīng),因?yàn)榕臄z過(guò)程中有可能出現(xiàn)上下抖動(dòng)的情況。⑤根據(jù)單應(yīng)矩陣、內(nèi)外參數(shù)以及波形矯正矩陣來(lái)對(duì)圖像進(jìn)行幾何變換,完成圖像對(duì)齊的過(guò)程。⑥圖像對(duì)齊之后,一般還要對(duì)邊緣進(jìn)行融合過(guò)渡。簡(jiǎn)單的方法是簡(jiǎn)單的加權(quán)過(guò)渡,效果比較好的方法是使用拉普拉斯融合。⑦亮度歸一化(曝光補(bǔ)償),使整體畫(huà)面亮度保持一致。

OpenCV stitcher pipline

OpenCV 單應(yīng)矩陣應(yīng)用:全景圖像融合原理

雙目視覺(jué)機(jī)器人里你用的是張正友標(biāo)定法,請(qǐng)問(wèn)張正友標(biāo)定法的原理?

如果能說(shuō)上一些細(xì)節(jié),那自然是很好,但現(xiàn)場(chǎng)只是籠統(tǒng)地說(shuō)“用數(shù)學(xué)上的辦法”得到畸變參數(shù),噗。。這個(gè)項(xiàng)目是我做的最有代表性的,沒(méi)講清楚就很尷尬了。

相機(jī)標(biāo)定的目標(biāo)是得到相機(jī)的內(nèi)外參數(shù),來(lái)矯正相機(jī)本身的畸變。內(nèi)參數(shù)包括x軸和y軸方向的焦距和光心,外參數(shù)是每個(gè)視圖的旋轉(zhuǎn)矩陣和平移向量。畸變包括切向畸變徑向畸變。通過(guò)計(jì)算內(nèi)外參數(shù),可以估計(jì)到畸變參數(shù),以對(duì)相機(jī)進(jìn)行矯正。

張氏標(biāo)定法一般流程:①獲取多個(gè)不同視角的參照物的圖像,這里一般使用的是標(biāo)準(zhǔn)的棋盤(pán)格。②檢測(cè)棋盤(pán)格上的角點(diǎn),使用這些角點(diǎn)來(lái)計(jì)算每個(gè)視圖的單應(yīng)矩陣,并使用最大似然估計(jì)的優(yōu)化方法來(lái)得到內(nèi)外參數(shù)。③使用內(nèi)外參數(shù)來(lái)估計(jì)畸變參數(shù),包括3個(gè)徑向畸變參數(shù)和2個(gè)切向畸變的參數(shù)。④根據(jù)畸變參數(shù),重映射得到矯正后的圖像。OpenCV中的標(biāo)定函數(shù)中會(huì)通過(guò)多次迭代來(lái)優(yōu)化標(biāo)定效果。

《Learning OpenCV3》ch18:相機(jī)模型與標(biāo)定

立體視覺(jué)的實(shí)現(xiàn)原理?

立體視覺(jué)的目標(biāo)在于使用兩個(gè)或多個(gè)攝像頭同時(shí)獲取視圖,來(lái)得到物理世界中的三維坐標(biāo)點(diǎn)。在雙目視覺(jué)中,得到三維坐標(biāo)點(diǎn)的方法是使用三角測(cè)量原理,它假設(shè)雙目攝像頭完全平行并對(duì)齊且沒(méi)有畸變,則可以使用相似三角形的原理來(lái)得到物理坐標(biāo)點(diǎn)。

但實(shí)際情況中,需要進(jìn)行雙目標(biāo)定來(lái)計(jì)算內(nèi)外參數(shù)并矯正,方法跟一般標(biāo)定類似(角點(diǎn)檢測(cè),計(jì)算單應(yīng)矩陣等)實(shí)現(xiàn)數(shù)學(xué)上的正向?qū)R。此外,要使用三角測(cè)量原理需要要得到像素點(diǎn)的視差,得到視差的方法是進(jìn)行立體匹配,在OpenCV中匹配算法包括BM和SGBM等。最后,根據(jù)兩個(gè)攝像機(jī)的內(nèi)外參數(shù)來(lái)構(gòu)造重投影矩陣,重投影矩陣可以根據(jù)視差將視圖上的二維點(diǎn)映射到三維點(diǎn)上,實(shí)現(xiàn)立體視覺(jué)。

《Learning OpenCV3》ch19:雙目標(biāo)定與立體匹配

霍夫變換原理?

霍夫變換是一種在圖像中檢測(cè)特定形狀的一種方法,它首先需要進(jìn)行邊緣檢測(cè),并通過(guò)在參數(shù)空間中進(jìn)行投票累計(jì)(并求取局部最大值)的方式來(lái)進(jìn)行形狀檢測(cè)。比如直線有截距和斜率兩個(gè)參數(shù),圓有圓心坐標(biāo)和半徑共三個(gè)參數(shù),霍夫變換即是在這些參數(shù)的基礎(chǔ)上進(jìn)行形狀檢測(cè)的。在OpenCV中,霍夫直線變換會(huì)將直線方程轉(zhuǎn)換為極坐標(biāo)的形式,霍夫圓變換會(huì)通過(guò)霍夫梯度法的方式得到候選圓心,來(lái)提高算法的運(yùn)行速度。

高斯濾波原理?應(yīng)用場(chǎng)合?

高斯濾波基本操作,但可以稍微擴(kuò)展一下,尤其是可以扯一扯傅里葉變換和頻率域?yàn)V波去噪。

圖像噪聲大部分屬于高斯噪聲,高斯濾波可以有比較好的去噪效果,對(duì)其他種類的噪聲也有一定的抑制效果。類似的濾波有中值濾波,一般用于處理椒鹽噪聲。如果要在去噪時(shí)盡量保持邊緣信息,可以使用雙邊濾波,這種濾波方法考慮了鄰域信息。以上提到的濾波都是在空間域中進(jìn)行的,圖像去噪也可以在頻率域中進(jìn)行。對(duì)圖像進(jìn)行傅里葉變換之后再使用帶通濾波器,可以抑制一些出現(xiàn)在特定頻段上的噪聲,比如莫爾波紋。

OpenCV 頻率域處理:離散傅里葉變換、頻率域?yàn)V波
OpenCV 圖像濾波:雙邊濾波算法

項(xiàng)目里攝像頭的驅(qū)動(dòng)是使用什么協(xié)議?IIC通信協(xié)議的組成?

沒(méi)碰單片雞好多年,面的圖像居然問(wèn)起嵌入式,給大佬低頭 - -!

IIC協(xié)議是一種用于微控制器和外圍設(shè)備進(jìn)行通信和控制的協(xié)議。它由數(shù)據(jù)線SDA和時(shí)鐘SCL構(gòu)成的串行總線組成,能夠進(jìn)行雙向傳送,是半雙工通信方式。

HALCON項(xiàng)目里的分割閾值你是怎樣選取的?(otsu閾值分割原理?)

我當(dāng)時(shí)說(shuō)是在直方圖里隨便選個(gè)閾值就行了,不過(guò)其實(shí)不用那么耿直,可以扯一扯otsu。

Otsu是一種自動(dòng)選取閾值進(jìn)行分割的方法。它首先計(jì)算圖像歸一化后的直方圖,并選取一個(gè)閾值進(jìn)行類間方差的計(jì)算。通過(guò)窮舉的方法計(jì)算所有閾值取值的類間方差,類間方差最大時(shí)所選取的閾值就是otsu認(rèn)為的最佳閾值。

簡(jiǎn)歷上你寫(xiě)著你有C語(yǔ)言和C++各個(gè)平臺(tái)的開(kāi)發(fā)經(jīng)歷,請(qǐng)問(wèn)單片雞、arduino、PC這些環(huán)境下C/C++的編譯器有哪些?

萬(wàn)萬(wàn)沒(méi)想到可以這樣問(wèn)的。。直接撓撓頭說(shuō)不記得了。

對(duì)于帶操作系統(tǒng)的平臺(tái),有適用于它的通用C/C++編譯器,可以為各種處理器編譯。Windows系統(tǒng)下一般使用的是微軟的MSVC,Unix-Like(Linux)一般使用的是GCC(gcc和g++)。對(duì)于不帶操作系統(tǒng)的處理器或者控制器(裸機(jī)),有各自的專用編譯器,比如8051單片雞一般使用的是Keil公司的Keil CX51,arduino的編譯器也叫arduino,arm平臺(tái)(包括Cortex-M、Cortex-R、Arm7等內(nèi)核的處理器和控制器)使用的是armcc

一個(gè)寫(xiě)好的程序怎么給另一個(gè)程序調(diào)用?打包方法?

那自然是打包成DLL(動(dòng)態(tài)鏈接庫(kù))或者LIB(靜態(tài)鏈接庫(kù))了。面試官問(wèn)我怎么做,我想當(dāng)然地說(shuō)用VS工具就行了。想想他應(yīng)該是想知道下我對(duì)Linux環(huán)境是否熟悉吧,畢竟Linux莫得天下第一IDE。

Windows環(huán)境下可以使用VS工具進(jìn)行打包,比較方便。Linux環(huán)境下我一般是使用cmake編譯工具,在CMakeList中指定編譯成動(dòng)態(tài)鏈接庫(kù)(后綴.so)或者靜態(tài)鏈接庫(kù)(后綴.a)的形式,就可以進(jìn)行打包;也可以用gcc/g++直接敲命令的方式完成。

反思

去了好幾家大公司的面試和宣講會(huì),人均華工碩士(哪來(lái)那么多的華工碩士,沃日)。當(dāng)然拋開(kāi)學(xué)歷來(lái)說(shuō),競(jìng)爭(zhēng)者們的確要比我厲害許多,自愧不如,尤其今年競(jìng)爭(zhēng)更加激烈了。精神領(lǐng)袖毛主席說(shuō)過(guò):拋棄幻想,準(zhǔn)備斗爭(zhēng)。再玩游戲怕是要回家繼承家產(chǎn)咯~~


愿乘風(fēng)破浪會(huì)有時(shí)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容