這裡只是用了一層影象
原理框圖:
而為了簡化計算,我們不直接求二維的高斯卷積核,而是將它變成兩個一維的卷積核,原理如下圖
1. 構建影象尺度空間(影象的高斯金字塔)
所謂高斯金字塔,是指假設乙個金字塔型的結構,金字塔的第一層為原影象,然後將影象做一次高斯平滑(高斯卷積或者高斯模糊),而在高斯平滑裡有乙個引數σ,然後將σ乘以乙個係數k之後得到的值作為新的平滑因子來平滑第二層作為第三層,重複多次,我們就可以得到一組高斯金字塔,而在本次實驗中,我們只做到了第三層,即只對原圖做了兩次高斯平滑處理。
2. 獲得dog(difference of gaussian)金字塔
dog是指高斯差分,是從高斯金字塔構造出來的。它的第一層是有高斯金字塔的第二層減去第一層,第二層是由高斯金字塔的第三層減去第二層,如此類推。
3. 定位極值點
由於關鍵點是由dog空間的區域性極值點組成的。所以為了定位極值點,我們需要將每乙個畫素點和它所有的相鄰畫素點進行比較,看它是否比相鄰畫素點大或者小。這裡我們使用每個畫素和它的八鄰域作比較,如果該畫素是該區域內最大並且大於一定閥值的話,則為極大值點,相同地,如果該畫素是該區域最小並且小於一定閥值時,則視為極小值點。
**如下:
clear all
close all
% 讀取
i = imread('tennis.png');
% 將轉為灰度圖
f = rgb2gray(i);
subplot(221):imshow(f):title('原圖');
% 分別求出高斯尺度變換
gx_k = fspecial('gaussian',[5
1],0.8*sqrt(2))
gx = fspecial('gaussian',[5
1],0.8);
% 求在x方向的高斯卷積核
dog_x = conv2(gx,f) - conv2(gx_k,f);
subplot(222):imshow(dog_x):title('dog x'); % dog_x
% 分別求出高斯尺度變換
gy_k = fspecial('gaussian',[1
5],0.8*sqrt(2));
gy = fspecial('gaussian',[1
5],0.8);
% % 求xy方向的高斯卷積核,得到f的dog圖
dog_xy = conv2(gy,dog_x) - conv2(gy_k,dog_x);
subplot(223):imshow(dog_xy):title('dog xy'); % dog_xy
% 定位極值點,0.15為閾值
[m n] = size(dog_xy);
extream = zeros(m,n);
fori = 1:m;
forj = 1:n;
ifi==1||j==1||i==m||j==n
ifi==1&&j==1||i==1&&j==n||i==m&&j==1||i==m&&j==m
else
endelse
a = [dog_xy(i-1,j-1),dog_xy(i-1,j),dog_xy(i-1,j+1),dog_xy(i,j-1),dog_xy(i,j),dog_xy(i,j+1),dog_xy(i+1,j-1),dog_xy(i+1,j),dog_xy(i+1,j+1)];
end% 極大值點
if dog_xy(i,j) == max(a) && dog_xy(i,j)>=0.15
extream(i,j) = 1;
end% 極小值點
if dog_xy(i,j) == min(a) && dog_xy(i,j)<=-0.15
extream(i,j) = -1;
endendend
% 顯示極值點
subplot(224):imshow(i):title('extream points');
hold on;
[a b] = size(extream);
fori = 2:a-1
forj = 2:b-1
if extream(i,j) == 1
line('xdata',[j-1,j+1],'ydata',[i-1,i-1],'color','red');
line('xdata',[j-1,j+1],'ydata',[i+1,i+1],'color','red');
line('xdata',[j-1,j-1],'ydata',[i-1,i+1],'color','red');
line('xdata',[j+1,j+1],'ydata',[i-1,i+1],'color','red');
endif extream(i,j) == -1
line('xdata',[j-1,j+1],'ydata',[i-1,i-1],'color','green');
line('xdata',[j-1,j+1],'ydata',[i+1,i+1],'color','green');
line('xdata',[j-1,j-1],'ydata',[i-1,i+1],'color','green');
line('xdata',[j+1,j+1],'ydata',[i-1,i+1],'color','green');
endendend
Sift特徵提取演算法
2004 年d.lowe 提出了乙個新的演算法 尺度不變特徵變換 sift 這個演算法可以幫助我們提取影象中的關鍵點並計算它們的描述符。sift演算法的特點就是,對於區域性特徵對旋轉 縮放 亮度變化保持不變。sift 演算法主要內容如下 1 尺度空間的極值檢測 2 特徵點定位 3 特徵方向賦值 4 ...
PCL NARF關鍵點提取
關鍵點 區域性特徵描述子 關鍵點描述子 加快識別 追蹤。narf 法向對齊徑向特徵 步驟 遍歷深度影象點,有深度突變位置進行邊緣提取 測度表面變化的係數以及變化的主方向 主方向計算興趣值 對興趣值進行平滑 無最大值壓縮,獲得關鍵點。1 建立rangeimageborderextractor物件,用來...
SIFT特徵提取
原文獻 1 lowe d g.distinctive image features from scale invariant keypoints c international journal of computer vision.2004 91 110.不錯的部落格 2 sift可以用來提取區域性...