⑴ 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平台上運行,對於大數據可以更有效地執行演算法。在今後的工作中,我們將一一處理這些問題。
⑵ 怎樣算七巧板中每一個圖形的面積
七巧板總體正方形面積為S,小三角形的面積是S/16,中三角形、小正方形和平行四邊形的面積是S/8,大三角形的面積是S/4。
解題思路:
首先,觀察七巧板各個部分的構成,分析其中每個部分佔總體正方形面積的多少,或與其他部分面積的關系,可以得到:
1、兩個大三角形面積,各占正方形的四分之一;
2、中三角形的兩條直角邊分別為正方形邊長的二分之一,為正方形面積的八分之一;
3、兩個小三角形是中三角形面積的一半,為正方形面積的十六分之一;
4、正方形邊長和小三角形直角邊相等,所以面積是小三角形兩倍,為正方形面積的八分之一;
5、平行四邊形與正方形等底等高,所以面積相同,為正方形面積的八分之一;
解:設七巧板總體正方形面積為S,可以得到:
1、兩個大三角形面積,各占正方形的四分之一,即S/4;
2、中三角形的兩條直角邊分別為正方形邊長的二分之一,為正方形面積的八分之一,即S/8;
3、兩個小三角形是中三角形面積的一半,為正方形面積的十六分之一,即S/16;
4、正方形邊長和小三角形直角邊相等,所以面積是小三角形兩倍,為正方形面積的八分之一,
即S/8;
5、平行四邊形與正方形等底等高,所以面積相同,為正方形面積的八分之一,即S/8;
答:設七巧板總體正方形面積為S,小三角形的面積是S/16,中三角形、小正方形和平行四邊形的面積是S/8,大三角形的面積是S/4。
(2)固定圖形拼版演算法擴展閱讀:
求七巧板各個部分的面積,主要步驟如下:
首先,要觀察七巧板各個部分佔總體正方形面積的構成。
1、兩個大三角形的面積之和占正方形面積的一半,因此,每個大三角形面積為總體正方形面積的四分之一。
2、中三角形的面積為大三角形面積的一半,因此,中三角形占總體正方形面積的八分之一。
3、小三角形的面積為中三角形面積的一半,因此,小三角形占總體正方形面積的十六分之一。
4、正方形邊長和小三角形直角邊相等,所以面積是小三角形兩倍,正方形面積為總體正方形面積的八分之一。
5、平行四邊形與正方形等底等高,面積相同,平行四邊形面積為總體正方形面積的八分之一。
然後,每個部分的面積可以用總體面積乘以各部分所佔構成比得到。
⑶ 所有圖形面積計算公式
長方形:{長方形面積=長×寬} 正方形:{正方形面積=邊長×邊長}平行四邊形:{平行四邊形面積=底×高}三角形:{三角形面積=底×高÷2}梯形:{梯形面積=(上底+下底)×高÷2}圓形(正圓):{圓形(正圓)面積=圓周率×半徑×半徑}圓環:{圓形(外環)面積={圓周率×(外環半徑^2-內環半徑^2)}扇形:{圓形(扇形)面積=圓周率×半徑×半徑×扇形角度/360}長方體表面積:{長方體表面積=(長×寬+長×高+寬×高)×2}正方體表面積:{正方體表面積=棱長×棱長×6}球體(正球)表面積:{球體(正球)表面積=圓周率×半徑×半徑×4}橢圓 (其中π(圓周率,a,b分別是橢圓的長半軸,短半軸的長).半圓: (半圓形的面積公式=圓周率×半徑的平方÷2)