sift特徵提取 Kmean SVM分類

2021-08-20 12:56:31 字數 2176 閱讀 3625

新手上路,從頭講起

1、工具

原版**:

vlfeat工具:

這兩個工具都可以進行sift特徵提取以及匹配。我使用的是vlfeat工具箱,使用環境為win10,matlab。

將壓縮包放到任意資料夾下並解壓,得到檔案:

在matlab中開啟解壓後的資料夾,進入toolbox子資料夾,如紅色框;然後雙擊開啟vl_setup.m指令碼,如藍色框。

執行vl_setup.m**。

2、sift特徵提取

image=imread('1.jpg'); %讀取,此處讀取為rgb

i = single(rgb2gray(image)); %函式傳入格式固定為二維影象的single或者double型別,因此此處轉為灰度,並改資料格式為single

i=(i-min(min(i))+1)/(max(max(i))-min(min(i))+1); %因為single格式需要資料範圍為0~1時才可以正常顯示,因此在這裡調整一次資料大小,方便顯示。

%實際上上一步的i轉為single格式之後就可以了,有無這一步的操作並不會影響特徵提取。

[f,d] = vl_dsift(i) ; %特徵提取,得到的f是乙個2*n的矩陣,每一列是乙個座標;d是特徵資料,是乙個128*n的矩陣,每列是乙個特徵。

3、    k-mean

x=;

for i=1:sizepic %迴圈乙個所有

name=piclist(i).name;

feature=load(name); %讀取之前儲存的每張的特徵矩陣的*.mat檔案

d=vertcat(feature.d); %因為之間儲存的時候將f和d都儲存了,所以需要從feature結構體中讀取矩陣d

xpos=[xpos,d]; %將矩陣簡單的疊加起來,這裡每一列是乙個keypoint,所以把矩陣橫向疊加

endxpos=double(xpos); %由於kmean的函式要求資料格式為single或者double,因此這裡將矩陣的資料格式轉換為double

[cp, ap] = vl_kmeans(xpos, 50, 'verbose', 'distance', 'l1', 'algorithm', 'elkan'); %kmean聚類,具體函式詳解檢視vlfeat文件啊

4、將每一張的特徵放入k-mean聚類中心中轉換

name=list(i).name;

image=imread(name);

i = single(rgb2gray(image)) ;

i=(i-min(min(i))+1)/(max(max(i))-min(min(i))+1);

[f,d] = vl_dsift(i) ; % sift

featvec=zeros(1,50);

for j=1:size(d,2)

fi = double(d(:,j));

diffmat = repmat(fi, 1,50) - cp;

sqsum = sum(diffmat.^2,1);

dist = sqrt(sqsum);

[val,idx]=min(dist);

featvec(1,idx) = 1+ featvec(1,idx) ;

endfeature(count,:)=[featvec,1]; % 將特徵和標籤一起放入特徵集合

count=count+1;

5、分類模型

6、分類測試

lab = module.predictfcn(featvec); #傳入與訓練模型一致的50維特徵進行分類
其他參考**鏈結

博主的**是python**,很詳細。

博主很詳細的講解了sift+kmean+svm的演算法思想,博主的**裡面的東西在部落格當中基本已經講解清楚了,除了乙個不同數量聚類中心的對比試驗在**中詳細講解,其他都講完了。

SIFT特徵提取

原文獻 1 lowe d g.distinctive image features from scale invariant keypoints c international journal of computer vision.2004 91 110.不錯的部落格 2 sift可以用來提取區域性...

SIFT特徵提取分析

sift scale invariant feature transform 是一種檢測區域性特徵的演算法,該演算法通過求一幅圖中的特徵點 interest points,or corner points 及其有關scale 和 orientation 的描述子得到特徵並進行影象特徵點匹配,獲得了良...

Sift特徵提取演算法

2004 年d.lowe 提出了乙個新的演算法 尺度不變特徵變換 sift 這個演算法可以幫助我們提取影象中的關鍵點並計算它們的描述符。sift演算法的特點就是,對於區域性特徵對旋轉 縮放 亮度變化保持不變。sift 演算法主要內容如下 1 尺度空間的極值檢測 2 特徵點定位 3 特徵方向賦值 4 ...