原理:
灰階變化率有函數如下:

其中的W(x,y)函數如下
對公式中中括号中的部分Taylor展開并取一階式,得到
設
則矩陣形式
Harris采用了一種新的角點判定方法。矩陣M的兩個特征向量l1和l2與矩陣M的主曲率成正比。Harris利用l1, l2來表征變化最快和最慢的兩個方向.若兩個都很大就是角點,一個大一個小就是邊緣,兩個都小就是在變化緩慢的圖像區域.
圖1- 4用矩陣M的特征向量分類圖像像素點
但是解特征向量需要比較多的計算量,且兩個特征值的和等于矩陣M的迹,兩個特征值的積等于矩陣M的行列式。是以用(1-4)式來判定角點品質。(k常取0.04-0.06)
Harris算法總結
Step 1:對每一像素點計算相關矩陣M。
Step 2:計算每像素點的Harris 角點響應。
Step 3.在w*w範圍内尋找極大值點,若Harris 角點響應大于閥值,則視為角點。
Harris算子對灰階的平移是不變的,因為隻有差分,對旋轉也有不變性,但是對尺度很敏感,在一個尺度下是角點, 在在另一個尺度下可能就不是了.
程式設計實作:
[objc] view plain copy
- fx = [-1 0 1;-1 0 1;-1 0 1]; % 高斯函數一階微分,x方向(用于改進的Harris角點提取算法)
- %fx = [-2 -1 0 1 2]; % x方向梯度算子(用于Harris角點提取算法)
- Ix = filter2(fx,ori_im); % x方向濾波
- fy = [-1 -1 -1;0 0 0;1 1 1]; % 高斯函數一階微分,y方向(用于改進的Harris角點提取算法)
- % fy = [-2;-1;0;1;2]; % y方向梯度算子(用于Harris角點提取算法)
- Iy = filter2(fy,ori_im); % y方向濾波
3)考慮到圖像一般情況下的噪聲影響,采用高斯濾波去除噪聲點。
[objc] view plain copy
- Ix2 = Ix.^2;
- Iy2 = Iy.^2;
- Ixy = Ix.*Iy;
- clear Ix;
- clear Iy;
- h= fspecial('gaussian',[7 7],2); % 産生7*7的高斯窗函數,sigma=2
- Ix2 = filter2(h,Ix2);
- Iy2 = filter2(h,Iy2);
- Ixy = filter2(h,Ixy);
4)計算角點的準則函數R(即用一個值來判斷該點來衡量這個點是否是角點),并标記角點(R(i,j)>0.01*Rmax,且R(i,j)為3x3鄰域局部最大值)。
M = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)];
R(i,j) = det(M)-k*(trace(M))^2; % 計算R
【可以通過改變準則函數的計算來改進harris算法,上式中的k一般取0.04~0.06】
[objc] view plain copy
- [height,width] = size(ori_im);
- result = zeros(height,width); % 紀錄角點位置,角點處result的值為1
- R = zeros(height,width);
[objc] view plain copy
- Rmax = 0; % 圖像中最大的R值
- for i = 1:height
- for j = 1:width
- M = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)];
- R(i,j) = det(M)-0.06*(trace(M))^2;
- if R(i,j) > Rmax
- Rmax = R(i,j);
- end
- end
- end
- cnt = 0; %角點個數
- for i = 2:height-1
- for j = 2:width-1
- % 進行非極大抑制,視窗大小3*3
- if R(i,j) > 0.01*Rmax && R(i,j) > R(i-1,j-1) && R(i,j) > R(i-1,j) && R(i,j) > R(i-1,j+1) && R(i,j) > R(i,j-1) && R(i,j) > R(i,j+1) && R(i,j) > R(i+1,j-1) && R(i,j) > R(i+1,j) && R(i,j) > R(i+1,j+1)
- result(i,j) = 1;
- cnt = cnt+1;
- end
- end
- end
- [posc, posr] = find(result == 1);
- disp(cnt); % 顯示角點個數
- imshow(ori_im);
- hold on;
- plot(posr,posc,'r+');
以上資訊來源:
詳細原理及公式推導http://www.cse.psu.edu/~rcollins/CSE486/lecture06.pdf
算法精講及總結http://blog.163.com/[email protected]/blog/static/47586030201132611115984/
程式設計實作http://www.cnblogs.com/blue-lg/archive/2011/12/17/2291139.html