計算機視覺方向簡介 | 影象拼接
作者戴金豔,公眾號:計算機視覺life, 編輯部成員.
首發原文連結計算機視覺方向簡介 | 影象拼接
簡介
影象拼接是將同一場景的多個重疊影象拼接成較大的影象的一種方法,在醫學成像、計算機視覺、衛星資料、軍事目標自動識別等領域具有重要意義。影象拼接的輸出是兩個輸入影象的並集。通常用到五個步驟:
特徵提取 Feature Extraction:在所有輸入影象中檢測特徵點
影象配準 Image Registration:建立了影象之間的幾何對應關係,使它們可以在一個共同的參照系中進行變換、比較和分析。
大致可以分為以下幾個類
- 直接使用影象的畫素值的演算法,例如,correlation methods
- 在頻域處理的演算法,例如,基於快速傅立葉變換(FFT-based)方法;
- 低水平特徵的演算法low level features,通常用到邊緣和角點,例如,基於特徵的方法,
- 高水平特徵的演算法high-level features,通常用到影象物體重疊部分,特徵關係,例如,圖論方法(Graph-theoretic methods)
影象變形 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)
Harris角點檢測演算法
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角點檢測演算法如下:
- 對影象中的每個畫素點\((x,y)\)計算自相關矩陣\(M\)(autocorrelation matrix M):
\[M=\sum_{x,y} \begin{bmatrix}I_{x}^{2} & I_{x}I_{y}\\ I_{x}I_{y} & I_{y}^{2}\end{bmatrix}\]其中\(I_{x},I_{y}\)是\(I(x,y)\)的偏導數 - 對影象中的每個畫素點做高斯濾波,獲得新的矩陣\(M\),離散二維零均值高斯函式為\[Gauss = exp(-u^2+v^2)/2\delta^2\]
- 計算每個畫素點(x,y)的角點度量,得到\[R=Det(M)-k*trace(M)\],\(k\) 的範圍是\(0.04≤k≤0.06\)。
- 選擇區域性最大值點。Harris方法認為特徵點與區域性最大興趣點的畫素值對應。
- 設定閾值T,檢測角點。如果 \(R\) 的區域性最大值高於閾值\(T\),那麼此點為角點。
SIFT角點檢測演算法
SIFT演算法是尺度不變的特徵點檢測演算法,可用於識別其他影象中的相似目標。SIFT的影象特徵表示為關鍵點描述符(key-point-descriptors)。在檢查影象匹配時,將兩組關鍵點描述符作為輸入提供給最近鄰搜尋(Nearest Neighbor Search,NNS),並生成一個緊密匹配的關鍵點描述符(matching key-point-descriptors)。
SIFT的計算分為四個階段:
- 尺度空間構造(Scale-space construction)
- 尺度空間極值檢測(Scale-space extrema detection)
- 關鍵點定位(key-point localization)
- 方向分配(orientation assignment)和關鍵點描述符定義(defining key-point descriptors)
第一階段確定潛在的興趣點。它利用高斯函式的差分(difference of Gaussian function,DOG)搜尋所有尺度和影象位置。第一階段中發現的所有興趣點的location和scale是確定的。根據關鍵點的穩定性來選擇關鍵點。一個穩定的關鍵點能夠抵抗影象失真。在方向分配環節,SIFT演算法計算穩定關鍵點周圍梯度的方向。根據區域性影象梯度方向,為每個關鍵點分配一個或多個方向。對於一組輸入幀,SIFT提取特徵。影象匹配使用Best Bin First(BBF)演算法來估計輸入幀之間的初始匹配點。為了去除不屬於重疊區域的不需要的角,使用RANSAC演算法。它刪除影象對中的錯誤匹配。通過定義幀的大小、長度和寬度來實現幀的重投影。最後進行拼接,得到最終的輸出拼接影象。在拼接時,檢查場景每幀中的每個畫素是否屬於扭曲的第二幀。如果是,則為該畫素分配來自第一幀的對應畫素的值。SIFT演算法既具有旋轉不變性,又具有尺度不變性。SIFT非常適合於高解析度影象中的目標檢測。它是一種魯棒的影象比較演算法,雖然速度較慢。SIFT演算法的執行時間很大,因為比較兩幅影象需要更多的時間。
FAST 演算法
FAST是Trajkovic和Hedley在1998年建立的角點檢測演算法。對於FAST,角點的檢測優於邊緣檢測,因為角點有二維強度變化,容易從鄰近點中區分出來。適用於實時影象處理應用程式。
FAST角點探測器應該滿足以下要求:
- 檢測到的位置要一致,對噪聲變化不敏感,對同一場景的多幅影象不能移動。
- 準確;檢測到的角點應該儘可能接近正確的位置。
- 速度;角落探測器應該足夠快。
原理:首先圍繞一個候選角點選擇16個畫素點。如果其中有n(n一般為12)個連續的畫素都比候選角點加上一個閾值要高,或者比候選角點減去一個閾值要低,那麼此點即為角點(如圖4所示)
為了加快FAST演算法的速度,通常會使用角點響應函式( corner response function, CRF)。該函式根據區域性鄰域的影象強度給出角點強度的數值。
對影象進行CRF計算,並將CRF的區域性最大值作為角點,採用多網格(multi-grid)技術提高了演算法的計算速度,並對檢測到的假角點進行了抑制。FAST是一種精確、快速的演算法,具有良好的定位(位置精度)和較高的點可靠性。FAST的角點檢測的演算法難點在於最佳閾值的選擇。
SURF演算法
Speed-up Robust Feature(SURF)角點探測器採用三個特徵檢測步驟;檢測(Detection)、描述(Description)、匹配(Matching),SURF通過考慮被檢測點的質量,加快了位移的檢測過程。它更注重加快匹配步驟。使用Hessian矩陣和低維描述符來顯著提高匹配速度。SURF在計算機視覺社群中得到了廣泛的應用。SURF在不變特徵定位上十分有效和魯棒
影象配準
在特徵點被檢測出來之後,我們需要以某種方式將它們關聯起來,可以通過NCC或者SDD(Sum of Squared Difference)方法來確定其對應關係。
歸一化互相關(normalized cross correlation,NCC)
互相關的工作原理是分析第一幅影象中每個點周圍的畫素視窗,並將它們與第二幅影象中每個點周圍的畫素視窗關聯起來。將雙向相關性最大的點作為對應的對。
基於影象強度值計算在兩個影象中的每個位移(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峰值相對應的位移引數表示兩個影象之間的幾何變換。此方法的優點是計算簡單,但是速度特別慢。此外,此類演算法要求源影象之間必須有顯著的重疊。
互資訊(Mutual Information, MI)
互資訊測量基於兩個影象之間共享資訊數量的相似性。
兩個影象\(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(random sample consensus)
RANSAC演算法從可能含有異常值的觀測資料集中擬合數學模型,是一種魯棒引數估計的迭代方法。該演算法是不確定性的,因為它只在一定的概率下產生一個合理的結果,隨著執行更多的迭代,這個概率會增加。RANSAC演算法用於在存在大量可用資料外行的情況下以魯棒的方式擬合模型。RANSAC演算法在計算機視覺中有許多應用。
RANSAC原理
從資料集中隨機選取一組資料並認為是有效資料(內點)來確定待定引數模型,以此模型測試資料集中的所有資料,滿足該模型的資料成為內點,反之為外點(通常為噪聲、錯誤測量或不正確資料的點),迭代執行,直到某一個引數模型得到的內點數最大,則該模型為最優模型。
考慮如下假設:
- 引數可以從N個數據項中估計。
- 可用的資料項總共是M。
- 隨機選擇的資料項成為好模型的一部分的概率為\(P_g\)。
- 如果存在一個很好的擬合,那麼演算法在沒有找到一個很好的擬合的情況下退出的概率是\(P_{fail}\)。
RANSAC步驟
- 隨機選取N個數據(3個點對)
- 估計引數x(計算變換矩陣H)
- 根於使用者設定的閾值,找到M中合適該模型向量x的的資料對總數量K( 計算每個匹配點經過變換矩陣後到對應匹配點的距離,根據預先設定的閾值將匹配點集合分為內點和外點,如果內點足夠多,則H足夠合理,用所有內點重新估計H)。
- 如果符合的數量K足夠大,則接受該模型並退出
- 重複1-4步驟 L次
- 到這一步退出
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找到了一個與大多數點相關的單應矩陣,並將不正確的匹配作為異常值丟棄
單應矩陣(Homography)
有了兩組相關點,接下來就需要建立兩組點的轉換關係,也就是影象變換關係。單應性是兩個空間之間的對映,常用於表示同一場景的兩個影象之間的對應關係,可以匹配大部分相關的特徵點,並且能實現影象投影,使一張圖通過投影和另一張圖實現大面積的重合。
設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:
- 首先檢測兩邊影象的角點
- 在角點之間應用方差歸一化相關,收集相關性足夠高的對,形成一組候選匹配。
- 選擇四個點,計算H
- 選擇與單應性一致的配對。如果對於某些閾值:Dist(Hp、q) <ε,則點對(p, q)被認為與單應性H一致
- 重複34步,直到足夠多的點對滿足H
- 使用所有滿足條件的點對,通過公式重新計算H
影象變形和融合
最後一步是將所有輸入影象變形並融合到一個符合的輸出影象中。基本上,我們可以簡單地將所有輸入的影象變形到一個平面上,這個平面名為複合全景平面。
影象變形步驟
- 首先計算每個輸入影象的變形影象座標範圍,得到輸出影象大小,可以很容易地通過對映每個源影象的四個角並且計算座標(x,y)的最小值和最大值確定輸出影象的大小。最後,需要計算指定參考影象原點相對於輸出全景圖的偏移量的偏移量x_offset和偏移量y_offset。
- 下一步是使用上面所述的反向變形,將每個輸入影象的畫素對映到參考影象定義的平面上,分別執行點的正向變形和反向變形。
平滑過渡(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演算法具有旋轉不變性和尺度不變性,並且在有噪聲情況下更有效。它具有非常明顯的特徵。然而,它受到光照變化的影響。該演算法在執行時間和光照不變性方面具有較好的效能。
參考
- OpenCV探索之路(二十四)影象拼接和影象融合技術
- Debabrata Ghosh,Naima Kaabouch. A survey on image mosaicing techniques[J]. Journal of Visual Communication and Image Representation,2016,34.地址
- 影象拼接綜述