Harris角點提取算法及實現


角點:最直觀的印象就是在水平、豎直兩個方向上變化均較大的點,即Ix、Iy都較大
邊緣:僅在水平、或者僅在豎直方向有較大的變化量,即Ix和Iy只有其一較大
平坦地區:在水平、豎直方向的變化量均較小,即Ix、Iy都較小
這里寫圖片描述

2 strong eigenvalues======interest point

1 strong eigenvalues======contour/edge

0 eigenvalues ======uniform region

角點響應

R=det(M)-k*(trace(M)^2) (k=0.04~0.06)

det(M)=λ1*λ2 trace(M)=λ1+λ2

R取決於M的特征值,對於角點|R|很大,平坦的區域|R|很小。

編程步驟:
這里寫圖片描述
這里寫圖片描述

function [u,v]=CF(Image_a)
%Harris角點提取算法並精確至亞像素級                             
%t=input('z1.jpg','s');  % 提示輸入要處理的圖像
% clear;clc;
% tic; %計時開始
% Image1 = imread('e:\images\8.jpg'); % 讀取圖像
Image_a = rgb2gray(Image_a);% 轉化為灰度圖像 
Image=Image_a ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%角點從第5行第5列開始找%%%%%%%%%%%%%
Image(1:4,:)=[];
Image(:,end-3:end)=[];
Image(end-3:end,:)=[];
Image(:,1:4)=[];
HdImage=Image;                  % 轉化后的灰度圖像
fx = [-1 0 1;-1 0 1;-1 0 1]; % x方向的Prewitt算子,用於對x方向濾波 
Ix = filter2(fx,HdImage);     % 對x方向濾波 
fy = [-1 -1 -1;0 0 0;1 1 1]; % y方向的Prewitt算子,用於對y方向濾波 
Iy = filter2(fy,HdImage);% 對y方向濾波 
Ix2 = Ix.^2; % .^2用來求數組的平方
Iy2 = Iy.^2; % .^2用來求數組的平方
Ixy = Ix.*Iy;% 數組相乘
h= fspecial('gaussian',[60 60],2); % 產生9*9的高斯窗口,sigma=2,產生的窗口越大,得到的角點越少(7-11A = filter2(h,Ix2);% 用產生的高斯窗口處理Ix2得到A 
B = filter2(h,Iy2);% 用產生的高斯窗口處理Iy2得到B 
C = filter2(h,Ixy); % 用產生的高斯窗口處理Ixy得到C
height = size(HdImage,1); % 計算圖像的第一維的元素數,即行數
width = size(HdImage,2);  % 計算圖像的第二維的元素數,即列數
CRF = zeros(height,width);  % 生成一個和圖像大小一致的全0的double型數組,用來保存角點響應函數值
CRFmax = 0; % 保存圖像中最大的角點響應函數值 
%M = [A(i,j) C(i,j);C(i,j) B(i,j)];             
%CRF(i,j) = det(M)-0.05*(trace(M))^2; % 計算角點響應函數值,k的取值一般在0.04--0.06   
CRF=(A.*B - C.^2) - 0.05*(A + B).^2; % 代碼的優化把for循環改為向量循環,k=0.05 
CRFmax=max(max(CRF)); % ME01=max(E02)%對一個矩陣的每一列求最大值;找到最大的角點響應函數(用來設置閾值時用)
l=ordfilt2(CRF,10^2,ones(10));% 生成在7*7的窗口進行非最大值抑制(排序濾波器)
k=(l==CRF)&(CRF>0.001*CRFmax);% 設定閾值為0.01*CRFmax,只有是局部最大值並且角點響應函數值大於閾值才是角點
[v1,u1] = find(k); % 找到角點是的位置,並保存,m*n圖像中,u是n量,縱坐標,v是m量,橫坐標。
v=v1+4;
u=u1+4;
count = size(v,1);  % 用來記錄角點的個數
disp('檢測到的角點個數為:')  
disp(count) % 輸出角點個數 
figure,imshow(HdImage);  % 顯示灰度圖像
hold on; 
plot(u1,v1,'g.');% 在灰度圖像上用綠色‘.‘標出角點的位置


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com