天天看點

線掃雷射算法原理「建議收藏」

大家好,又見面了,我是你們的朋友全棧君。

一:線掃雷射算法原理

雷射器發出的雷射束經準直聚焦後垂直入射到物體表面上,表面的散射光由接收透鏡成像于探測器的陣列上。光敏面于接收透鏡的光軸垂直。如圖:

當被測物體表面移動x,反應到光敏面上像點位移為x’。a為接收透鏡到物體的距離(物距),b為接收後主面到成像面中心的距離(一般取焦距f),θ為雷射束光軸與接收透鏡之間的夾角。D為雷射光束軸到透鏡中心的距離。接收透鏡的焦距為f,其餘的參數如下圖:

線掃雷射算法原理「建議收藏」

在△ABC中,由正弦定理的:

線掃雷射算法原理「建議收藏」

将上式整理得:

線掃雷射算法原理「建議收藏」

在直角三角形△CDE (∠CDE=90°)中,

線掃雷射算法原理「建議收藏」

将其帶入到上式,得:

線掃雷射算法原理「建議收藏」

(遠離透鏡)。

上式為遠離透鏡的公式,靠近基準面的公式剛好相反:

線掃雷射算法原理「建議收藏」

(靠近透鏡)。

二:參數計算和選取

通過上面的算法推導,我們可以看出在整個公式中,我們需要得到的參數有兩個,a(接收透鏡到物體的距離(物距))和θ(雷射束光軸與接收透鏡之間的夾角)。

2.1參數的計算

(1)參數計算的原理

因為公式中有兩個未知的參數a和θ,那麼想要求得這兩個未知參數,我們可以通過得到兩組已知的(x,x’)來列出兩個二進制一次方程組來求解。

假設兩組已知的參數為(X1,X1’)(X2,X2’),通過推導過程的公式如下(以靠近透鏡為例):

線掃雷射算法原理「建議收藏」

通過計算得出:

線掃雷射算法原理「建議收藏」

将求出的θ帶去上式可以得出a.

(2)參數計算結果

在計算參數的樣本選取中,為了盡可能的提高精度,我們在靠近基準面的樣本中選取的計算組合分别為(1mm,2mm),(1mm,3mm),(1mm,4mm),(1mm,5mm),(1mm,6mm),(1mm,7mm),(1mm,8mm),(1mm,9mm),(1mm,10mm),總共9組資料。那麼我們在一次采樣中可以得出9 組資料。

2.2參數的選取

在整個的實驗過程中,後期計算參數a和θ時,我們總共采樣了五次資料,每次資料得到的9組參數,通過45組資料來計算整個樣本的位移。觀察誤內插補點得大小,我們總共選取了三組參數,綜合比對發現當比值a/(f*sinθ)為31.5~31.7且a>200時,計算出的誤差偏小且在測量的範圍内保持一定趨勢。(這為我們後面的非線性拟合的誤差補償提供了基礎)

三:相機的标定

3.1單目相機标定的目的

擷取錄影機的内外參數矩陣,同時也會獲得每一幅标定圖像的選擇和平移矩陣,内參數矩陣和畸變向量可以對之後相機拍攝的圖像進行矯正,得到畸變相對很小的圖像。

3.2相機标定的輸入和輸出

相機标定的輸入為22*22機關長度為1mm/格的棋盤格圖像。總共12張。

相機标定的輸出為:内參數矩陣(fx,fy,Cx, Cy)和畸變向量(k1,k2,p1,p2,p3)

ps(注意,這裡有兩個不同的焦距fx,fy。因為單個像素點在低價成像儀上是矩形而不是正方形。實際上焦距fx=f*Sx. f為實際的實體焦距長度,Sx為x方向的像元尺寸。同理fy=f*Sy)

3.3用到的工具

硬體:巴士勒相機,攝像頭(f=25mm)、棋盤格标定闆

軟體:VS+OPENCV

3.4标定的結果

線掃雷射算法原理「建議收藏」

四:樣本采集

樣本采集我們有兩種方式,第一種方式為用标準塊來采集。第二種方式是通過千分尺來采集。我們采用第二種方式進行采集樣本。采集的過程為以整個圖像的中心為起點(作為基準面),每隔0.1mm取一次圖像,取到圖像的邊界。通過上述取樣本,我們得出位移的取值範圍為-30.0mm到+30.0mm。

五:計算結果

通過上述的參數計算,相機标定以及樣本采集之後,我們開始計算結果,在選曲的三組參數,來計算結果得到的誤差,在附件1中。

六:誤差補償

在得出誤差之後,我們發現誤差的變化是具有趨勢的。随着位移的增大誤差是逐漸增大的。從計算結果偏小逐漸到計算結果偏大。在這裡我們取得誤差補償算法為基于最小二乘法的非線性拟合。拟合的方程如下:

Y=a0+a1x+a2x^2+a3x^3

方程中x代表的是像素位移,Y代表的是誤差。通過拟合之後的誤差方程和整個算法進行融合及拟合後的求取誤差為

位移=原算法-誤差方程

最後通過誤差補償的結果得到的誤差,在附件2中。

七:實驗中遇到的問題

(1)算法上的改進

第一:在位移算法上遇到的問題剛開始在推算的過程中,忽略了一個多項式導緻後面在計算的過程中誤差偏大,後面采用了三角函數的算法,整個精度的提升很明顯。

第二:在參數計算的算法推導過程中,出現了一個錯誤靠近基準面和遠離基準面的算法是不一樣的。這裡出現了一個推導錯誤。後來重新推導之後改正了過來。

第三:在參數的選取上,剛開始的了解是在參數計算之後參數如果越接近實際的a和θ,計算出來的結果越真實。後來經過試驗發現這樣的選取準則是不正确的。而且不同組的樣本計算出的a和θ是不一樣的。最後通過分析得出,雖然計算出的a和θ是不一樣的,但是a/(f*sinθ)的比值幾乎是一緻的。後面選取參數是選擇誤差小的。

第四:後面在觀察誤差的時候發現在0.1mm的位移時,同一組參數不同樣本的計算結果都是一樣偏大的。在實際的測量過程中我們觀測到0.1mm的位移,通常對應的是0.6左右個像素。通過觀察程式發現了把像素float型轉換成int型導緻這個誤差結果。後面改過來之後,誤差明顯變小了。

(2)結構上的改變

在中期的試驗中,我們改進鏡頭和相機的結構,來改善景深,但是後來我們通過試驗發現原有的結構景深也是足夠用的,是以後面的試驗還是按照原來的結構來。

(3)線雷射的中心點提取原則

在整個計算過程中,每次計算位移的結果,我們要提取每行的線雷射的中心坐标,剛開始計算的算法為邊緣二分法,取中點坐标。這種算法偏差較大。在後面通過閱讀文獻,采用了灰階質心算法。在後面的計算中,都是采用這個算法。在0.01mm的位移下,發現這個算法是有效的,檢測到像素的位移在0.07個像素左右。

八:總結

通過以上的一系列實驗,我們可以達到的誤差精度是0.01mm左右,現在取得的樣本在±10mm的範圍内。但是整個容許的測量範圍是±30mm。接下來可以實驗的内容:

第一:可以以0.01mm為頻率采樣(這樣在補償後結果更精确)。

第二:樣本計算擴大到整個測量範圍。

第三:采用千分尺采樣時,人為讀書的誤差是無法避免的,後期測量的時候需進行改進。

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/145887.html原文連結:https://javaforall.cn