一、简介
matlab基于 Harris 的角点特征检测,角点是图像中一个重要的局部特征,它决定了图像中关键区域的形状,体现了图像中重要的特征信号,所以在目标识别、图像匹配、图像重构等方面具有十分重要的意义。对角点的定义一般可以分为以下三种:图像边界曲线具有极大曲率值的点、图像中梯度值和梯度变化率很高的点、图像边界方向变化不连续的点。定义不同,角点的提取方法也不尽相同。
二、部分源码
%清除变量
clc; clear all; close all;
I = checkerboard(50,3,3);
h = fspecial('gaussian',[5 5],2);
harris(I,0.05,0.01,h);
function varargout=harris(I,k,q,h)
narginchk(0,4);
nargoutchk(0,2);
if nargin<1
I=checkerboard(50,2,2);
end
if nargin<2
k=0.04;
end
if nargin<3
q=0.01;
end
if nargin<3
h=fspecial('gaussian',[5 5],1.5);
end
fx=[-2,-1,0,1,2];
Ix=filter2(fx,I);
fy=[-2,-1,0,1,2]';
Iy=filter2(fy,I);
Ix2=filter2(h,Ix.^2);
Iy2=filter2(h,Iy.^2);
Ixy=filter2(h,Ix.*Iy);
rfcn=@(a,b,c)(a*b-c^2)-k*(a+b)^2;
R=arrayfun(rfcn,Ix2,Iy2,Ixy);
if nargout==0
subplot(121)
imshow(I);
hold on;
plot(xp,yp,'ro');
title('自己编写HARRIS算法')
subplot(122)
cp=corner(I);
imshow(I)
hold on
plot(cp(:,1),cp(:,2),'ro');
title('MATLAB自带CORNER函数')
elseif nargout==1
varargout={[xp,yp]};
elseif nargout==2
varargout={xp,yp};
end
三、运行结果
四、matlab版本
MATLAB R2019a
五、学习与交流
文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信