资源简介
使用matlab编写的harris角点提取程序。需要自己添加一个main函数,或者在本程序稍微一改就可以了。程序里的border是用来去掉边界的。
代码片段和文件信息
function [rowcolcountcorner]=harris_detector(imageborder)
if(isrgb(image))
Image=rgb2gray(image);%非灰度图要转为灰度图
else
Image=image;
end
dx=[-1 0 1;
-1 0 1;
-1 0 1];% x方向梯度算子
dy=[-1 -1 -1;
0 0 0;
1 1 1];% y方向梯度算子
Ix2 = filter2(dxImage).^2; % x方向的梯度图像
Iy2=filter2(dyImage).^2; % y方向的梯度图像
Ixy=filter2(dxImage).*filter2(dyImage); %梯度乘积图像
h=fspecial(‘gaussian‘92);%高斯滤波器,9*9模板,sigma为2
%准备高斯滤波
A=filter2(hIx2);%滤波后的Ix2矩阵,记作A
B=filter2(hIy2);
C=filter2(hIxy);
row=size(Image1);%图像的行数
col=size(Image2);%图像的列数
corner=zeros(rowcol);%corner用于存放角点的位置
t=20;
%角点粗略确定
for i=border:row-border+1
for j=border:col-border+1
nlike=0; %相似点个数,除去噪声点
if Image(i-1j-1)>Image(ij)-t && Image(i-1j-1) nlike=nlike+1;
end
if Image(i-1j)>Image(ij)-t && Image(i-1j) nlike=nlike+1;
end
if Image(i-1j+1)>Image(ij)-t && Image(i-1j+1) nlike=nlike+1;
end
if Image(ij-1)>Image(ij)-t && Image(ij-1) nlike=nlike+1;
end
if Image(ij+1)>Image(ij)-t && Image(ij+1) nlike=nlike+1;
end
if Image(i+1j-1)>Image(ij)-t && Image(i+1j-1) nlike=nlike+1;
end
if Image(i+1j)>Image(ij)-t && Image(i+1j) nlike=nlike+1;
end
if Image(i+1j+1)>Image(ij)-t && Image(i+1j+1) nlike=nlike+1;
end
if nlike>=2 && nlike<=6
corner(ij)=1;%如果周围有2-6个与中心相似的点,初判为角点
end;
end;
end;
CRF=zeros(rowcol);%用于存储每个像素点的harris角点响应
CRFmax=0;%用于记录角点响应最大值
k=0.05;%经验值
for i=border:row-border+1 %不考虑边界上的点
for j=border:col-border+1
M = [A(ij) C(ij);%自相关矩阵M
C(ij) B(ij)];
CRF(ij) = det(M)-k*(trace(M))^2;
if CRF(ij)>CRFmax
CRFmax=CRF(ij);%记录最大响应值,用于后面判断
end
end
end
count=0;%统计角点个数
t=0.01;%t的选取会影响到角点的检测,t越小检测的越多
for i=border:row-border+1
for j=border:col-border+1 %非极大值抑制,窗口大小3*3
if corner(ij)==1
if CRF(ij)>t*CRFmax && CRF(ij) >CRF(i-1j-1) ......
&& CRF(ij) > CRF(i-1j) && CRF(ij) > CRF(i-1j+1) ......
&& CRF(ij) > CRF(ij-1) && CRF(ij) > CRF(ij+1) ......
&& CRF(ij) > CRF(i+1j-1) && CRF(ij) > CRF(i+1j)......
&& CRF(ij) > CRF(i+1j+1)
count=count+1;%角点个数+1
else
corner(ij)=0;%不是角点
end
end
end
end
[rowcol]=find(corner==1);%找到所有特征点的坐标并返回
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2971 2013-05-24 08:38 harris_detector.m
- 上一篇:压缩感知重构算法基追踪(BP)
- 下一篇:量子聚类算法matlab实现
相关资源
- 量子聚类算法matlab实现
- 两阶段单纯形法的Matlab实现
- 一种实时坏点检测和修复算法的matl
- 图像边界提取与处理matlab的实现
- 提升小波变换的matlab程序
- Matlab编写的DPIV速度场程序
- 基本鱼群算法 MATLAB函数
- 遗传算法之一元函数求最值matlab
- A*算法航迹规划
- 信道容量的仿真代码
- MATLAB RGB和YUV格式相互转化
- MATLAB FIR语音滤波
- 细化算法GUI实现 机器人路径规划
- 最小生成树的MATLAB程序
- 基于MATLAB对FSK信号调制与解调的仿真
- 基于遗传算法的机器人路径规划MATL
- 无向图中最大团问题的matlab代码
- UKF无迹卡尔曼滤波算法matlab代码
- 遗传算法图像分割Matlab编写
- 盲源分离的JADE算法的Matlab程序
- 基于埃米特样条函数提取包络线实现
- 自相关和周期自相关函数matlab
- Matlab2011a中文汉化补丁
- 刘金琨《滑模变结构控制MATLAB仿真第
- matlab编程源程序
- MDP马尔可夫决策过程 MATLAB 源码
- STK-matlab GUI 仿真程序
- 图像分割算法 GVF snake matlab编写程序
- MATLAB自动多阈值分割
- 平均周期图 谱估计 matlab版
评论
共有 条评论