影象金字塔(pyramid)與 SIFT 影象特徵提取(feature extractor)
0. 影象金字塔變換(matlab)
matlab 對影象金字塔變換介面的支援(impyramid
),十分簡單好用。
其支援在reduce
和expand
兩種方式的變換,分別是成比例的縮小和放大。
% 載入影象資料到記憶體
I = imread('cameraman.tif'); size(I)
% reduce ==> {2, 4, 8}
I1 = impyramid(I, 'reduce'); size(I1)
I2 = impyramid(I1, 'reduce'); size(I2)
I3 = impyramid(I2, 'reduce'); size(I3)
figure
a1 = subplot(1 , 4, 1); imshow(I),
xs = get(a1, 'xlim'); ys = get(a1, 'ylim');
a2 = subplot(1, 4, 2); imshow(I1),
set(a2, 'xlim', xs, 'ylim', ys);
a3 = subplot(1, 4, 3); imshow(I2),
set(a3, 'xlim', xs, 'ylim', ys);
a4 = subplot(1, 4, 4); imshow(I3)
set(a4, 'xlim', xs, 'ylim', ys);
I1 = impyramid(I, 'expand'); size(I1)
I2 = impyramid(I1, 'expand' ); size(I2)
I3 = impyramid(I2, 'expand'); size(I3)
figure
a1 = subplot(1, 4, 1); imshow(I3),
xs = get(a1, 'xlim'); ys = get(a1, 'ylim');
a2 = subplot(1, 4, 2); imshow(I2),
set(a2, 'xlim', xs, 'ylim', ys);
a3 = subplot(1, 4, 3); imshow(I1),
set(a3, 'xlim', xs, 'ylim', ys);
a4 = subplot(1, 4, 4); imshow(I)
set (a4, 'xlim', xs, 'ylim', ys);
1. SIFT
SIFT(Scale-invariant feature transform)是一種檢測區域性特徵的演算法,該演算法通過求一幅圖中的特徵點(interest points,or corner points)及其有關 scale 和 orientation 的描述子(descriptor)得到特徵並進行影象特徵點匹配,獲得了良好效果。
整個演算法分為以下幾個部分:
1、構建尺度空間
這是一個初始化操作,尺度空間理論目的是模擬影象資料的多尺度特徵。
高斯卷積核是實現尺度變換的唯一線性核,於是一副二維影象的尺度空間(多尺度特徵自然在尺度空間中定義)定義為:
L(x,y,σ)=G(x,y,σ)⋆I(x,y) 二維的高斯卷積核的形式為:
G(x,y,σ)=12πσ2e−(x2+y2)/2σ2 σ 大小決定影象的平滑程度,大尺度對應影象的概貌特徵,小尺度對應影象的細節特徵。大的 σ 值對應粗糙尺度(低解析度),反之,對應精細尺度(高解析度)。為了有效的在尺度空間檢測到穩定的關鍵點,提出了高斯差分尺度空間(DOG scale-space)。利用不同尺度的高斯差分核與影象卷積生成。D(x,y,σ)==(G(x,y,kσ)−G(x,y,σ))⋆I(x,y)L(x,y,kσ)−L(x,y,σ)
影象金字塔的建立:對於一幅影象I,建立其在不同尺度(scale)的影象,也成為子八度(octave),這是為了scale-invariant,也就是在任何尺度都能夠有對應的特徵點,第一個子八度的scale為原圖大小,後面每個octave為上一個octave降取樣的結果,即原圖的1/4(長寬分別減半),構成下一個子八度(高一層金字塔)。
2、LoG 近似 DoG 找到關鍵點<檢測DOG尺度空間極值點>
為了尋找尺度空間的極值點,每一個取樣點要和它所有的相鄰點比較,看其是否比它的影象域和尺度域的相鄰點大或者小。如圖所示,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應的9×2個點共26個點比較,以確保在尺度空間和二維影象空間都檢測到極值點。 一個點如果在DOG尺度空間本層以及上下兩層的26個領域中是最大或最小值時,就認為該點是影象在該尺度下的一個特徵點,如圖所示。
3、除去不好的特徵點