首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

局部特征(2)——Harris角点

  • 25-03-04 02:43
  • 3362
  • 10331
blog.csdn.net
局部特征系列:
  • 局部特征(1)——入门篇
  • 局部特征(2)——Harris角点 
  • 局部特征(3)——SURF特征总结 
  • 局部特征(4)——SIFT和SURF的比较 
  • 局部特征(5)——如何利用彩色信息 Color Descriptors 
  • 局部特征(6)——局部特征描述汇总 

 --------------------------------------------------------------      

Highlight: 感谢9L同学的推荐,有更优秀的文章讲解检测子:http://www.cnblogs.com/ronny/p/4009425.html  另外本人很久没再研究检测子了,本专题不再update。


        在入门篇中偶尔谈到了Harris Corner,在这里我们就重点聊一聊Harris Corner。

       Harris Corner是最典型的角点检测子Corner Detector。角点经常被检测在边缘的交界处、被遮挡的边缘、纹理性很强的部分。满足这些条件一般都是稳定的、重复性比较高的点,所以实际上他们是不是角点并不重要(因为我们的目标就是找一些稳定、重复性高的点以作为特征点)。

       Harris Corner基于二阶矩阵:

       

        这个矩阵描述了局部邻域内梯度的分布情况。矩阵的两个特征值可以用来描述两个主要方向上信号的变化,因此特征值可以用来判决是否为特征点。Harris采用的判别方法是:

    

       显而易见,cornerness的值越大,对应的两个特征值都应该很大,其中λ取0.04,是为了抑制比较明显的直线。最后对整幅图像得到的cornerness做一个非极大抑制,得到最后的特征点。Harris角点具有的优点是平移不变、旋转不变,能克服一定光照变化。可以先从一个例子上观察Harris Corner实现的过程:

        

        现在有几个问题:首先3.1式矩阵是如何推导出现的;另外一个问题是为什么3.4式用来决定是否为角点(即为何3.1式的两个特征值可以用来描述两个主要方向上信号的变化强度)。

       

  • 第一个问题的解答
    要知道为什么3.1可以作为这个矩阵,我们了解一下具体怎么推出这个式子的,那这又要从Moravec算子说起,步骤如下:
    • 将要判断的点置于一个3*3或5*5的图像块的中心,如下图用红色的线环绕的图像块。
    • 将红色的框朝8个方向移动一格,得到蓝色的框(下图为向右上角移动)。导致一个缺点:响应是各向异性的(啥意思?)
    • 将红色的框和蓝色的框的相同坐标值的点的像素值相减,并求平方和,可以得到8个值。
    • 将8个值中的最小的值作为角点像素的变化值。(因为角点应该在x、y方向上变化都比较大;而在边缘上只可能一个方向大、另一个方向小)
    • 求出每一个像素点的角点像素变化值,在局部图像块中,该值最大的点为角点。

        Harris算子将Moravec算子做了两个推广:

       1)用像素的变化梯度代替像素值相减并引入高斯窗函数(举个x方向上变化的例子为证)。

            引入高斯窗是为了滤除噪声的干扰。

[-1,0,1]:x方向上的偏导,[-1,0,1]T:y方向上的偏导。

 

        2)推广出了一个公式这样可以计算任意方向上的像素值变化,而不在是8个固定的方向。

(这里的u、v表示x/y方向的位移)

        因为Vuv(x,y)的最大值才是这个点需要被考虑的值,因此我们重写以上表达式:

                   (3.5)

        看到M矩阵的形式了么?这就是Harris算子的那个原始矩阵,我想推到这里,你也就应该了解Harris矩阵为什么是这样子的了。

 

  • 第二个问题:为什么3.4可以用来描述是否为角点。

    

       那么为什么3.1式的两个特征值能够反映数据在两个方向的变化程度?

       注意(3.5)式的目标函数(最大化Vuv)。而这个目标函数与PCA的目标函数(通过最大化变化推导PCA的投影方程时)完全一致(如果你记不清这个过程,请你看这里,重点看公式2及之后的文字描述。另外我在这里的留言板中也回答了类似的问题)。特征值是十分重要的概念,不仅在这里以及PCA上,在Laplacian Eigenmaps,LDA上也相应地被使用到。

      

       那么又为什么3.4式取值较大时能保证α和β的取值都很大呢?

             a)   α和β一个大而另一个小时,det小而trace大,‘-’号就能使cornerness小(而‘+’号却使cornerness依然很大,所以必须是减号而不是加号);

             b)   α和β都很小时,显然cornerness很小;

             c)   α和β都很大时(比参数λ更大),此时det会更大于trace从而使cornerness很大。

       可以参考这样一个图:描述了不同纹理下α和β的取值情况(其中α和β是矩阵M的两个特征值):

    • 没有什么纹理的情况下,两个值都很小(很小的正值)
    • 边缘的点,一个值大,另外一个值小(由于k取了很小的值,所以3.4的结果为一个小负值)
    • 角点:两个值都比较大(比较大的正值)

        这样,当我们把目标函数定义为3.4式的时候,得到的结果就会尽力满足两个特征值都比较大了。当然,除此之外,还有Harmonic mean等方式实现更理想的组合方式达到检测出的两个特征值都尽可能大。

       


 

       最后附上检测效果图(右图进行了旋转)

    两个图可以看出来Harris corner是rotation invariant,但是不是scale invariant。

------------------------------

jiang1st2010

原文地址:http://iyenn.com/rec/1703374.html

注:本文转载自blog.csdn.net的jiang1st的文章"http://blog.csdn.net/jiang1st2010/article/details/7628665"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top