openCV-特徵點匹配算法介紹一:理解特徵

在正式進入具體應用之前,比如圖像拼接,我們先理解清楚涉及圖像拼接會用到的算法以及openCV實現這些算法的函數等,需要點耐心,這及章節的內容均來自於openCV官方文檔,學完這幾節內容,相信對你後續的應用有很大的幫助。

本文是對官方文檔的翻譯並舉例說明,原文地址:https://docs.opencv.org/3.4.1/df/d54/tutorial_py_features_meaning.html

本章目標

在這個章節,我們將嘗試理解什麼是圖像的特徵,並嘗試回答為什麼圖像特徵非常重要,為什麼查找圖像的角點很重要等問題。

你們大多數人都玩過拼圖遊戲。你會得到很多圖像的小塊,你需要把它們正確地組合起來,形成一個大的真實圖像。問題是,你是怎麼做到的?把同樣的理論投射到電腦程序上,讓電腦玩拼圖遊戲,電腦該怎麼做?如果計算機可以玩拼圖遊戲,為什麼我們不能給計算機提供許多真實的自然美景的圖像,並告訴它把所有這些圖像拼接成一個大的單一圖像呢?如果電腦能把幾張自然圖像拼接到一張上,那是不是可以把建築物或任何結構的大量圖片給電腦,讓電腦從中創建一個三維模型呢?

問題和想象還在繼續。但這一切都取決於這些最基本的問題:你如何玩拼圖遊戲?你如何將許多雜亂的圖像塊排列成一個大的單一圖像?你怎麼能把許多自然的圖像縫合到一個單一的圖像?

答案是,我們很容易通過尋找特定的模式或特定的特性,比較拼圖的相似性來完成遊戲。但如果我們要定義這些特性,我們可能會發現很難用語言來表達它,但是我們知道它們是什麼。如果有人讓你指出一個或多個圖像中的特性,你可以很快指出至少一個。這就是為什麼即使是小孩子也能簡單地玩這些遊戲。我們在一張圖片中搜索這些特徵,找到它們,在其他圖片中尋找相同的特徵並將它們對齊。就是這樣。(在拼圖遊戲中,我們更關注不同圖像的連續性)。所有這些能力都是與生俱來的。

所以,我們把上面的基本問題延申出更具體的問題,就是這些特性是什麼?(答案對電腦來說也應該是可以理解的。),很難說人類是如何發現這些特徵的。這已經在我們的大腦中編程了。但是如果我們深入研究一些圖片,尋找不同的圖案,我們會發現一些有趣的東西。例如,如下圖所示:

openCV-特徵點匹配算法介紹一:理解特徵

圖像非常簡單。在圖像的頂部,給出了六個小圖像塊。你的任務是找到這些補丁在原始圖像中的確切位置。你能找到多少個正確的結果?A和B是平面,它們分佈在很多區域。很難找到這些補丁的確切位置。C和D要簡單得多。它們是建築物的邊緣。你可以找到一個大致的位置,但準確的位置仍然是困難的。這是因為沿邊緣的所有地方的模式都是相同的。然而,在邊緣,它是不同的。因此,與平面區域相比,邊緣是更好的特徵,但還不夠好(在拼圖遊戲中,邊緣的連續性比較好)。最後,E和F是建築的一些角落。而且很容易找到。因為在角落裡,無論你移動這個補丁,它看起來都不一樣。所以它們可以被認為是好的特性。

因此,現在我們轉向更簡單(和廣泛使用的圖像)以便更好地理解。如下圖:

openCV-特徵點匹配算法介紹一:理解特徵

就像上面一樣,藍色方框的區域是平坦而均勻的,很難找到和跟蹤。無論你把藍色的補丁移到哪裡,它看起來都是一樣的。黑色方框的區域有一條邊。如果你在垂直方向移動它,它就會改變。沿著邊緣移動(平行於邊緣),它看起來是一樣的。對於紅色方框區域,它是一個角。無論你移動補丁到哪裡,它看起來都不一樣,這意味著它是獨一無二的。基本上,角被認為是圖像中很好的特徵。(不只是角,在某些情況下,blob(斑塊)被認為是很好的特性)。

現在我們回答了這個問題,“這些特徵是什麼?” 但下一個問題出現了。我們怎麼找到他們?或者我們怎麼找到角?我們用直觀的方式回答了這個問題。在圖像中尋找那些在移動時(少量移動)周圍所有區域變化最大的區域。這將在接下來的章節中被投射到計算機語言中,而找到這些圖像特徵的過程就叫做特徵檢測。

我們在圖像中找到了特徵。一旦你找到了它,你應該能夠在其他圖片中找到相同的。這是怎麼做到的?我們取一個特徵周圍的區域,用我們自己的話來解釋,比如“上方是藍天,下方是建築的區域,建築上有玻璃等等”,然後在其他圖片中搜索相同的區域。基本上,您是在描述特性。同樣,計算機也應該描述特徵周圍的區域,以便在其他圖像中找到它。所謂的描述就是特徵描述。一旦你有了特徵和它的描述,你就可以在所有的圖像中找到相同的特徵,然後對齊它們,把它們縫在一起,或者做任何你想做的事情。

因此,在本模塊中,我們將在OpenCV中尋找不同的算法來尋找特徵,描述它們,匹配它們等等。


分享到:


相關文章: