harris角點檢測計算詳細步驟

說明

某人說,算法看不懂,公式不明白,舉個栗子咯,能看到具體數值的那種。
好吧,舉個最簡單的角點檢測算法吧。以下代碼爲matlab。

步驟

一、生成圖像

構造一個棋盤圖像作爲測試圖像,並且爲了使數據在可見範圍內,只生成單格5個像素共2x2大小的棋盤格

image = checkerboard(5,1,1);
imshow(image);

看看image是什麼:

checkerfboard圖像

對應10x10的數據,不要問爲什麼不是0~255。。。。
生成數據表

二、梯度

xg=imfilter(image,[-1 0 1], 'replicate','same','conv');
xg=xg(2:end-1,2:end-1);
yg=imfilter(image,[-1 0 1]','replicate','same','conv');
yg=yg(2:end-1, 2:end-1);

要丟掉圖像邊界的值。在兩個方向上與(-1 0 1)卷積(反轉平移乘積求和)。
對應兩個數值表如下,灰度是要截斷的數據:


這裏寫圖片描述
x方向梯度
這裏寫圖片描述
y方向

是不是出現了兩個方向的邊緣線出來了。這就是爲什麼各大邊緣算法都是基於梯度。

三、計算A、B、C

c=xg.*yg;
a=xg.*xg;
b=yg.*yg;

分別是什麼呢,看下圖。


這裏寫圖片描述
c
這裏寫圖片描述
a
這裏寫圖片描述
b

四、濾波

filter_coef = [0.120078384243213;0.233880756585350;0.292081718342872;0.233880756585350;0.120078384243213;];
filter_coef = filter_coef(:);
w = filter_coef * filter_coef'; 

% filter A, B, and C
a = imfilter(a,w,'replicate','full','conv');
b = imfilter(b,w,'replicate','full','conv');
c = imfilter(c,w,'replicate','full','conv');

% clip to image size
removed = (numel(filter_coef)-1) / 2 - 1;
a = a(removed+1:end-removed,removed+1:end-removed);
b = b(removed+1:end-removed,removed+1:end-removed);
c = c(removed+1:end-removed,removed+1:end-removed);

濾波的主觀感受就是眼睛對感興趣區特別清晰,而背景虛化。類似於單反效果給人的感覺。


這裏寫圖片描述
a濾波後
這裏寫圖片描述
b濾波後
這裏寫圖片描述
c濾波後

數據一下變得又長又黑。。。。。

五、特徵值計算

sensitivity_factor = 0.04;
% 'Harris'
cMetric = (a .* b) - (c .^ 2) - sensitivity_factor * ( a + b ) .^ 2;

對應數值如下:


這裏寫圖片描述

好,特徵值出來了,那就完成了。自己數橫座標6,縱座標5。打完收工。

六、最小值抑制

還是用代碼數吧,人眼已瞎。

quality_level = 0.01;
BW = imregionalmax(cMetric,8);
max_cmetric = max(cMetric(:));
min_metric = quality_level * max_cmetric;
BW(cMetric < min_metric) = false;
BW = bwmorph(BW,'shrink',Inf); %n = Inf時,將目標縮成一個點。沒有孔洞的目標縮成一個點,有孔洞的目標縮成一個連通環。
ind = find(BW);
[~,sorted_ind] = sort(cMetric(ind),'descend');
[r,c] = ind2sub(size(BW),ind(sorted_ind));
xpeak = c;
ypeak = r;
corners = [xpeak, ypeak];
plot(corners(:,1), corners(:,2), '.', 'Color', 'g')

這裏數值不貼了,沒意思。主要是去掉了值小的點, imregionalmax這個是用來判斷是否爲8臨點最大值。
最後打點顯示結果,圖像是放大了效果,看起來偏離了中心,下面一張是實際大小。


這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章