1. 程式人生 > >VLfeat學習(1)——Covariant feature detectors(協變特徵檢測器)

VLfeat學習(1)——Covariant feature detectors(協變特徵檢測器)

VLfeat是一個開源BSD的輕量級的計算機視覺庫演算法,主要實現了SIFT、MSER、K-means、hierarchical、agglomerative information bottleneck,quick shift等演算法,採用C語言編寫而成,提供了MATLAB介面,文件詳細,且支援跨平臺,對於分類和識別特別有用。

首先介紹vl_covdet命令,該命令實現了許多共變數特徵檢測器和相應的描述子。

1、DoG檢測器

示例程式碼:

% 載入圖片
im = vl_impattern('roofs1');
% 顯示載入的圖片
figure(1); 
% 清楚視窗上的舊圖片
clf;
image(im); axis image off;
% 將影象轉換為灰度空間和單精度, 然後呼叫vl_covdet以提取特徵(預設情況下,它使用DoG角度測量,類似於SIFT)
imgs = im2single(rgb2gray(im));
frames = vl_covdet(imgs, 'verbose');
% vl_plotframe:用於顯示提取到的特徵
hold on;
vl_plotframe(frames);

原圖:

執行結果:

verbose選項不是必需的,但是它可以提供下面這些資訊。

vl_covdet: doubling image: yes

vl_covdet: octave_resolution: 3

vl_covdet: num_octaves: -1

vl_covdet: max_num_orientations: 4

vl_covdet: detector: DoG

vl_covdet: peak threshold: 0.01, edge threshold: 10

vl_covdet: 87 features suppressed as duplicate (threshold: 0.5)

vl_covdet: detected 3409 features

vl_covdet: kept 3362 inside the boundary margin (2)

2、除了DoG檢測器之外,vl_covdet還支援許多其他檢測器:

The Difference of Gaussian operator(也稱為Hessian運算元或拉普拉斯運算元的軌跡)使用多尺度拉普拉斯運算元的區域性極值軌跡來檢測尺度和空間中的特徵(如SIFT中所示)。

Hessian運算元使用Hessian運算元的多尺度行列式的區域性極值。

Hessian Laplace檢測器使用Hessian運算元的多尺度行列式的極值來進行空間定位,並使用多尺度拉普拉斯運算元的極值進行尺度定位。

Harris Laplace使用多尺度Harris角度測量而不是Hessian的行列式來定位空間,並且在其他方​​面與之前的探測器相同。

Hessian Multiscale通過使用Hessian運算元的多尺度行列式來檢測多個尺度的空間特徵,但不會嘗試估計它們的尺度。

Harris Multiscale與前一個類似,但使用的是多尺度Harris測量。

例如:HarrisLaplace

將frames = vl_covdet(imgs, 'verbose');替換為frames = vl_covdet(imgs, 'method',‘HarrisLaplace’);即可

3、特徵框架的幾何含義:

由vl_covdet計算的特徵是定向矩形,由平移(transaction )TT和線性圖(linear map)AA(a 2x2)定義,可以如下提取:

T=frame(1:2);

A = reshape(frame(3:6), 2,2);

map(A,T)將畫素從特徵幀(也稱為歸一化補丁域)移動到影象幀,該特徵表示為以特徵參考系中的原點為中心的單位半徑的圓,並且通過(A, T)將其轉換為影象橢圓。

在範圍方面,標準化的補丁域是以原點為中心的方框,而影象域使用標準MATLAB約定並從(1,1)開始,Y軸向下,X軸向右,這些概念在規範化補丁和描述符的計算中很重要。

4、仿射適應(Affine adaptation)

仿射適應是估計影象區域的仿射形狀以便構建仿射共變特徵幀的過程,這對於校正傾斜影象的變形是有用的:例如出現小的透視畸變,開啟仿射適應的程式碼:

frames = vl_covdet(imgs,'EstimateAffineShape',true);

結果:

5、特徵方向(Feature orientation)

到目前所討論的檢測方法是旋轉不變的,這意味著無論影象旋轉如何,他們都會檢測到相同的圓形或者橢圓形區域,但它們不允許固定和標準化特徵框架中的旋轉。預設情況下估計特徵是直立的(這意味著仿射變換(A,T)將垂直軸(0,1)對映到自身)。為了計算旋轉不變描述符,需要去除特徵框架的旋轉效果,可以通過指定EstimateOrientation選項實現:

frames = vl_covdet(imgs, "EstimateOrientation", true, 'verbose');