當前位置:編程學習大全網 - 源碼下載 - GPU上圖像拼接的快速計算

GPU上圖像拼接的快速計算

圖像拼接已被研究並廣泛應用於計算機科學的許多領域,但在特征匹配、扭曲和混合步驟中存在大量計算。從而無法滿足某些應用的實時性需求。幸運的是,已經在圖形處理器單元 (GPU) 上開發並實現了壹些可以加快拼接過程的相關並行操作。在本文中,我們使用統壹計算設備架構 (CUDA) 提出了基於 GPU 的圖像拼接的並行實現。我們在執行時間方面獲得了比在中央處理單元 (CPU) 上實現更好的結果。在實驗中使用集成 GPU GTX745 時,我們對大輸入圖像實現了高達 27.6 倍的加速比。

典型的拼接過程主要包括三個不同的圖像處理步驟,即配準、扭曲和插值以及混合。圖像配準是圖像拼接的關鍵任務。配準是指在描繪同壹場景的壹對圖像之間建立幾何變換,該變換由壹個8自由度的平面單應性決定。

GPU以其強大的並行計算能力吸引許多領域的研究,作為壹種協處理器對計算量大的算法加速已成為實踐的重要途徑。在前人的研究中,他們都避免了考慮兩個極其耗時的步驟,即特征匹配和隨機樣本***識(RANSAC)。作為圖像配準中的兩個關鍵過程,在提出的 GPU 加速並行算法中應考慮它們。

使用GPU並行計算會遇到兩個限制

CUDA的出現解決了上述問題,並且CUDA使用C語言,最初為CPU編寫的C語言函數可以移植到CUDA內核,無需修改。

在CUDA中,壹定數量的線程被分組到壹個塊中,壹定數量的塊以規則的網格模式在邏輯上排列(見圖1)。每個塊都映射到壹個多處理器,壹個多處理器可以同時運行多個線程塊。由於本地資源(寄存器和***享內存)在塊之間進行劃分,包含在同壹塊中的線程可以訪問相同的***享內存並快速實現同步操作。但是,不同塊中的線程並不能直接實現通信和同步。除了本地寄存器和***享內存,所有線程都可以訪問全局內存、常量內存和紋理內存。

A. 特征匹配

令點 經過仿射變換後得到 ,即

向量 是平移分量, 控制縮放、旋轉效果。利用齊次坐標系,方程(2)也可以寫為

接著計算兩幅圖像特征點之間的歐幾裏得距離,並將距離按照升序排序,比較升序排序中第壹和第二的比值如果小於某個閾值,則認為是匹配點。

由於 中有六個未知參數,隨機選擇3對不***線的點匹配 ,使用該矩陣 計算剩余 對匹配點的誤差。執行大量叠代,直到內點對最多。可以使用最小二乘估計器估計所有六個參數。

B. 變形和插值

扭曲變形過程中,可能使像素點位置出現負值或者沒有數值與之對應,在這種搶礦下需要插值算法創建更平滑和準確的數值,進壹步減少翹曲中產生的變形。最常用的插值方法是最近鄰插值、雙線性插值和雙三次插值。考慮到精度和計算復雜度之間的權衡,實驗采用雙線性插值算法。

C. 混合

為了實現並行計算,本文采用了基於羽化的混合方法,其混合函數可以表示為:

其中 是像素 的權重函數。

A. 並行匹配

匹配分為粗匹配和精匹配。粗匹配過程中,塊線程數由特征元素數決定,每個塊可以實現壹個關鍵點之間的匹配,每個線程計算兩個圖像兩個特征向量的距離。在計算完所有距離後,使用並行計算的歸並排序對距離值排序。最後,所有塊得到的匹配結果存儲在全局內存中,然後傳送到CPU。

精匹配過程,設計內核執行RANSAC叠代,只啟動壹個block,線程數為 ,首先用CPU將三個非***線點計算得到的變換矩陣 ,然後將 、閾值和剩余 個點傳到GPU,判斷內外點。

通過內存分配,可以實現精細匹配優化。

B. 平行變形和插值

將 矩陣的逆矩陣 存放在常量內存中,由於需要頻繁地調用。將待校正的圖像存放在紋理內存中,紋理內存是專門為本地訪問模式設計的。

為了進壹步提升性能,若兩個坐標小數部分小於0.2則強度值分配為整數部分,否則使用雙線性插值。

C. 並行混合

由於混合數是像素和像素的混合,因此線程數等於重疊部分包含的像素。令重疊圖像的列數設置為16的倍數。 gridDim.x的大小等於重疊圖像的行數,gridDim.y的大小等於重疊圖像的列數重疊圖像除以16。

基於 CPU 的算法在配備 16GMB DDR3 RAM 的 Intel Core i7-4790、3.60GHz 處理器上實現。基於 GPU 的算法在 NVIDIA GeForce GTX745 集成顯卡上進行測試,每塊最大 1024 個線程和 4096 MB 全局內存。

可以清楚地看到,這兩種圖像之間幾乎沒有差異。原因是實驗中使用的GPU卡支持浮點計算,與CPU版本相比產生的誤差非常小。

在本文中,我們提出了壹種使用 CUDA 架構在 GPU 上運行的並行圖像拼接方法。順序算法通過幾個 CUDA 內核轉換為並行版本。通過使用不同類型的內存,我們實現了並行算法的優化。同時,將GPU獲得的結果與CPU獲得的結果進行比較,我們實現了高達27.6的加速比。盡管所提出的方法顯著提高了計算性能,但仍有許多工作要做。例如,更精確的插值方法(雙三次插值)和可變權重 c( x, y) 可以考慮進壹步改善鑲嵌結果。此外,並行鑲嵌算法也可以在多個GPU平臺上運行,對於大數據可以更有效地執行算法。在今後的工作中,我們將壹壹處理這些問題。

  • 上一篇:Kubuntu Xubuntu Lubuntu有什麽區別
  • 下一篇:預膨脹源代碼
  • copyright 2024編程學習大全網