【角点检测】基于 Harris算法实现角点特征检测含Matlab源码

1 简介

Harris 算子是一种计算简单、应用广泛的角点检测算子,只使用灰度的一阶差分和滤波,可以定量地提取特征角点并且提取的角点特征均匀。由于计算过程用到图像的一阶导数,故对存在灰度变化、图像旋转、视点变换和噪声干扰的图像也能稳定地提取角点。因此本文提出的算法采用 Harris 角点作为兴趣点,并提取每个兴趣点为中心的邻域内空域的五个均值特征形成特征向量,通过位置转移向量的频率统计连接标志匹配点。

2 完整代码

clear;filename = 'Lena.jpg';X = imread(filename);     Info = imfinfo(filename); if (Info.BitDepth > 8)    f = rgb2gray(X);end%计算图像亮度f(x,y)在点(x,y)处的梯度-----------------------------------------------ori_im = double(f) / 255;                   fx = [-2 -1 0 1 2];                     % x方向梯度算子Ix = filter2(fx, ori_im);                fy = [-2; -1; 0; 1; 2];                     % y方向梯度算子Iy = filter2(fy, ori_im);                % y方向滤波%构造自相关矩阵---------------------------------------------------------------Ix2 = Ix .^ 2;Iy2 = Iy .^ 2;Ixy = Ix .* Iy;clear Ix;clear Iy;h= fspecial('gaussian', [7 7], 2);        % 产生7*7的高斯窗函数,sigma=2Ix2 = filter2(h,Ix2);Iy2 = filter2(h,Iy2);Ixy = filter2(h,Ixy);%提取特征点---------------------------------------------------------------height = size(ori_im, 1);width = size(ori_im, 2);result = zeros(height, width);           % 纪录角点位置,角点处值为1R = zeros(height, width);Rmax = 0;                              % 图像中最大的R值k = 0.06;for i = 1 : height    for j = 1 : width        M = [Ix2(i, j) Ixy(i, j); Ixy(i, j) Iy2(i, j)];                    R(i,j) = det(M) - k * (trace(M)) ^ 2;                     % 计算R        if R(i,j) > Rmax            Rmax = R(i, j);        end    endendT = 0.01 * Rmax;%固定阈值,当R(i, j) > T时,则被判定为候选角点%进行局部非极大值抑制-------------------------------------cnt = 0;for i = 2 : height-1    for j = 2 : width-1        if (R(i, j) > T && R(i, j) > R(i-1, j-1) && R(i, j) > R(i-1, j) && R(i, j) > R(i-1, j+1) && R(i, j) > R(i, j-1) && ...                R(i, j) > R(i, j+1) && R(i, j) > R(i+1, j-1) && R(i, j) > R(i+1, j) && R(i, j) > R(i+1, j+1))            result(i, j) = 1;            cnt = cnt+1;        end    endendi = 1;    for j = 1 : height        for k = 1 : width            if result(j, k) == 1;                corners1(i, 1) = j;                corners1(i, 2) = k;                i = i + 1;            end        end    end[posc, posr] = find(result == 1);figure,imshow(ori_im);hold on;plot(posr, posc, 'r+');

3 仿真结果

4 参考文献

[1]贾莹. 基于Harris角点检测算法的图像拼接技术研究[D]. 吉林大学.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值