當前位置:首頁 » 編程語言 » pythonsift

pythonsift

發布時間: 2024-01-14 23:45:00

㈠ OpenCV-python之——圖像SIFT特徵提取

在一定的范圍內,無論物體是大還是小,人眼都可以分辨出來。然而計算機要有相同的能力卻不是那麼的容易,在未知的場景中,計算機視覺並不能提供物體的尺度大小,其中的一種方法是把物體不同尺度下的圖像都提供給機器,讓機器能夠對物體在不同的尺度下有一個統一的認知。在建立統一認知的過程中,要考慮的就是在圖像在不同的尺度下都存在的特徵點。

在早期圖像的多尺度通常使用圖像金字塔表示形式。圖像金字塔是同一圖像在不同的解析度下得到的一組結果其生成過程一般包括兩個步驟:

多解析度的圖像金字塔雖然生成簡單,但其本質是降采樣,圖像的局部特徵則難以保持,也就是無法保持特徵的尺度不變性。

我們還可以通過圖像的模糊程度來模擬人在距離物體由遠到近時物體在視網膜上成像過程,距離物體越近其尺寸越大圖像也越模糊,這就是高斯尺度空間,使用不同的參數模糊圖像(解析度不變),是尺度空間的另一種表現形式。

構建尺度空間的目的是為了檢測出在不同的尺度下都存在的特徵點,而檢測特徵點較好的運算元是Δ^2G(高斯拉普拉斯,LoG)
使用LoG雖然能較好的檢測到圖像中的特徵點,但是其運算量過大,通常可使用DoG(差分高斯,Difference of Gaussina)來近似計算LoG。

從上式可以知道,將相鄰的兩個高斯空間的圖像相減就得到了DoG的響應圖像。為了得到DoG圖像,先要構建高斯尺度空間,而高斯的尺度空間可以在圖像金字塔降采樣的基礎上加上高斯濾波得到,也就是對圖像金字塔的每層圖像使用不同的參數σ進行高斯模糊,使每層金字塔有多張高斯模糊過的圖像。
如下圖,octave間是降采樣關系,且octave(i+1)的第一張(從下往上數)圖像是由octave(i)中德倒數第三張圖像降采樣得到。octave內的圖像大小一樣,只是高斯模糊使用的尺度參數不同。

對於一幅圖像,建立其在不同尺度scale下的圖像,也稱為octave,這是為了scale-invariant,也就是在任何尺度都能有對應的特徵點。下圖中右側的DoG就是我們構建的尺度空間。

為了尋找尺度空間的極值點,每一個采樣點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。如圖所示,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應的9×2個點共26個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。 一個點如果在DOG尺度空間本層以及上下兩層的26個領域中是最大或最小值時,就認為該點是圖像在該尺度下的一個特徵點。下圖中將叉號點要比較的26個點都標為了綠色。

找到所有特徵點後, 要去除低對比度和不穩定的邊緣效應的點 ,留下具有代表性的關鍵點(比如,正方形旋轉後變為菱形,如果用邊緣做識別,4條邊就完全不一樣,就會錯誤;如果用角點識別,則穩定一些)。去除這些點的好處是增強匹配的抗噪能力和穩定性。最後,對離散的點做曲線擬合,得到精確的關鍵點的位置和尺度信息。

近來不斷有人改進,其中最著名的有 SURF(計算量小,運算速度快,提取的特徵點幾乎與SIFT相同)和 CSIFT(彩色尺度特徵不變變換,顧名思義,可以解決基於彩色圖像的SIFT問題)。

其中sift.detectAndCompute()函數返回kp,des。

上圖dog的shape為(481, 500, 3),提取的特徵向量des的shape為(501, 128),501個128維的特徵點。

該方法可以在特徵點處繪制一個小圓圈。

https://blog.csdn.net/happyer88/article/details/45817305
https://www.jianshu.com/p/d94e558ebe26
https://www.cnblogs.com/wangguchangqing/p/4853263.html

㈡ 求一份計算機本科的畢業設計,題目只要計算機類的就可以

計算機畢業設計
基於Python的SIFT和KCF的運動目標匹配與跟蹤 畢業論文+項目源碼
基於Python決策樹演算法的學生學習行為數據分析 設計報告+代碼及數據
基於Sring+bootstrap+Mysql的住房公積金管理系統 課程報告+項目源碼及資料庫文件
基於C++的即時通信軟體設計 畢業論文+項目源碼
基於javaWeb+MySQL的圖書管理系統 課程報告+項目源碼及資料庫文件
基於Android Studio+Android SDK的手機通訊錄管理軟體設計 課程報告+項目源碼
基於JSP+MySQL的校園網上訂餐系統 畢業論文+項目源碼及資料庫文件
基於AndroidStudio的花藝分享平台APP設計 報告+源碼及APK文件
基於Python的酒店評論情感分析 課程報告+答辯PPT+項目源碼
基於QT的教務選課管理系統設計與實現 畢業論文+項目源碼
基於Android+Springboot+Mybatis+Mysql的個人生活APP設計 說明書+項目源碼
基於Vue.js+Go的Web3D宇宙空間數據可視化系統 設計報告+前後端源碼及數據
基於java+android+SQLite的保健型果飲在線銷售APP設計 畢業論文+源碼資料庫及APK文件
基於Vue.js+SpringBoot+MyBatis+MySQL的高校綜合資源發布分享社交二手平台 畢業論文+項目源碼及資料庫文件+演示視頻
基於Delphi+MySQL的大學生競賽發布及組隊系統 設計報告+源碼資料庫及可執行文件+使用說明書
基於Android的名片信息管理系統設計與實現 畢業論文+任務書+外文翻譯及原文+演示視頻+項目源碼
基於Python的電影數據可視化分析系統 設計報告+答辯PPT+項目源碼
基於JavaWeb的企業公司管理系統設計與實現 畢業論文+答辯PPT+演示視頻+項目源碼
高校成績管理資料庫系統的設計與實現 畢業論文+項目源碼
基於JavaWeb的家庭食譜管理系統設計與實現 畢業論文+項目源碼及資料庫文件
基於Python+SQLSERVER的快遞業務管理系統的設計與實現 畢業論文+項目源碼及資料庫文件
基於Python的語音詞頻提取雲平台 設計報告+設計源碼
在推薦系統中引入 Serendipity 的演算法研究 畢業論文+參考文獻+項目源碼
基於Html+Python+Django+Sqlite的機票預訂系統 畢業論文+項目源碼及資料庫文件
基於Python的卷積神經網路的貓狗圖像識別系統 課程報告+項目源碼
基於C++的雲安全主動防禦系統客戶端服務端設計 畢業論文+項目源碼
基於JavaSSM的學生成績管理APP系統設計與實現 畢業論文+答辯PPT+前後台源碼及APK文件
基於JavaSwing+MySQL的清朝古代名人數據管理系統設計 畢業論文+任務書+項目源碼及資料庫文件
基於Python_Django的社會實踐活動管理系統設計與實現 畢業論文
基於Servlet WebSocket MySQL實現的網路在線考試系統 畢業論文+項目源碼
基於JavaWEB+MySQL的學生成績綜合管理系統 畢業論文+項目源碼及資料庫文件
基於SpringBoot+Vue和MySQL+Redis的網路課程平台設計與實現 畢業論文+任務書+開題報告+中期報告+初稿+前後台項目源碼
基於Java的畢業設計題目收集系統 課程報告+項目源碼
基於Java+Python+html的生產者與消費者演算法模擬 畢業論文+任務書+項目源碼
基於JavaWeb+MySQL的學院黨費繳費系統 畢業論文+項目源碼及資料庫文件
基於Java+MySQL的學生成績管理系統 畢業論文+任務書+答辯PPT+項目源碼及資料庫文件
基於Java+MySQL的學生和客戶信息管理系統 課程報告+項目源碼及資料庫文件
基於Java的長整數加減法演算法設計 畢業論文+項目源碼
基於vue+MySQL的畢業設計網上選題系統 畢業論文+項目源碼
基於背景建模和FasterR-CNN的視頻前景和目標檢測 畢業論文+答辯PPT+項目源碼
基於Python的智能視頻分析之人數統計的多種實現 畢業論文+答辯PPT+項目源碼
基於C#+SQL server的校園卡消費信息管理系統 畢業論文+項目源碼及資料庫文件

㈢ python哪個版本opencv可以直接調用sift

這幾天繼續在看Lowe大神的SIFT神作,看的眼花手腳抽筋。也是醉了!!!!實在看不下去,來點干貨。我們知道opencv下自帶SIFT特徵檢測以及MATCH匹配的庫,這些庫完全可以讓我們進行傻瓜似的操作。但實際用起來的時候還不是那麼簡單。下文將對一個典型的基於OPENCV的SIFT特徵點提取以及匹配的常式進行分析,並由此分析詳細的對OPENCV中SIFT演算法的使用進行一個介紹。

OPENCV下SIFT特徵點提取與匹配的大致流程如下:

讀取圖片-》特徵點檢測(位置,角度,層)-》特徵點描述的提取(16*8維的特徵向量)-》匹配-》顯示

其中,特徵點提取主要有兩個步驟,見上行黃子部分。下面做具體分析。

1、使用opencv內置的庫讀取兩幅圖片

2、生成一個SiftFeatureDetector的對象,這個對象顧名思義就是SIFT特徵的探測器,用它來探測衣服圖片中SIFT點的特徵,存到一個KeyPoint類型的vector中。這里有必要說keypoint的數據結構,涉及內容較多,具體分析查看opencv中keypoint數據結構分析,裡面講的自認為講的還算詳細(表打我……)。簡而言之最重要的一點在於:

keypoint只是保存了opencv的sift庫檢測到的特徵點的一些基本信息,但sift所提取出來的特徵向量其實不是在這個裡面,特徵向量通過SiftDescriptorExtractor 提取,結果放在一個Mat的數據結構中。這個數據結構才真正保存了該特徵點所對應的特徵向量。具體見後文對SiftDescriptorExtractor 所生成的對象的詳解。

就因為這點沒有理解明白耽誤了一上午的時間。哭死!

3、對圖像所有KEYPOINT提取其特徵向量:

得到keypoint只是達到了關鍵點的位置,方向等信息,並無該特徵點的特徵向量,要想提取得到特徵向量就還要進行SiftDescriptorExtractor 的工作,建立了SiftDescriptorExtractor 對象後,通過該對象,對之前SIFT產生的特徵點進行遍歷,找到該特徵點所對應的128維特徵向量。具體方法參見opencv中SiftDescriptorExtractor所做的SIFT特徵向量提取工作簡單分析。通過這一步後,所有keypoint關鍵點的特徵向量被保存到了一個MAT的數據結構中,作為特徵。

4、對兩幅圖的特徵向量進行匹配,得到匹配值。

兩幅圖片的特徵向量被提取出來後,我們就可以使用BruteForceMatcher對象對兩幅圖片的descriptor進行匹配,得到匹配的結果到matches中,這其中具體的匹配方法暫沒細看,過段時間補上。

至此,SIFT從特徵點的探測到最後的匹配都已經完成,雖然匹配部分不甚了解,只掃對於如何使用OPENCV進行sift特徵的提取有了一定的理解。接下來可以開始進行下一步的工作了。

附:使用OPENCV下SIFT庫做圖像匹配的常式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// opencv_empty_proj.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/features2d/features2d.hpp>
#include<opencv2/nonfree/nonfree.hpp>
#include<opencv2/legacy/legacy.hpp>
#include<vector>
using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
const char* imagename = "img.jpg";

//從文件中讀入圖像
Mat img = imread(imagename);
Mat img2=imread("img2.jpg");

//如果讀入圖像失敗
if(img.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
if(img2.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
//顯示圖像
imshow("image before", img);
imshow("image2 before",img2);

//sift特徵檢測
SiftFeatureDetector siftdtc;
vector<KeyPoint>kp1,kp2;

siftdtc.detect(img,kp1);
Mat outimg1;
drawKeypoints(img,kp1,outimg1);
imshow("image1 keypoints",outimg1);
KeyPoint kp;

vector<KeyPoint>::iterator itvc;
for(itvc=kp1.begin();itvc!=kp1.end();itvc++)
{
cout<<"angle:"<<itvc->angle<<"\t"<<itvc->class_id<<"\t"<<itvc->octave<<"\t"<<itvc->pt<<"\t"<<itvc->response<<endl;
}

siftdtc.detect(img2,kp2);
Mat outimg2;
drawKeypoints(img2,kp2,outimg2);
imshow("image2 keypoints",outimg2);

SiftDescriptorExtractor extractor;
Mat descriptor1,descriptor2;
BruteForceMatcher<L2<float>> matcher;
vector<DMatch> matches;
Mat img_matches;
extractor.compute(img,kp1,descriptor1);
extractor.compute(img2,kp2,descriptor2);

imshow("desc",descriptor1);
cout<<endl<<descriptor1<<endl;
matcher.match(descriptor1,descriptor2,matches);

drawMatches(img,kp1,img2,kp2,matches,img_matches);
imshow("matches",img_matches);

//此函數等待按鍵,按鍵盤任意鍵就返回
waitKey();
return 0;
}

㈣ OpenCV+Python特徵提取演算法與圖像描述符之SIFT / SURF / ORB

演算法效果比較博文

用於表示和量化圖像的數字列表,簡單理解成將圖片轉化為一個數字列表表示。特徵向量中用來描述圖片的各種屬性的向量稱為特徵矢量。

參考
是一種演算法和方法,輸入1個圖像,返回多個特徵向量(主要用來處理圖像的局部,往往會把多個特徵向量組成一個一維的向量)。主要用於圖像匹配(視覺檢測),匹配圖像中的物品。

SIFT論文
原理
opencv官網解釋
實質是在不同的尺度空間上查找關鍵點(特徵點),並計算出關鍵點的方向。SIFT所查找到的關鍵點是一些十分突出,不會因光照,仿射變換和噪音等因素而變化的點,如角點、邊緣點、暗區的亮點及亮區的暗點等。

尺度不變特徵轉換(Scale-invariant feature transform或SIFT)是一種電腦視覺的演算法用來偵測與描述影像中的局部性特徵,它在空間尺度中尋找極值點,並提取出其位置、尺度、旋轉不變數。
其應用范圍包含物體辨識、機器人地圖感知與導航、影像縫合、3D模型建立、手勢辨識、影像追蹤和動作比對。

對現實中物體的描述一定要在一個十分重要的前提下進行,這個前提就是對自然界建模時的尺度。當用一個機器視覺系統分析未知場景時,計算機沒有辦法預先知道圖像中物體的尺度,因此我們需要同時考慮圖像在多尺度下的描述,獲知感興趣物體的最佳尺度。圖像的尺度空間表達指的是圖像的所有尺度下的描述。

KeyPoint數據結構解析

SURF論文
原理
opencv官網解釋
SURF是SIFT的加速版,它善於處理具有模糊和旋轉的圖像,但是不善於處理視角變化和光照變化。在SIFT中使用DoG對LoG進行近似,而在SURF中使用盒子濾波器對LoG進行近似,這樣就可以使用積分圖像了(計算圖像中某個窗口內所有像素和時,計算量的大小與窗口大小無關)。總之,SURF最大的特點在於採用了Haar特徵以及積分圖像的概念,大大加快了程序的運行效率。

因為專利原因,OpenCV3.3開始不再免費開放SIFT\SURF,需要免費的請使用ORB演算法

ORB演算法綜合了FAST角點檢測演算法和BRIEFF描述符。

演算法原理
opencv官方文檔
FAST只是一種特徵點檢測演算法,並不涉及特徵點的特徵描述。

論文
opencv官方文檔
中文版
Brief是Binary Robust Independent Elementary Features的縮寫。這個特徵描述子是由EPFL的Calonder在ECCV2010上提出的。主要思路就是在特徵點附近隨機選取若干點對,將這些點對的灰度值的大小,組合成一個二進制串,並將這個二進制串作為該特徵點的特徵描述子。文章同樣提到,在此之前,需要選取合適的gaussian kernel對圖像做平滑處理。

1:不具備旋轉不變性。
2:對雜訊敏感
3:不具備尺度不變性。

ORB論文
OpenCV官方文檔

ORB採用了FAST作為特徵點檢測運算元,特徵點的主方向是通過矩(moment)計算而來解決了BRIEF不具備旋轉不變性的問題。
ORB還做了這樣的改進,不再使用pixel-pair,而是使用9×9的patch-pair,也就是說,對比patch的像素值之和,解決了BRIEF對雜訊敏感的問題。
關於計算速度:
ORB是sift的100倍,是surf的10倍。

對圖片數據、特徵分布的一種統計
對數據空間(bin)進行量化

Kmeans

邊緣:尺度問題->不同的標准差 捕捉到不同尺度的邊緣
斑點 Blob:二階高斯導數濾波LoG

關鍵點(keypoint):不同視角圖片之間的映射,圖片配准、拼接、運動跟蹤、物體識別、機器人導航、3D重建

SIFT\SURF

熱點內容
不支持的壓縮演算法 發布:2024-11-30 00:44:54 瀏覽:901
機加工的編程 發布:2024-11-30 00:31:19 瀏覽:727
坦克世界電腦什麼配置 發布:2024-11-30 00:30:41 瀏覽:317
如何在手機設置上找到網路的密碼 發布:2024-11-30 00:18:29 瀏覽:414
和鷹加密鎖 發布:2024-11-30 00:17:17 瀏覽:556
C語言舞會 發布:2024-11-30 00:15:44 瀏覽:377
java下載我的世界 發布:2024-11-30 00:11:08 瀏覽:12
華三配置器升級失敗怎麼回事 發布:2024-11-30 00:09:23 瀏覽:842
汽車空調壓縮機壽命 發布:2024-11-30 00:06:04 瀏覽:567
電腦網路波動異常與伺服器失去連接 發布:2024-11-29 23:43:19 瀏覽:247