目录

1 基础知识

1.1 图像变化的类型

1.2 提取点特征的作用

1.3 什么是好的角点检测算法?

2 Harris 角点检测

2.1 Harris角点检测基本思想

2.2 Harris角点检测:数学描述

3 总结

4 Matlab 实验

参考资料

角点是图像重要的特征,对图像图形的理解和分析有很重要的作用。角点在保留图像图重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配和实时处理。下面将介绍Harris角点检测 及 Matlab实验。

1 基础知识

1.1 图像变化的类型

1.2 提取点特征的作用

图像的点特征是许多计算机视觉算法的基础:使用特征点来代表图像的内容,在运动目标跟踪、物体识别、图像配准、全景图像拼接 和 三维重建 等方向有较多的用处。

有一类重要的点特征:角点(corner points)

角点(corner points):局部窗口沿各方向移动,均产生明显变化的点,图像局部曲率突变的点

典型的角点检测算法:Harris角点检测, CSS角点检测等。下图展示的是不同学者提出的角点检测算法。

下图为不同类型的角点,那么,怎么才算的好的角点检测算法呢?下面将慢慢介绍。

1.3 什么是好的角点检测算法?

(1)检测出图像中“真实的”角点;

(2)准确的定位性能;

(3)很高的重复检测率(稳定性好);

(4)具有对噪声的鲁棒性;

(5)具有较高的计算效率。

2 Harris角点检测

1988年,Harris提出角点检测的方法效果较好。从谷歌学术来看,引用已达到1万6千多次,佩服佩服。

2.1 Harris角点检测基本思想

基本思想:从图像局部的小窗口观察图像特征。

角点定义:窗口向任意方向的移动都导致图像灰度的明显变化。

2.2 Harris角点检测:数学描述

将图像窗口平移

产生灰度变化

由:

得到:

于是对于局部微小的移动量

 ,可以近似得到下面的表达:

其中,

矩阵,可由图像的导数求得:

窗口移动导致的图像变化:实对称矩阵

的特征值分析

其中,

的特征值

 。

定义角点响应函数:

其中,

 。

Harris角点检测结果如下图所示:

3 总结

上面是Harris角点检测的数学推导,通过查阅相关文献,对Harris角点检测的推导过程进行整理,其简要步骤如下:

Harris角点检测器分为三步:梯度计算,矩阵形成和 特征值计算。首先,计算

 和

 方向上的平滑 (使用高斯函数) 梯度来检测给定灰度图像

 中的角点,由下面的式子给出:

其中,

 是平滑参数。

计算图像

的平滑梯度为:

其中,“

 ” 表示二维卷积运算。

Harris角点检测器依赖于计算一个矩阵(与自相关函数有关),由下面的式子给出:

其中,

从上面的式子可以看出,

 和

 表示平均梯度幅值,矩阵

 的特征值提供关于给定位置的边缘的信息。如果给定位置的矩阵的特征值都很大,那么大部分区域均为角点。Harris通过计算响应函数可以避免精确的特征值计算,由下面的式子给出:

其中,

 ,

是可调参数,一般设置在区间 [0.04, 0.06] 内。通过判定

 大小来判断像素点是否为角点,对于角点,

的值很大;而平坦的区域,

 的值很小。

4 Matlab 实验

Harris角点检测 Matlab 代码如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%% Harris角点检测算法 Matlab code

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all; clc ;tic;

ori_im = imread('lena.tiff'); % 读取图像

if(size(ori_im,3)==3)

ori_im = rgb2gray(uint8(ori_im)); %转为灰度图像

end

% fx = [5 0 -5;8 0 -8;5 0 -5]; % 高斯函数一阶微分,x方向(用于改进的Harris角点提取算法)

fx = [-2 -1 0 1 2]; % x方向梯度算子(用于Harris角点提取算法)

Ix = filter2(fx,ori_im); % x方向滤波

% fy = [5 8 5;0 0 0;-5 -8 -5]; % 高斯函数一阶微分,y方向(用于改进的Harris角点提取算法)

fy = [-2;-1;0;1;2]; % y方向梯度算子(用于Harris角点提取算法)

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=2

Ix2 = 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); % 纪录角点位置,角点处值为1

R = zeros(height,width);

for i = 1:height

for j = 1:width

M = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)]; % auto correlation matrix

R(i,j) = det(M)-0.06*(trace(M))^2;

end

end

cnt = 0;

for i = 2:height-1

for j = 2:width-1

% 进行非极大抑制,窗口大小3*3

if 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

end

end

Rsort=zeros(cnt,1);

[posr, posc] = find(result == 1);

for i=1:cnt

Rsort(i)=R(posr(i),posc(i));

end

[Rsort,ix]=sort(Rsort,1);

Rsort=flipud(Rsort);

ix=flipud(ix);

ps=100;

posr2=zeros(ps,1);

posc2=zeros(ps,1);

for i=1:ps

posr2(i)=posr(ix(i));

posc2(i)=posc(ix(i));

end

imshow(ori_im);

hold on;

plot(posc2,posr2,'g+');

toc;

运行结果如下图所示:

C++实验代码可参见:https://blog.csdn.net/linqianbi/article/details/78930239

参考资料

[1] C.Harris, M.Stephens. “A Combined Corner and Edge Detector”. Proc. of 4th Alvey Vision Conference, 1988.

[2] Harris角点检测 PPT

[3] https://blog.csdn.net/u010703122/article/details/49308153

[4] https://blog.csdn.net/woxincd/article/details/60754658

[5] https://blog.csdn.net/linqianbi/article/details/78930239

测角误差估计算法matlab,Harris角点检测 及 Matlab实验相关推荐

  1. MATLAB——Harris角点检测

    为完成对棋盘标板的角点检测,特此记录. 角点:最直接的定义为在水平.垂直两个方向上变化均较大的点 最常用的角点检测算法为Harris角点检测方法,原理如下: 计算图像I(x,y)在X和Y两个方向的梯度 ...

  2. Matlab Harris角点匹配

    图像课程作业,仅供参考 题目:用Harris算子和归一化互相关实现两幅图的匹配 1.自定义Harris函数,寻找图像的Harris角点坐标 (Harris.m) % coords:图像角点坐标集合(为 ...

  3. java harris corner_CV算法:Harris角点(Harris Corner Detector)

    参考资料 Harris Corner Detector 斯坦福CS131-1718作业3 cornell-CS4670-5670-2016spring lec10_features2_web-Harr ...

  4. 如何用matlab测a相相电流,电流平均值谐波检测方法MATLAB仿真

    电流平均值谐波检测法MATLAB仿真 Math模块库中选取,放大器增益约等于无功电流 ,最后得到有功电流. .然后封装成一个子模块abc/pq.三相到两相的变换在Simulink 的实现及其封装图如图 ...

  5. 【OFDM仿真】基于秩亏情况下遗传算法和粒子群算法优化MIMO-OFDM系统多用户检测附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  6. isscalar matlab,大数的素性检测(用MATLAB仿真)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function f = factor(n) %FACTOR Prime factors. % FACTOR(N) returns a vector co ...

  7. 【理解】经典角点检测算法--Harris角点

    目录 什么是角点 角点检测算法的原始思想: Harris角点检测原理 Harris角点算法的基本步骤 实践: Harris角点检测可能会用到的OpenCV API: 手写API: 1.展示图片: 2. ...

  8. 计算机视觉(二)HARRIS角点检测算法与SIFT

    文章目录 前言 一.HARRIS角点检测算法 1.什么是角点(corner points) 2.角点检测算法的基本思想 3.什么是好的角点检测算法 4.角点特征的数学刻画 5.度量角点响应 6.HAR ...

  9. 【OpenCV十六新手教程】OpenCV角检测Harris角点检测

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) ...

最新文章

  1. 100道 Dubbo面试题及答案(2021最新)
  2. 误差、方差、偏差、噪声、训练误差+验证误差、偏差方差窘境、错误率和误差、过拟合与欠拟合
  3. SAP进阶:再论SAP权限
  4. iostat相关参数说明——await:平均每次设备I/O操作的等待时间 (毫秒),如果%util接近 100%,说明产生的I/O请求太多...
  5. 034_ JDK的Enumeration接口
  6. 零起点学算法 3个数比较大小
  7. main() 函数解析(一)——Linux-0.11 剖析笔记(六)
  8. vim学习手册-10后序
  9. java语言计算器怎么写_求助,一个计算器的括号功能怎么写啊。
  10. Unix——optarg与getopt的用法
  11. html引用单文件组件,webpack入坑之旅(五)加载vue单文件组件_html/css_WEB-ITnose
  12. python模块-logging的智商上限
  13. MySQL主从复制中关于AUTO_INCREMENT的奇怪问题
  14. 她不讲武德,北航博士竟然把60年来的文本分类综述都整理了!!!
  15. postgresql 数据库路径迁移
  16. 计算机专业应届毕业生如何找工作(偏软件方向)
  17. vue 动态背景图轮播
  18. 对比分析偏差率的五个常见疑问
  19. vue POST 请求方式下载excel文件
  20. CHECK约束在表继承中的使用

热门文章

  1. android:手机与BLE-CC41-A蓝牙模块通信
  2. C语言|博客作业10
  3. 为chrome浏览器单独设置代理服务器
  4. uni-app时间格式转换
  5. c 控制 汇编语言,C 和 汇编语言的混合编程(实时控制TLC1549的实现)
  6. 总结三种方法使用Service实现在后台播放音乐、暂停音乐、停止音乐的功能
  7. 什么是Python中的套接字编程?
  8. 微信小程序第三方框架
  9. 【引用】DMA内存申请--dma_alloc_coherent
  10. mysql触发器应用场景_MySQL触发器的使用场景及方法实例