深度学习机器学习图像处理的matlab源代码–基于 Harris 的角点特征检测应用案例研究–程序源码下载来源
角点检测子函数:
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);
R(R < q*max(R(:)))=0;
[xp,yp]=find(imregionalmax(R,8));
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
主函数:
clc; clear all; close all;
I = checkerboard(50,3,3);
h = fspecial('gaussian',[5 5],2);
harris(I,0.05,0.01,h);
这个算法相对很基础–网上也有很多的描述和使用。
Harris 角点检测算法分为以下三步:
1、当窗口(局部区域)同时向 x (水平)和 y(垂直) 两个方向移动时,计算窗口内部的像素值变化量 ;
2、对于每个窗口,都计算其对应的一个角点响应函数 ;
3、然后对该函数进行阈值处理,如果 ,表示该窗口对应一个角点特征。
好多的是在openCV使用的,结合机器学习的预处理模块,等等。在matlab进行测试即可。原理相同,只是平台不一样罢了。没什么独特的创新之处。