harris corner原理
来源:互联网 发布:金蝶软件客服电话 编辑:程序博客网 时间:2024/06/06 04:53
原理:
灰度变化率有函数如下:
其中的W(x,y)函数如下
对公式中中括号中的部分Taylor展开并取一阶式,得到
设
则矩阵形式
Harris采用了一种新的角点判定方法。矩阵M的两个特征向量l1和l2与矩阵M的主曲率成正比。Harris利用l1, l2来表征变化最快和最慢的两个方向.若两个都很大就是角点,一个大一个小就是边缘,两个都小就是在变化缓慢的图像区域.
图1- 4用矩阵M的特征向量分类图像像素点
但是解特征向量需要比较多的计算量,且两个特征值的和等于矩阵M的迹,两个特征值的积等于矩阵M的行列式。所以用(1-4)式来判定角点质量。(k常取0.04-0.06)
Harris算法总结
Step 1:对每一像素点计算相关矩阵M。
Step 2:计算每像素点的Harris 角点响应。
Step 3.在w*w范围内寻找极大值点,若Harris 角点响应大于阀值,则视为角点。
Harris算子对灰度的平移是不变的,因为只有差分,对旋转也有不变性,但是对尺度很敏感,在一个尺度下是角点, 在在另一个尺度下可能就不是了.
编程实现:
- fx = [-1 0 1;-1 0 1;-1 0 1]; % 高斯函数一阶微分,x方向(用于改进的Harris角点提取算法)
- %fx = [-2 -1 0 1 2]; % x方向梯度算子(用于Harris角点提取算法)
- Ix = filter2(fx,ori_im); % x方向滤波
- fy = [-1 -1 -1;0 0 0;1 1 1]; % 高斯函数一阶微分,y方向(用于改进的Harris角点提取算法)
- % fy = [-2;-1;0;1;2]; % y方向梯度算子(用于Harris角点提取算法)
- Iy = filter2(fy,ori_im); % y方向滤波
3)考虑到图像一般情况下的噪声影响,采用高斯滤波去除噪声点。
- 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);
4)计算角点的准则函数R(即用一个值来判断该点来衡量这个点是否是角点),并标记角点(R(i,j)>0.01*Rmax,且R(i,j)为3x3邻域局部最大值)。
M = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)];
R(i,j) = det(M)-k*(trace(M))^2; % 计算R
【可以通过改变准则函数的计算来改进harris算法,上式中的k一般取0.04~0.06】
- [height,width] = size(ori_im);
- result = zeros(height,width); % 纪录角点位置,角点处result的值为1
- R = zeros(height,width);
- Rmax = 0; % 图像中最大的R值
- 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)-0.06*(trace(M))^2;
- if R(i,j) > Rmax
- Rmax = R(i,j);
- end
- end
- end
- cnt = 0; %角点个数
- for i = 2:height-1
- for j = 2:width-1
- % 进行非极大抑制,窗口大小3*3
- if R(i,j) > 0.01*Rmax && 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
- [posc, posr] = find(result == 1);
- disp(cnt); % 显示角点个数
- imshow(ori_im);
- hold on;
- plot(posr,posc,'r+');
以上信息来源:
详细原理及公式推导http://www.cse.psu.edu/~rcollins/CSE486/lecture06.pdf
算法精讲及总结http://blog.163.com/zhaowei0425@126/blog/static/47586030201132611115984/
编程实现http://www.cnblogs.com/blue-lg/archive/2011/12/17/2291139.html
- harris corner原理
- Harris Corner Detector 原理及编程实现
- Harris Corner Detector 原理及编程实现
- Harris Corner Detector 原理及编程实现
- Harris Corner Detector 原理及编程实现
- Harris Corner
- Harris corner detector algorithm
- harris corner detection 实现
- Harris corner detection
- Harris角点检测: Harris Corner Detector
- Harris Corner 角点检测
- Harris corner detector数学理解
- harris corner detector java实现
- Harris Corner Detection&image Matching
- opencv学习-feature-Harris corner detector
- Harris corner OpenCV源码查询之路
- 大作业4(Harris Corner检测)
- Harris角点检测(Harris Corner Detector)
- Smack 中 PacketCollector的作用和用法举例
- 快速排序学习
- 深入理解Java中的final关键字
- hibernate异常解决java.lang.reflect.InvocationTargetException
- 01_05.border属性
- harris corner原理
- 计算机学科中重要的概念总结
- DAVINCI DM3730开发攻略——开发环境篇
- 第三讲 ASP.NET系统对象和状态管理(二)
- 内核同步机制之原子操作&优化和内存屏障
- HDU携程决赛最短路径的代价/USTC 1280 Finding Shortest Path 求最短路边+最小割
- 给定一个带通配符问号的数W,问号可以代表任意一个一位数字。 再给定一个整数X,和W具有同样的长度。 问有多少个整数符合W的形式并且比X大?
- [BZOJ2594][WC2006][LCT][MST]水管局长数据加强版
- 【wikioi】1225八数码问题