Harris角点检测原理及实现

Posted luo1873626242

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Harris角点检测原理及实现相关的知识,希望对你有一定的参考价值。

一、原理

 

二、实现

close all;
clear all;
I=imread(\'test.tif\');
[posX,posY]=harris(I);
figure;imshow(I);
hold on; plot(posX, posY, \'g*\');
function [posX,posY]=harris(I)
%Harris角点检测
%I:输入图像
%posX:角点X坐标
%posY:角点Y坐标
I=double(I);
[m,n]=size(I);
hx=[-1,0,1;-1,0,1;-1,0,1];
Ix=imfilter(I,hx,\'replicate\',\'same\');%X方向差分图像
Iy=imfilter(I,hx\',\'replicate\',\'same\');%Y方向差分图像
Ix2=Ix.^2;
Iy2=Iy.^2;
Ixy=Ix.*Iy;
h=fspecial(\'gaussian\',3,2);
Ix2=imfilter(Ix2,h,\'replicate\',\'same\');%高斯滤波
Iy2=imfilter(Iy2,h,\'replicate\',\'same\');
Ixy=imfilter(Ixy,h,\'replicate\',\'same\');
R=zeros(m,n);
k=0.04;%建议值(0.04--0.06)
for i=1:m
    for j=1:n
       R(i,j)=(Ix2(i,j)*Iy2(i,j)-Ixy(i,j)*Ixy(i,j))-k*((Ix2(i,j)+Iy2(i,j))^2);%角点响应值
    end
end
T=0.1*max(R(:));% 阈值,可控制返回的角点个数
result=zeros(m,n);
%非极大值抑制(3*3窗口中大于阈值T的局部极大值点被认为是角点)
for i=2:m-1
    for j=2:n-1
        tmp=R(i-1:i+1,j-1:j+1);
        tmp(2,2)=0;
        if(R(i,j)>T&&R(i,j)>max(tmp(:)))
            result(i,j)=1;
        end
    end
end
[posY,posX]=find(result);

结果:

以上是关于Harris角点检测原理及实现的主要内容,如果未能解决你的问题,请参考以下文章

第十一节Harris角点检测原理

OpenCV中的Harris角点检测

C/C++实现特征点提取算法——Harris角点提取

OpenCV——Harris角点检测

OpenCV角点检测源代码分析(Harris和ShiTomasi角点)

CV实验二:特征检测与匹配