做者戴金豔,公衆號:計算機視覺life, 編輯部成員.
首發原文連接計算機視覺方向簡介 | 圖像拼接html
圖像拼接是將同一場景的多個重疊圖像拼接成較大的圖像的一種方法,在醫學成像、計算機視覺、衛星數據、軍事目標自動識別等領域具備重要意義。圖像拼接的輸出是兩個輸入圖像的並集。一般用到五個步驟:算法
特徵提取 Feature Extraction:在全部輸入圖像中檢測特徵點
圖像配準 Image Registration:創建了圖像之間的幾何對應關係,使它們能夠在一個共同的參照系中進行變換、比較和分析。
大體能夠分爲如下幾個類dom
圖像變形 Warping:
圖像變形是指將其中一幅圖像的圖像重投影,並將圖像放置在更大的畫布上。
圖像融合 Blending
圖像融合是經過改變邊界附近的圖像灰度級,去除這些縫隙,建立混合圖像,從而在圖像之間實現平滑過渡。混合模式(Blend modes)用於將兩層融合到一塊兒。函數
特徵是要匹配的兩個輸入圖像中的元素,它們是在圖像塊的內部。這些圖像塊是圖像中的像素組。對輸入圖像進行Patch匹配。具體解釋以下: 以下圖所示,fig1和fig2給出了一個很好的patch匹配,由於fig2中有一個patch看起來和fig1中的patch很是類似。當咱們考慮到fig3和fig4時,這裏的patch並不匹配,由於fig4中有不少相似的patch,它們看起來與fig3中的patch很類似。因爲像素強度很相近,因此沒法進行精確的特徵匹配,
爲了給圖像對提供更好的特徵匹配,採用角點匹配,進行定量測量。角點是很好的匹配特性。在視點變化時,角點特徵是穩定的。此外,角點的鄰域具備強度突變。利用角點檢測算法對圖像進行角點檢測。角點檢測算法有Harris角點檢測算法、SIFT特徵點檢測算法((Scale Invariant Feature Transform),FAST算法角點檢測算法,SURF特徵點檢測算法(Speeded-up robust feature)post
Harris算法是一種基於Moravec算法的點特徵提取算法。1988年C. Harris 和 M.J Stephens設計了一種圖像局部檢測窗口。經過在不一樣的方向上移動少許窗口,能夠肯定強度的平均變化。咱們能夠經過觀察小窗口內的強度值很容易地識別角點。在移動窗口時,平坦區域在全部方向上均不會顯示強度的變化。邊緣區域在沿邊緣方向強度不會發生變化。對於角點,則在各個方向上產生顯著強度變化。Harris角點探測器給出了一種檢測平坦區域、邊緣和角點的數學方法。Harris檢測的特徵較多,具備旋轉不變性和尺度變異性。位移\([u, v]\)下的強度變化:\[E(u,v)=∑_{x,y}w(x,y)[I(x+u,y+v)−I(x,y)]^2\]其中,\(w(x,y)\)是窗口函數,\(I(x+u,y+v)\)是移動後的強度,\(I(x,y)\)是單個像素位置的強度。性能
Harris角點檢測算法以下:測試
SIFT算法是尺度不變的特徵點檢測算法,可用於識別其餘圖像中的類似目標。SIFT的圖像特徵表示爲關鍵點描述符(key-point-descriptors)。在檢查圖像匹配時,將兩組關鍵點描述符做爲輸入提供給最近鄰搜索(Nearest Neighbor Search,NNS),並生成一個緊密匹配的關鍵點描述符(matching key-point-descriptors)。ui
SIFT的計算分爲四個階段:spa
第一階段肯定潛在的興趣點。它利用高斯函數的差分(difference of Gaussian function,DOG)搜索全部尺度和圖像位置。第一階段中發現的全部興趣點的location和scale是肯定的。根據關鍵點的穩定性來選擇關鍵點。一個穩定的關鍵點可以抵抗圖像失真。在方向分配環節,SIFT算法計算穩定關鍵點周圍梯度的方向。根據局部圖像梯度方向,爲每一個關鍵點分配一個或多個方向。對於一組輸入幀,SIFT提取特徵。圖像匹配使用Best Bin First(BBF)算法來估計輸入幀之間的初始匹配點。爲了去除不屬於重疊區域的不須要的角,使用RANSAC算法。它刪除圖像對中的錯誤匹配。經過定義幀的大小、長度和寬度來實現幀的重投影。最後進行拼接,獲得最終的輸出拼接圖像。在拼接時,檢查場景每幀中的每一個像素是否屬於扭曲的第二幀。若是是,則爲該像素分配來自第一幀的對應像素的值。SIFT算法既具備旋轉不變性,又具備尺度不變性。SIFT很是適合於高分辨率圖像中的目標檢測。它是一種魯棒的圖像比較算法,雖然速度較慢。SIFT算法的運行時間很大,由於比較兩幅圖像須要更多的時間。設計
FAST是Trajkovic和Hedley在1998年建立的角點檢測算法。對於FAST,角點的檢測優於邊緣檢測,由於角點有二維強度變化,容易從鄰近點中區分出來。適用於實時圖像處理應用程序。
FAST角點探測器應該知足如下要求:
原理:首先圍繞一個候選角點選擇16個像素點。若是其中有n(n通常爲12)個連續的像素都比候選角點加上一個閾值要高,或者比候選角點減去一個閾值要低,那麼此點即爲角點(如圖4所示)
爲了加快FAST算法的速度,一般會使用角點響應函數( corner response function, CRF)。該函數根據局部鄰域的圖像強度給出角點強度的數值。
對圖像進行CRF計算,並將CRF的局部最大值做爲角點,採用多網格(multi-grid)技術提升了算法的計算速度,並對檢測到的假角點進行了抑制。FAST是一種精確、快速的算法,具備良好的定位(位置精度)和較高的點可靠性。FAST的角點檢測的算法難點在於最佳閾值的選擇。
Speed-up Robust Feature(SURF)角點探測器採用三個特徵檢測步驟;檢測(Detection)、描述(Description)、匹配(Matching),SURF經過考慮被檢測點的質量,加快了位移的檢測過程。它更注重加快匹配步驟。使用Hessian矩陣和低維描述符來顯著提升匹配速度。SURF在計算機視覺社區中獲得了普遍的應用。SURF在不變特徵定位上十分有效和魯棒
在特徵點被檢測出來以後,咱們須要以某種方式將它們關聯起來,能夠經過NCC或者SDD(Sum of Squared Difference)方法來肯定其對應關係。
互相關的工做原理是分析第一幅圖像中每一個點周圍的像素窗口,並將它們與第二幅圖像中每一個點周圍的像素窗口關聯起來。將雙向相關性最大的點做爲對應的對。
基於圖像強度值計算在兩個圖像中的每一個位移(shifts)的「窗口」之間的類似性
\[NCC(u)=\frac{\sum_i[I_1(x_i)-\bar{I_1}][I_2(x_i+u)-\bar{I_2}] }{\sqrt{\sum_i[I_1(x_i)-\bar{I_1}]^2[I_2(x_i+u)-\bar{I_2}]^2} }\]
其中,\(\bar{I_1},\bar{I_2}是窗口的平均值圖像\)
\(\bar{I_1}=\frac{1}{N}\sum _i I_1(x_i)\)
\(\bar{I_2}=\frac{1}{N}\sum _i I_2(x_i+u)\)
\(I_1(x,y)\)和\(I_2(x,y)\)分別是兩張圖片。\(x_i=(x_i,y_i)\) 是窗口的像素座標,\(u=(u,v)\) 是經過NCC係數計算出的位移或偏移。NCC係數的範圍爲\([-1,1]\)。 NCC峯值相對應的位移參數表示兩個圖像之間的幾何變換。此方法的優勢是計算簡單,可是速度特別慢。此外,此類算法要求源圖像之間必須有顯著的重疊。
互信息測量基於兩個圖像之間共享信息數量的類似性。
兩個圖像\(I_1(X,Y)\)與\(I_2(X,Y)\)之間的MI以熵表示:
\[MI(I_1,I_2)=E(I_1)+E(I_2)−E(I_1,I_2)\]
其中,\(E(I_1)\) 和\(E(I_2)\)分別是\(I_1(x,y)\)和\(I_2(x,y)\)的熵。\(E(I_1,I_2)\)表示兩個圖像之間的聯合熵。
\[E(I_1)=−∑_gp_{I1}(g)log(p_{I1}(g))\]
\(g\)是\(I_1(x,y)\)可能的灰度值,\(p_{I1}(g)\)是\(g\)的機率分佈函數
\[E(I1,I2)=−∑_{g,h}p_{I_1,I_2}(g,h)log(p_{I_1,I_2}(g,h))\]
然而,從圖中咱們能夠看到,許多點被錯誤地關聯在一塊兒。
單應矩陣估計是圖像拼接的第三步。在單應矩陣估計中,不屬於重疊區域的不須要的角被刪除。採用RANSAC算法進行單應。
RANSAC算法從可能含有異常值的觀測數據集中擬合數學模型,是一種魯棒參數估計的迭代方法。該算法是不肯定性的,由於它只在必定的機率下產生一個合理的結果,隨着執行更多的迭代,這個機率會增長。RANSAC算法用於在存在大量可用數據外行的狀況下以魯棒的方式擬合模型。RANSAC算法在計算機視覺中有許多應用。
從數據集中隨機選取一組數據並認爲是有效數據(內點)來肯定待定參數模型,以此模型測試數據集中的全部數據,知足該模型的數據成爲內點,反之爲外點(一般爲噪聲、錯誤測量或不正確數據的點),迭代執行,直到某一個參數模型獲得的內點數最大,則該模型爲最優模型。
考慮以下假設:
K有多大取決於咱們認爲屬於合適結構的數據的百分比以及圖像中有多少結構。若是存在多個結構,則在成功擬合後,刪除擬合數據並重作RANSAC。
迭代次數L能夠用以下公式計算:
\(P_{fail} = L連續失敗的機率\)
\(P_{fail}=(給定試驗失敗的機率)L\)
\(P_{fail}=(1 - 給定試驗成功的機率)L\)
\(P_{fail}=(1-(隨機數據項符合模型的機率)N)L\)
\(P_{fail}=(1-(Pg)^N)^L\)
\(L = log(P_{fail})/log(1-(Pg)N)\)
優勢:能夠robust地估計模型參數
缺點:迭代次數無上限,設置的迭代次數會影響算法時間複雜度和精確程度,而且須要預設閾值
在執行RANSAC以後,咱們只能在圖像中看到正確的匹配,由於RANSAC找到了一個與大多數點相關的單應矩陣,並將不正確的匹配做爲異常值丟棄
有了兩組相關點,接下來就須要創建兩組點的轉換關係,也就是圖像變換關係。單應性是兩個空間之間的映射,經常使用於表示同一場景的兩個圖像之間的對應關係,能夠匹配大部分相關的特徵點,而且能實現圖像投影,使一張圖經過投影和另外一張圖實現大面積的重合。
設2個圖像的匹配點分別是\(X=[x,y]^T\),\(X'=[x',y']^T\),則必須知足公式:
\[X'=HX\]且因爲兩向量共線,因此\[X'\times HX = 0\]其中,\(H\) 爲8參數的變換矩陣,可知四點肯定一個H
\[\begin{pmatrix}x' \\y'\\1 \end{pmatrix} =\begin{pmatrix} h_{11} & h_{12} & h_{13}\\ h_{21} & h_{22} & h_{23}\\ h_{31} & h_{32} & 1 \end{pmatrix}\begin{pmatrix}x\\y\\1\\\end{pmatrix} \]
令 \[h =(h11:h12:h13:h21:h22:h23:h31:h32:h33)T\]則有
\[Bh=0\]N個點對給出2N個線性約束。
\[\underset{h}{min}║Bh║^2 ,║h║ = 1\]
用RANSAC方法估算H:
最後一步是將全部輸入圖像變形並融合到一個符合的輸出圖像中。基本上,咱們能夠簡單地將全部輸入的圖像變形到一個平面上,這個平面名爲複合全景平面。
平滑過渡(transition smoothing)圖像融合方法包括 羽化(feathering), 金字塔(pyramid), 梯度(gradient)
最後一步是在重疊區域融合像素顏色,以免接縫。最簡單的可用形式是使用羽化(feathering),它使用加權平均顏色值融合重疊的像素。咱們一般使用alpha因子,一般稱爲alpha通道,它在中心像素處的值爲1,在與邊界像素線性遞減後變爲0。當輸出拼接圖像中至少有兩幅重疊圖像時,咱們將使用以下的alpha值來計算其中一個像素處的顏色:
假設兩個圖像 \(I_1,I_2\),在輸出圖像中重疊;每一個像素點\((x,y)\)在圖像\(I_i(x,y)=(\alpha iR,\alpha iG,\alpha iB,\alpha j,)\),其中(R,G,B)是像素的顏色值,咱們將在縫合後的輸出圖像中計算(x, y)的像素值:
\[ [(α1R, α1G, α1B, α1) + (α2R, α2G, α2B, α2)]/(α1+α2)\].
上述內容對一些經常使用的算法進行了簡單的概述。Harris角點檢測方法具備魯棒性和旋轉不變性。然而,它是尺度變化的。FAST算法具備旋轉不變性和尺度不變性,且具備較好的執行時間。可是當有噪聲存在時,它的性能不好。SIFT算法具備旋轉不變性和尺度不變性,而且在有噪聲狀況下更有效。它具備很是明顯的特徵。然而,它受到光照變化的影響。該算法在執行時間和光照不變性方面具備較好的性能。