導航:首頁 > 源碼編譯 > 拼接圖像演算法

拼接圖像演算法

發布時間:2023-05-07 19:55:49

1. 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平台上運行,對於大數據可以更有效地執行演算法。在今後的工作中,我們將一一處理這些問題。

2. 急求!圖像拼接演算法代碼

演算法描述

procere ImageMatching

{

輸入FirstImage;

輸入SecondImage;

//獲得兩幅圖象的大小

Height1=GetImageHeight(FirstImage);

Height2=GetImageHeight(SecondImage);

Width1=GetImageWidth(FirstImage);

Width2=GetImageWidth(SecondImage);

// 從第二幅圖象取網格匹配模板

SecondImageGrid = GetSecondImageGrid(SecondImage);

// 粗略匹配,網格在第一幅圖象中先從左向右移動,再從下到上移動,每次移動一個網格間距,Step_Width 或Step_Height,當網格移出重疊區域後結束

y=Heitht1-GridHeight;

MinValue = MaxInteger;

While ( y<Height1-OverlapNumber)//當網格移出重疊部分後結束

{

x=Grid_Width/2; //當網格位於第一幅圖象的最左邊時,A點的橫坐標。

While ( x<(Width1-Grid_Width/2) )

{

FirstImageGrid=GetImgaeGrid(FirstImgaeGrid, x, y);

differ=CaculateDiff(FirstImgaeGrid, SecondImageGrid);//計算象素值差的平

//方和

if (differ<MinValue)

{

BestMatch_x=x;

BestMatch_y=y;

MinValue = differ;

}

x= x+Step_width;

}

y=y-Step_Height;

}

//精確匹配

Step_Width= Step_Width/2;

Step_Height= Step_Height/2;

While ( Step_Height>0 & Step_Width>0)//當水平步長和垂直步長均減為零時結束

{

if(Step_Height==0)//當僅有垂直步長減為零時,將其置為1

Step_Height=1;

If(Step_Width==0) //當僅有水平步長減為零時,將其置為1

Step_Width=1;

temp_x = BestMatch_x;

temp_y = BestMatch_y;

for ( i= -1; i<1; i++)

for( j= -1; j<1; j++)

{

if ((i=0&j!=0)|(i!=0&j=0))

{

FirstImageGrid=GetImgaeGrid(FirstImgaeGrid,

temp_x+i*Step_Width, temp_y +j*Step_Height);

differ=CaculateDiff(FirstImgaeGrid, SecondImageGrid);

if (differ<MinValue)

{

BestMatch_x=x;

BestMatch_y=y;

MinValue = differ;

}

}

}

Step_Height = Step_Height /2;

Step_Width = Step_Width/2;

}

}
不懂的可以問我,相互交流

3. 使用OpenCV和Python進行圖像拼接

么是圖像拼接呢?簡單來說,對於輸入應該有一組圖像,輸出是合成圖像。同時,必須保留圖像之間的邏輯流。

首先讓我們了解圖像拼接的概念。基本上,如果你想捕捉一個大的場景,你的相機只能提供一個特定解析度的圖像(如:640×480),這當然不足以捕捉大的全景。所以,我們可以做的是捕捉整個場景的多個圖像,然後把所有的碎片放在一起,形成一個大的圖像。這些有序的照片被稱為全景。獲取多幅圖像並將其轉換成全景圖的整個過程稱為圖像拼接。

首先,需要安裝opencv 3.4.2.16。

接下來我們將導入我們將在Python代碼中使用的庫:

在我們的教程中,我們將拍攝這張精美的照片,我們會將其分成兩張左右兩張照片,然後我們會嘗試拍攝相同或非常相似的照片。

因此,我將此圖像切成兩個圖像,它們會有某種重疊區域:

在此,我們將列出我們應採取的步驟,以取得最終的結果:

因此,從第一步開始,我們將導入這兩個圖像並將它們轉換為灰度,如果您使用的是大圖像,我建議您使用cv2.resize,因為如果您使用較舊的計算機,它可能會非常慢並且需要很長時間。如果要調整圖像大小,即調整50%,只需將fx = 1更改為fx = 0.5即可。

我們還需要找出兩幅圖像中匹配的特徵。我們將使用opencv_contrib的SIFT描述符。SIFT (Scale constant Feature Transform)是一種非常強大的OpenCV演算法。這些最匹配的特徵作為拼接的基礎。我們提取兩幅圖像的關鍵點和sift描述符如下:

kp1和kp2是關鍵點,des1和des2是圖像的描述符。如果我們用特徵來畫這幅圖,它會是這樣的:

左邊的圖像顯示實際圖像。右側的圖像使用SIFT檢測到的特徵進行注釋:

一旦你有了兩個圖像的描述符和關鍵點,我們就會發現它們之間的對應關系。我們為什麼要這么做?為了將任意兩個圖像連接成一個更大的圖像,我們必須找到重疊的點。這些重疊的點會讓我們根據第一幅圖像了解第二幅圖像的方向。根據這些公共點,我們就能知道第二幅圖像是大是小還是旋轉後重疊,或者縮小/放大後再fitted。所有此類信息的產生是通過建立對應關系來實現的。這個過程稱為registration。

對於匹配圖像,可以使用opencv提供的FLANN或BFMatcher方法。我會寫兩個例子證明我們會得到相同的結果。兩個示例都匹配兩張照片中更相似的特徵。當我們設置參數k = 2時,這樣我們就要求knnMatcher為每個描述符給出2個最佳匹配。「matches」是列表的列表,其中每個子列表由「k」個對象組成。以下是Python代碼:

FLANN匹配代碼:

BFMatcher匹配代碼:

通常在圖像中,圖像的許多地方可能存在許多特徵。所以我們過濾掉所有的匹配來得到最好的。因此我們使用上面得到的前2個匹配項進行比值檢驗。如果下面定義的比值大於指定的比值,則考慮匹配。

現在我們定義在圖像上繪制線條的參數,並給出輸出以查看當我們在圖像上找到所有匹配時的樣子:

這是輸出的匹配圖像:

這部分完整Python代碼:

因此,一旦我們獲得了圖像之間的最佳匹配,我們的下一步就是計算單應矩陣。如前所述,單應矩陣將與最佳匹配點一起使用,以估計兩個圖像內的相對方向變換。

在OpenCV中估計單應性是一項簡單的任務,只需一行代碼:

在開始編碼拼接演算法之前,我們需要交換圖像輸入。所以img_現在會取右圖像img會取左圖像。

那麼讓我們進入拼接編碼:

因此,首先,我們將最小匹配條件count設置為10(由MIN_MATCH_COUNT定義),並且只有在匹配良好的匹配超出所需匹配時才進行拼接。否則,只需顯示一條消息,說明匹配不夠。

因此,在if語句中,我們將關鍵點(從匹配列表)轉換為findHomography()函數的參數。

只需在這段代碼中討論cv2.imshow(「original_image_overlapping.jpg」,img2),我們就會顯示我們收到的圖像重疊區域:

因此,一旦我們建立了單應性,我們需要扭曲視角,我們將以下單應矩陣應用於圖像:

所以我們使用如下:

在上面兩行Python代碼中,我們從兩個給定的圖像中獲取重疊區域。然後在「dst」中我們只接收到沒有重疊的圖像的右側,因此在第二行代碼中我們將左側圖像放置到最終圖像。所以在這一點上我們完全拼接了圖像:

剩下的就是去除圖像的黑色,所以我們將編寫以下代碼來從所有圖像邊框中刪除黑邊:

這是我們調用修剪邊界的最終定義函數,同時我們在屏幕上顯示該圖像。如果您願意,也可以將其寫入磁碟:

使用上面的Python代碼,我們將首先收到原始圖片:

這是完整的最終代碼:

在本教程中,我們學習了如何使用OpenCV執行圖像拼接和全景構造,並編寫了最終的圖像拼接代碼。

我們的圖像拼接演算法需要四個主要步驟:檢測關鍵點和提取局部不變描述符; 獲得圖像之間的匹配描述符; 應用RANSAC估計單應矩陣; 使用單應矩陣應用warping transformation。

當僅為兩個圖像構建全景圖時,該演算法在實踐中工作良好。

4. 圖像拼接技術的基本介紹

圖像配准和圖像融合是圖像拼接的兩個關鍵技術。圖像配準是圖像融合的基礎,而且圖像配准演算法的計算量一般非常大,因此圖像拼接技術的發展灶液很大程度上取決於圖像配准技術的創新。早期的圖像配准技術主要採用點匹配法,這類方法速激昌度慢、精度低,而且常常需要人工選取初始匹配點,無法適應大數據量圖像的融合。圖像拼接的方法很多,不同的演算法步驟明辯扒會有一定差異,但大致的過程是相同的。一般來說,圖像拼接主要包括以下五步: 將待拼接圖像的重合區域進行融合得到拼接重構的平滑無縫全景圖像。

5. 用MATLAB實現圖像的拼接顯示

看樓主的要求,似乎沒樓上說的那麼復雜。

樓主只是要求把四幅圖片變成同樣大小然後拼接起來就是了。

如果上述理解無誤,那麼實現並不困難,主要有以下幾點需要注意:

1、圖像格式:由於圖像格式包括索引色和真彩色這兩大類不同的類型,所以需要統一轉換一下才能拼接。這兩類圖像的判斷根據是讀入的數據是二維還是三維,對於二維的數據,如果調色板為空,則按照灰度圖像處理。

2、數據格式:根據具體的圖像文件格式不同,讀入的數據可能是logical、uint8、uint16、uint32、single、uint64、double等不同的格式,要想進行拼接,需要轉換為同一種數據類型。

3、注意圖像的寬高順序:512*384的圖像應為[384 512]。

參考代碼

%待拼接文件
imfile={'1.jpg','2.jpg','3.gif','4.png'};

%讀入文件,並調整大小、轉換格式
A=cell(2,2);
fori=1:4
%讀入圖像數據
[X,map]=imread(imfile{i});
ifsize(X,3)==1
%有些灰度圖像無map數據
ifisempty(map)
map=gray;
end
%轉換為真彩色
X=ind2rgb(X,map);
end
%調整圖像大小,並轉換數據格式
A{i}=im2double(imresize(X,[384512]));
end

%拼接圖像並顯示
A=[A{1}A{2};A{3}A{4}];
imshow(A)

6. 數字圖像處理的基本演算法及要解決的主要問題

圖像處理,是對圖像進行分析、加工、和處理,使其滿足視覺、心理以及其他要求的技術。圖像處理是信號處理在圖像域上的一個應用。目前大多數的圖像是以數字形式存儲,因而圖像處理很多情況下指數字圖像處理。此外,基於光學理論的處理方法依然佔有重要的地位。

圖像處理是信號處理的子類,另外與計算機科學、人工智慧等領域也有密切的關系。

傳統的一維信號處理的方法和概念很多仍然可以直接應用在圖像處理上,比如降噪、量化等。然而,圖像屬於二維信號,和一維信號相比,它有自己特殊的一面,處理的方式和角度也有所不同。
目錄
[隱藏]

* 1 解決方案
* 2 常用的信號處理技術
o 2.1 從一維信號處理擴展來的技術和概念
o 2.2 專用於二維(或更高維)的技術和概念
* 3 典型問題
* 4 應用
* 5 相關相近領域
* 6 參見

[編輯] 解決方案

幾十年前,圖像處理大多數由光學設備在模擬模式下進行。由於這些光學方法本身所具有的並行特性,至今他們仍然在很多應用領域佔有核心地位,例如 全息攝影。但是由於計算機速度的大幅度提高,這些技術正在迅速的被數字圖像處理方法所替代。

從通常意義上講,數字圖像處理技術更加普適、可靠和准確。比起模擬方法,它們也更容易實現。專用的硬體被用於數字圖像處理,例如,基於流水線的計算機體系結構在這方面取得了巨大的商業成功。今天,硬體解決方案被廣泛的用於視頻處理系統,但商業化的圖像處理任務基本上仍以軟體形式實現,運行在通用個人電腦上。

[編輯] 常用的信號處理技術

大多數用於一維信號處理的概念都有其在二維圖像信號領域的延伸,它們中的一部分在二維情形下變得十分復雜。同時圖像處理也具有自身一些新的概念,例如,連通性、旋轉不變性,等等。這些概念僅對二維或更高維的情況下才有非平凡的意義。

圖像處理中常用到快速傅立葉變換,因為它可以減小數據處理量和處理時間。

[編輯] 從一維信號處理擴展來的技術和概念

* 解析度(Image resolution|Resolution)
* 動態范圍(Dynamic range)
* 帶寬(Bandwidth)
* 濾波器設計(Filter (signal processing)|Filtering)
* 微分運算元(Differential operators)
* 邊緣檢測(Edge detection)
* Domain molation
* 降噪(Noise rection)

[編輯] 專用於二維(或更高維)的技術和概念

* 連通性(Connectedness|Connectivity)
* 旋轉不變性(Rotational invariance)

[編輯] 典型問題

* 幾何變換(geometric transformations):包括放大、縮小、旋轉等。
* 顏色處理(color):顏色空間的轉化、亮度以及對比度的調節、顏色修正等。
* 圖像合成(image composite):多個圖像的加、減、組合、拼接。
* 降噪(image denoising):研究各種針對二維圖像的去噪濾波器或者信號處理技術。
* 邊緣檢測(edge detection):進行邊緣或者其他局部特徵提取。
* 分割(image segmentation):依據不同標准,把二維圖像分割成不同區域。
* 圖像製作(image editing):和計算機圖形學有一定交叉。
* 圖像配准(image registration):比較或集成不同條件下獲取的圖像。
* 圖像增強(image enhancement):
* 圖像數字水印(image watermarking):研究圖像域的數據隱藏、加密、或認證。
* 圖像壓縮(image compression):研究圖像壓縮。

[編輯] 應用

* 攝影及印刷 (Photography and printing)
* 衛星圖像處理 (Satellite image processing)
* 醫學圖像處理 (Medical image processing)
* 面孔識別, 特徵識別 (Face detection, feature detection, face identification)
* 顯微圖像處理 (Microscope image processing)
* 汽車障礙識別 (Car barrier detection)

[編輯] 相關相近領域

* 分類(Classification)
* 特徵提取(Feature extraction)
* 模式識別(Pattern recognition)
* 投影(Projection)
* 多尺度信號分析(Multi-scale signal analysis)
* 離散餘弦變換(The Discrete Cosine Transform)

7. 長圖最多可以拼多少照片

長圖最多可以拼9張圖片,再多圖片也不清晰了,有的軟體還需要付費。LongScreen 是一款專注 iPhone 截屏的拼圖應用。它的特點是能輕松拼接橫向並列拼圖,並支持豎向快速拼接長圖,選擇好圖片點擊右上角合並就可以開始拼接了。

圖像拼接技術技術分類

圖像拼接技術主要包括兩個關鍵環節即圖像配准和圖像融合。對於圖像融合部分,由於其耗時不太大,且現有的幾種主要方法效果差別也不多,所以總體來說演算法上比較成熟。

而圖像配准部分是整個圖像拼接技術的核心部分,它直接關繫到圖像拼接演算法的成功率和運行速度,因此配准演算法的研究是多年來研究的重點。

目前的圖像配准演算法基本上可以分為兩類:基於頻域的方法(相位相關方法)和基於時域的方法。

相位相關法最早是由Kuglin和Hines在1975年提出的,並且證明在純二維平移的情形下,拼接精度可以達到1個像素,多用於航空照片和衛星遙感圖像的配准等領域。

該方法對拼接的圖像進行快速傅立葉變換,將兩幅待配准圖像變換到頻域,然後通過它們的互功率譜直接計算出兩幅圖像間的平移矢量,從而實現圖像的配准。由於其具有簡單而精確的特點,後來成為最有前途的圖像配准演算法之一。

但是相位相關方法一般需要比較大的重疊比例(通常要求配准圖像之間有50%的重疊比例),如果重疊比例較小,則容易造成平移矢量的錯誤估計,從而較難實現圖像的配准。

8. 基於特徵匹配和迭代優化的航拍圖像拼接

本文研究了無人機(UAV)遙感圖像拼接過程中重疊區域的不匹配問題。為了解決這個問題,首先通過將雙重匹配與隨機抽樣共識(RANSAC)方法相結合來過濾特徵點。其次,為了保證每幅圖像與全景照片的投影關系的一致性,我們提出了一種局部拼接的方法。為了避免隨著圖像數量的增加透視變化累積而導致圖像傾斜的錯誤,我們建立了圖像旋轉坐標系,並將圖像之間的關系限制為平移和旋轉。用坐標原點的相對位置來表示平移距離,通過迭代求解最優旋轉角度。最後,圖像的重疊部分通過線性加權融合。通過實驗結果驗證,本文提出的方法在大量圖像的情況下能夠保證更快的處理速度和更高的處理精度,從而達到理想的拼接效果。

近年來,隨著計算機視覺的不斷進步,圖像拼接技術在海洋和礦產勘探、遙感勘探、醫學成像、效果生成、虛擬現實等方面得到了廣泛的應用。許多航拍遙感圖像可以通過配備攝像頭的無人機在地面拍攝得到。通常,由於無人機飛行高度、相機焦距等因素,單幅圖像存在信息量少、全局解析度低等問題。因此,要獲得廣角高解析度的照片,就需要研究全景圖像拼接技術。Brown 在 2003 年引入了著名的 AutoSitich 演算法,很快就被用於商業產品,如 Photoshop。但是,該演算法假定圖像的重疊區域沒有深度變化。2013 年,薩拉戈薩 J 等人。將圖像拆分為密集的網格,並為每個網格使用單個更改,稱為網格變形。該方法在一定程度上解決了圖像變形、尺寸縮放、重定向等問題。

圖像拼接技術一般分為圖像幾何校正、圖像預處理、圖像對齊、圖像融合四個步驟。由於相機鏡頭的畸變,需要對無人機的圖像進行校正,使得到的圖像滿足個別地圖的投影關系。圖像預處理是幾乎所有圖像處理技術的重要組成部分,包括去噪、灰度變化等。這個過程可以降低匹配難度,提高匹配精度。然而,對於無人機遙感圖像的拼接,圖像匹配和圖像融合是成功的關鍵。

圖像匹配技術是圖像拼接的基礎。1975年米爾格拉姆提出了計算機拼接技術。於是,在重疊區域尋找最優接縫線就成為一個重要的研究方向。同年,Kuslin 提出了一種相位相關方法,通過傅里葉變化將圖像轉換到頻域,並利用功率譜計算平移。1987 年,Reddy 提出了一種擴展的相位相關方法,該方法可以計算圖像的平移和旋轉關系並解決圖像縮放問題。圖像拼接的另一個分支是基於圖像特徵。1988年Harris提出經典的Harris點檢測演算法,它使用特定的旋轉不變性哈里斯點進行特徵匹配。2004 年,Lowe 提出了一種完美的尺度不變特徵變換演算法(SIFT),對平移、旋轉、尺度縮放、不均勻光照等圖像領域應用最廣泛的技術具有良好的適應性。C Aguerrebere 根據輸入圖像的 SNR 條件給出的問題難度級別顯示不同的行為區域。Wu通過建立模型,將深度學習和進化演算法應用於遙感圖像的拼接,實現概率意義上的全局優化。

圖像融合技術是遙感圖像拼接技術中的另一項核心技術,分為像素級融合、特徵級融合、決策級融合。像素級融合仍然是現階段最常用的圖像融合方法之一。

對於無人機的遙感圖像,存在圖像數量多、光照條件多變等問題。每次拼接過程中的小錯誤都難以避免。隨著圖像數量的增加,誤差不斷累積,圖像拼接後期會出現圖像失真和重影。S Bang 創建高質量全景圖,過濾掉視頻的模糊幀,選擇關鍵幀,並校正相機鏡頭失真。Zhang 提出了基於 STIF 的 GA-SIFT 並給出了一種自適應閾值方法來解決計算量大和拼接時間長的問題。李明基於動態規劃解決無人機側視問題尋找最佳接縫線。然而,當圖像數量逐漸增加時,現有的拼接演算法存在誤差累積。

也有一些基於網格變形的圖像拼接演算法,但計算量太大。在本文中,圖像被匹配兩次以過濾特徵點以提高准確度。拼接問題對應於通過坐標系轉換的旋轉角度解,應用高斯-牛頓迭代計算最優旋轉角度。此外,我們練習局部匹配方法以減少錯誤並使用加權融合來實現過度平滑。

SIFT特徵點不僅在空間尺度和旋轉上保持不變,而且在光照和視角變化的條件下,還具有優異的抗干擾能力和良好的穩定性。為了實現空間尺度的不變性,SIFT特徵點可以根據物體遠看小而模糊,反之大而清晰的特點,建立高斯金字塔模型。差分金字塔 (DoG) 是通過計算金字塔中相鄰兩層圖像之間的差異來獲得的。使用函數擬合在 DOG 空間中測試極值。通過對確定場中基於SIFT特徵點的梯度信息進行統計,選擇加權幅度最大的梯度方向作為主梯度方向。通過將特徵點與其主梯度方向相關聯,可以解決圖像特徵點的旋轉不變性問題。最後,利用特徵點周圍像素的信息建立一個128維的向量作為特徵點的描述符。

提取特徵點後,需要對兩幅圖像的特徵點進行匹配。通過特徵點成對匹配,可以計算出兩個特徵點對應的描述符之間的歐氏距離,選擇歐氏距離最小的點作為匹配點對。為了減少不匹配的發生率, 被用作正確匹配的閾值。具有大於 的描述符歐幾里得距離的匹配點對被消除。

RANSAC 是特徵點匹配中最常用的方法之一。它首先從匹配結果中隨機選擇四對特徵點並計算單應矩陣。其次,根據上一步得到的單應矩陣,計算第一幅圖像在第二幅圖像中的重投影坐標,並計算該坐標與第二幅圖像中匹配點對坐標的距離。通過設置距離閾值記錄所有匹配點對中正確匹配特徵點對的個數。重復上面的過程,最終留下與最多點對數的正確匹配。

高斯-牛頓迭代是求解非線性最小二乘優化問題的演算法之一,可以描述為:

我們選擇一個初始值,然後不斷更新當前優化變數以減小目標函數值。高斯-牛頓迭代的主要思想是對函數 進行一階泰勒展開,計算 及其雅可比矩陣 對應的函數值。使用 和 計算 的增量,直到 足夠小。

加權平均法是圖像融合中簡單有效的方法之一。第一幅圖像和第二幅圖像重疊區域的像素值由兩幅圖像像素的加權求和得到,表示為:

其中:越接近 img1, 的值越大。 的值從1逐漸變為0,重疊區域從第一幅圖像逐漸過渡到第二幅圖像,從而實現畫面的平滑過渡。照片的加權平均融合因其直觀的簡單性和快速的運行速度而被廣泛使用和圖像拼接。

對於兩幅圖像的拼接,由於無人機的遙感相機通常安裝在一個穩定的平台上,通過選擇合適的坐標系,將圖像對齊問題轉化為單幅圖像旋轉問題,如圖1所示。

此外,大多數具有相關高光頻的常用相機通常在連續幀之間具有較大的重疊區域。因此,在圖像拼接過程中,第 幅圖像在全局位置上的投影關系,不僅受第 幅圖像的影響,還與 圖像相關。為了保證圖像變形的一致性,首先將 張圖像拼接在一起,然後將結果整合到整幅圖像中。大量的實驗測試證明,當i設置為3時效果最佳。整個過程如圖圖2。

圖像中的特徵點有很多種,本文使用最常見的SIFT特徵點。我們提取並匹配兩張輸入圖像的特徵點,結果如下所示。

特徵點的匹配精度直接影響旋轉角度的計算,因此使用前必須對特徵點對進行過濾。鑒於過濾特徵點的方法很多,本文先將左圖與右圖進行匹配,再將右圖與左圖進行匹配。兩次相同結果配對的匹配點將被保留。在此基礎上,使用RANSAC方法對結果進行優化,成功匹配了上圖中的121個特徵點。

從無人機拍攝的兩張照片之間通常存在旋轉和平移。為了獨立優化旋轉角度,我們首先建立如圖 5所示的坐標系。

以圖像匹配成功的特徵點坐標值的平均值作為該坐標的原點,坐標軸與像素坐標系的兩個坐標軸平行。根據公式(3),特徵點從圖像坐標系轉換為圖像旋轉坐標系:

其中 為濾波後的特徵對的總數, 為特徵點在原始圖像坐標系中的坐標值,並且 是新的值。

在計算圖像的旋轉角度之前,我們首先需要分析圖像的縮放比例。由飛行高度引起的尺寸變化將在軸上具有相同的縮放比例。因此,根據所有特徵點與圖像旋轉坐標系原點的歐氏距離比,可以計算出兩幅圖像之間的縮放比例,對圖像進行縮放和改變。

圖像縮放後,計算圖像旋轉的角度。高斯牛頓迭代的方式計算旋轉角度的最優解。首先設置目標函數:

通過迭代選擇最優的 使得:

使用誤差函數 的泰勒展開進行迭代。

其中

根據

我們可以發現增量值 每次迭代。最終,當我們計算出的 滿足條件時,停止迭代過程。可以使用最佳旋轉角度和旋轉中心來求解圖像的變換矩陣。

由於拍攝圖像時光線不均勻,連續兩張圖像之間可能存在一些顏色差異。此外,圖像旋轉不可避免地存在小誤差,因此我們練習線性加權融合以消除兩幅圖像之間的拼接線和色度變化。圖像的重疊是按距離加權的,這樣拼接結果自然是從img1到img2過度了。

我們利用OpenCV的功能從遙感圖像中提取SIFT特徵點並進行匹配。從Stitch拼接功能、基於透視變化的圖像拼接結果以及本文的拼接速度的對比可以看出,本文採用的方法具有一定的優越性。

從表1數據可以看出,在拼接少量圖像時,三種演算法的拼接結果相似,沒有出現明顯的拼接誤差。但是,Stitcher 演算法比其他兩種拼接方法花費的時間要多得多。

圖 11很明顯,隨著圖像數量的增加,基於透視變換的圖像拼接演算法出現了嚴重的失配。然而,本文採用的方法取得了比較滿意的結果,因為在無人機拍攝的圖像中,地面上的所有特徵都可以近似地視為在同一平面上。根據透視變換,無人機的遠近抖動會引入圖像拼接導致錯誤。圖像數量的不斷增加會導致錯誤的積累,從而導致嚴重的失配。另外,這使得程序中斷,從而無法完成所有60幅圖像的拼接。假設同一平面上圖片的仿射變化會更符合無人機遙感圖像的實際情況。最後,可以通過線性加權融合來解決誤差問題,以提高拼接效果。考慮到stitch演算法耗時過長,本文不會對兩者進行比較。

在上面的圖 12 中,使用 100 張圖像來測試本文中的方法。圖像的仿射變換是通過計算圍繞圖像特徵點中心的旋轉角度來進行的。變換後的圖像採用線性加權融合後,可以得到大量圖像數據處理後的結果。拼接自然,符合人類視覺體驗。

我們在網路上跑了一組數據,結果如下。

鑒於以上實驗結果,該方法具有一定的抗干擾能力,可以高速運行。與高度集成的Stitcher和基於透視變換的圖像拼接結果相比,我們可以發現,基於透視變化的圖像拼接結果隨著圖像數量的增加而逐漸變差。然而,盡管拼接效果很好,但 Stitcher 需要更長的處理時間。

在本文中,我們研究了無人機遙感圖像的拼接技術,主要貢獻可以總結如下:

通過實驗結果可以看出,本文提出的方法比現有方法具有更好的實時性,對於相機平面與成像平面平行的情況具有更好的拼接效果。

9. AANAP:自適應盡可能自然的圖像拼接

圖像拼接的目標是創建看起來自然的馬賽克,沒有因相對相機運動、照明變化和光學像差而可能出現的偽影。在本文中,我們提出了一種新穎的拼接方法,該方法在整個目標圖像上使用平滑拼接場,同時考慮到所有局部變換變化。計算扭曲是完全自動化的,並使用局部單應性和全局相似性變換的組合,兩者都是相對於目標估計的。我們通過線性化單應性並慢慢將其更改為全局相似性來減輕非重疊區域中的透視失真。所提出的方法很容易推廣到多幅圖像,並允許自動獲得全景中的最佳視角。它對參數選擇也更加穩健,因此與最先進的方法相比更加自動化。使用各種具有挑戰性的案例證明了所提出方法的好處。

圖像拼接是計算機視覺中古老且廣泛使用的演算法之一。獲得盡可能自然、沒有偽影的圖像馬賽克是非常重要的,盡管解釋全景圖或馬賽克的自然外觀存在主觀性。

早期的方法是估計單應變換,但容易導致錯位和重影。作者提出了一種新方法,該方法結合了多種技術,使全景圖看起來更自然。減輕 As-Projective-As-Possible (APAP) 中發生的透視失真拼接,重疊區域中對應點的子集自動估計全局相似性變換。在重疊區域中的單應性和全局相似性之間進行平滑插值,並在非重疊區域中使用線性化單應性(仿射)和全局相消洞賣似性變換類似地進行外推。兩個拼接場(單應線性化單應性和全局相似性)的平滑組合幫助實現:

目標圖和參考圖分別為 和 ,匹配點對分別為 和 ,由 到 的單應 表示為

在齊次坐標中表示 和 ,單應性可以由 的矩陣 表示。

(5)中的 的矩陣中只有兩行是相互獨立的,對於 對匹配點對, 可以表示為:

其中 和 是(5)中矩陣的前兩行,並且同時限制 保證單應矩陣只有8個自由度。

APAP中作者用局部加權的方式修改(6)式,在 處的的局部單應性可以表示為

重寫為

其中 ,在APAP中權重採用高加權的方式獲取,在靠近 的位置權重大,遠離的位置權重小,即

其中 。

需要注意的是局部單應性只能在參考圖和目標圖重疊的區域計算。非重疊區域的單應變換採用重疊區域的權重的線性組合獲得,因此需要謹慎選擇合適的偏置以防外推偽影。

由於高斯加權的各向同性性質,會導致「波浪」效應,而選擇適當的偏移會導致良好的結果。即使在這種情況下,APAP 的非重疊區域的透視失真也很明顯。本文作者使用拿逗在重疊區域中沒有偏移的移動 DLT 來估計局部單應性,並使用單應性線性化外推到非重疊區域,減少透視失真。

非重疊區域的單應變換會產生極不自然的尺度變化,用1維的透視變換來理解

若用一系列點對估計參數 ,在可用點對范圍之外, 和 也是非線性的。在2維透視變換中扭曲會更加嚴重。

對於圖像,錨點 附近的任意一點 的單應泰勒級數展開可以表示成

其中 為單應 在 點處的雅可比矩陣。

在非重疊區域計算顫友 的 線性化並不容易。而重疊區域和非重疊區域的邊界可能存在多個點,不知道在何處計算雅可比矩陣,因此在邊界將錨點線性化並計算加權平均。

邊界處的一系列錨點 ,線性化的加權組合表示為

為高斯權重 或Student權重 ,由於Student分布尾部衰減更慢,當q遠離錨定點時,所有錨定點都被賦予類似的加權,表現更加魯棒。

使用所有點匹配查找全局相似性變換可能會導致非最優解,特別是當重疊區域包含不同的圖像平面時。這個問題在下圖中很明顯,它顯示了SPHP的縫合結果。

作者通過以下方式分割對應點來計算參考圖像和目標圖像之間的最佳相似性變換的方法。在獲得特徵點匹配後,首先使用帶有閾值 的RANSAC去除異常值。然後,使用帶有閾值 的 RANSAC 找到具有最大內點的平面的單應性,其中 ,刪除這些內點。重復這個過程,直到內點的數量小於η. 每組匹配的內點用於計算單個相似性變換。然後,檢查對應於變換的旋轉角度並選擇具有最小旋轉角度的旋轉角度。

拼接結果出現不自然的區域用一下方式更新全局相似變換。

其中 為第 個局部單應性, 表示更新後的局部單應性 為全局相似變換, 和 為權重系數,上標 表示目標圖像, 表示參考圖像,限制 ,且都在0~1之間,用下式計算:

其中 為目標圖像扭曲後在 方向上的投影點。 和 分別為目標圖像和參考圖像的中心點。

和 為 的最小和最大值,其中 為最終全景圖的第 個位置。

使用全局相似性變換更新目標圖像的扭曲會導致參考圖像和先前對齊的目標圖像之間的重疊區域不對齊。因此,我們需要通過適當地將變化從目標圖像傳播到參考圖像來補償這些變化。現在可以獲得參考圖像的局部變換,如下所示:

在這項工作中,我們提出了一種新穎的拼接方法,該方法使用從局部單應性或其線性化版本和全局相似變換導出的平滑拼接場。結果表明,我們的方法提供了更自然的全景圖,在重疊區域沒有可見的視差,並減輕了非重疊區域的透視失真問題。此外,它較少依賴於參數的選擇並自動計算適當的全局相似性變換。與現有方法的實驗比較表明,與最先進的方法相比,所提出的方法產生了最好的縫合。未來的研究發展將包括在存在大運動時補償視差,這可以通過將切縫方法集成到該框架中來執行。

閱讀全文

與拼接圖像演算法相關的資料

熱點內容
找漫畫看應該下載什麼app 瀏覽:180
如何在vps上搭建自己的代理伺服器 瀏覽:744
nginxphp埠 瀏覽:403
內臟pdf 瀏覽:152
怎麼看雲伺服器架構 瀏覽:85
我的世界國際服為什麼登不進伺服器 瀏覽:996
微盟程序員老婆 瀏覽:930
intellij創建java 瀏覽:110
java連接odbc 瀏覽:38
啟動修復無法修復電腦命令提示符 瀏覽:359
手機編程是什麼 瀏覽:98
山東移動程序員 瀏覽:163
蘇州java程序員培訓學校 瀏覽:479
單片機液晶驅動 瀏覽:855
魔拆app里能拆到什麼 瀏覽:132
新預演算法的立法理念 瀏覽:144
wdcpphp的路徑 瀏覽:134
單片機p0口電阻 瀏覽:926
瀏覽器中調簡訊文件夾 瀏覽:594
五菱宏光空調壓縮機 瀏覽:70