python计算机视觉 局部图像描述子

编程入门 行业动态 更新时间:2024-10-26 00:19:31

python计算机视觉 <a href=https://www.elefans.com/category/jswz/34/1768933.html style=局部图像描述子"/>

python计算机视觉 局部图像描述子

文章目录

  • 前言
  • 一、Harris角点检测算法
    • 1.1 角点是什么
    • 1.2 好的角点检测算法具备的特征
    • 1.3 角点检测算法基本原理
    • 1.4 用数学方法刻画角点特征
    • 1.5 定义角点响应函数
    • 1.6 Harris角点检测步骤
    • 1.7 Harris角点检测算法的响应函数
    • 1.8 Harris角点检测实例
    • 1.9不同场景下测试Harris角点检测器
      • 1.9.1 角点丰富场景
      • 1.9.2 纹理平坦场景
      • 1.10 图像种寻找对应点
  • 二、SIFT(尺度不变特征变换)
    • 2.1 SIFT简介
    • 2.2 SIFT特点
    • 2.3 SIFT算法
      • 2.3.1 SIFT算法可以解决的问题
      • 2.3.2 SIFT算法实现特征匹配的三个流程:
      • 2.3.3 SIFT中要查找的特征点
    • 2.4 尺度空间
    • 2.5 高斯金字塔
    • 2.6 关键点检测-DOG
      • 2.6.1 DOG函数(高斯差分函数)
      • 2.6.2 DoG高斯差分金字塔
    • 2.7 关键点方向分配、描述和匹配
      • 2.7.1 关键点方向分配
      • 2.7.2 关键点描述
      • 2.7.3 关键点匹配
    • 2.8 SIFT算法实现
      • 2.8.1 SIFT特征检测
      • 2.8.2 SIFT特征匹配
  • 三、匹配地理标记图像
    • 3.1 工具包安装
    • 3.2 匹配地理标记图像代码:
    • 3.3 结果展示
  • 总结


前言

一、Harris角点检测算法

1.1 角点是什么

角点具有的特征:

<1>轮廓之间的交点;

<2>局部窗口沿任意方向移动,均产生明显变化的点;

<3>图像局部曲率突变的点;

<4>对于同一场景,即使视角发生变化,通常具备稳定性质的特征;

<5>该点附近区域的像素点无论在梯度方向上还是其梯度幅值上有着较大变化。


1.2 好的角点检测算法具备的特征

<1>检测出图像中“真实的”角点;

<2>准确的定位性能;

<3>具有很高的稳定性;

<4>具有对噪声的鲁棒性;

<5>具有较高的计算效率。

1.3 角点检测算法基本原理

基本原理:
人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,如果滑动前后窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点;如果滑动前后窗口内区域的灰度没有发生变化那么窗口内就不存在角点。

1.4 用数学方法刻画角点特征

当窗口发生[u,v]移动的时候,滑动前和滑动后对应的窗口中的像素点灰度变化描述如下:

所以得到,当在平坦区域时,窗口向任意方向移动,无灰度变化;在边缘区域时,沿着边缘方向移动,无灰度变化;在角点区域时,沿着任意方向移动,有明显灰度变化

经过一系列E(u,v)表达式的演化, E(u,v)表达式可以更新为:

其中矩阵M是2x2矩阵,可由图像的导数求得:

1.5 定义角点响应函数

1.6 Harris角点检测步骤

Harris角点检测可以分为5个步骤:

(1)计算图像I(x,y)I(x,y)在xx和yy两个方向的梯度IxIx,IyIy;

(2)计算图像两个方向梯度的乘积;

(3)使用高斯函数对Ix2、Iy2、IxIy进行高斯加权(取σ=2,ksize=3),计算中心点为(x,y)(x,y)的窗口W对应的矩阵M;

(4)计算每个像素点(x,y)处的(x,y)处的Harris响应值R;

(5)过滤大于某一阈值t的R值;

1.7 Harris角点检测算法的响应函数

1.8 Harris角点检测实例

1.9不同场景下测试Harris角点检测器

1.9.1 角点丰富场景

1.9.2 纹理平坦场景

1.10 图像种寻找对应点

二、SIFT(尺度不变特征变换)

2.1 SIFT简介

SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。SIFT特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。

2.2 SIFT特点

1.SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;

2.区分性好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;

3.多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;

4.高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;

5.可扩展性,可以很方便的与其他形式的特征向量进行联合。

2.3 SIFT算法

2.3.1 SIFT算法可以解决的问题

(1)目标的旋转、缩放、平移;

(2)图像仿射或投影变换;

(3)弱光照影响以及部分目标遮挡;

(4)杂物场景以及噪声点影响。

2.3.2 SIFT算法实现特征匹配的三个流程:

1.提取关键点;

2.对关键点附加详细的信息(局部特征),即描述符;

3.通过特征点(附带上特征向量的关键点)的两两比较找出相互匹配的若干对特征点,建立景物间的对应关系。

2.3.3 SIFT中要查找的特征点

这些点是一些十分突出的点,不会因光照、尺度、旋转等因素的改变而消失,比如角点、边缘点、暗区域的亮点以及亮区域的暗点。假定两幅图像中有相同的景物,那么使用某种算法分别提取各自的特征点,这些点之间会有相互对应匹配关系。根据归纳,我们可以看出SIFT特征点希望选出具有下述不变性的点: 尺度 、方向、位移、光照。

2.4 尺度空间

在一定的范围内,无论物体是大还是小,人眼都可以分辨出来。然而计算机要有相同的能力却不是那么的容易,在未知的场景中,计算机视觉并不能提供物体的尺度大小,其中的一种方法是把物体不同尺度下的图像都提供给机器,让机器能够对物体在不同的尺度下有一个统一的认知。在建立统一认知的过程中,要考虑的就是在图像在不同的尺度下都存在的特征点。

而尺度空间的基本思想是:在图像信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。要使得图像具有尺度空间不变性,就要建立尺度空间。

一个图像的尺度空间,定义为一个变化尺度的高斯函数与原图像的卷积。


其中*表示卷积运算,(x, y)代表图像的像素位置,尺度空间因子,值越小表示图像被平滑的越少,相应的尺度也就越小。大尺度对应于图像的概貌特征,小尺度对应于图像的细节特征。

2.5 高斯金字塔

尺度空间在实现时使用高斯金字塔表示,高斯金字塔的构建分为两部分:

(1)对图像做不同尺度的高斯模糊;

(2)对图像做降采样(隔点采样)

图像的金字塔模型是指,将原始图像不断降阶采样,得到一系列大小不一的图像,由大到小,从下到上构成的塔状模型。原图像为金字塔的第一层,每次降采样所得到的新图像为金字塔的一层(每层一张图像),每个金字塔的具体层数根据图像的原始大小和塔顶图像的大小共同决定。为了让尺度体现其连续性,高斯金字塔在简单降采样的基础上加上了高斯滤波。如图所示,将图像金字塔每层的一张图像使用不同参数做高斯模糊。

2.6 关键点检测-DOG

2.6.1 DOG函数(高斯差分函数)


2.6.2 DoG高斯差分金字塔

(1)对应DOG算子,构建DOG金字塔。

可通过高斯差分图像看出图像上的像素值变化情况(如果没有变化也就没有特征,特征必须是变化尽可能多的点),DOG图像描绘的是目标的轮廓。

(2)DOG局部极值检测

特征点是由DOG空间的局部极值点组成的。为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小,看其是否比它的图像域和尺度域的相邻点大或者小。如下图所示,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。 一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点。

(3)去除边缘效应

由于DOG函数在图像边缘有较强的边缘响应,因此需要排除边缘响应。DOG函数的峰值点在边缘梯度的方向上主曲率值比较大,而沿着边缘方向则主曲率值较小。

2.7 关键点方向分配、描述和匹配

2.7.1 关键点方向分配

为了使描述符具有旋转不变性,需要利用图像的局部特征为给每一个关键点分配一个方向。通过尺度不变性求极值点,可以使其具有缩放不变的性质。而利用关键点邻域像素的梯度方向分布特性,可以为每个关键点指定方向参数方向,从而使描述子对图像旋转具有不变性。

通过求每个极值点的梯度来为极值点赋予方向,完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。确定关键点的方向采用梯度直方图统计法,统计以关键点为原点,一定区域内的图像像素点对关键点方向生成所作的贡献。

2.7.2 关键点描述

经过一系列步骤此时对于每一个关键点都拥有三个信息:位置、尺度以及方向。然后就是为每个关键点建立一个描述符,用一组向量将这个关键点描述出来,使其不随各种变化而改变,比如光照和视角等变化。这个描述子不但包括关键点,也包含关键点周围对其有贡献的像素点,并且描述符应该有较高的独特性,以便于提高特征点正确匹配的概率。

SIFT描述子是关键点邻域高斯图像梯度统计结果的一种表示。通过对关键点周围图像区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量对该区域图像信息的表达具有唯一性。

Lowe实验结果表明:描述子采用4×4×8=128维向量表征,综合效果最优(不变性与独特性)。

2.7.3 关键点匹配

(1)分别对模板图(参考图,reference image)和实时图(观测图,observation image)建立关

键点描述子集合。目标的识别是通过两点集内关键点描述子的比对来完成。具有128维的关键点描

述子的相似性度量采用欧式距离。

(2)关键点的匹配可以采用穷举法来完成,但是这样耗费的时间太多,一般都采用kd树的数据结

构来完成搜索。搜索的内容是以目标图像的关键点为基准,搜索与目标图像的特征点最邻近的原图

像特征点和次邻近的原图像特征点。

2.8 SIFT算法实现

2.8.1 SIFT特征检测

由于该二进制文件需要的图像格式是灰度.pgm,所以如果图像为其他格式,我们需要首先将其转换成.pgm格式文件,转换的结果以易读的格式保存在文本文件中。转换代码如下:

def process_image(imagename, resultname, params="--edge-thresh 10 --peak-thresh 5"):""" 处理一幅图像,然后将结果保存在文件中"""if imagename[-3:] != 'pgm':# create a pgm fileim = Image.open(imagename).convert('L')im.save('tmp.pgm')imagename = 

更多推荐

python计算机视觉 局部图像描述子

本文发布于:2024-03-10 03:15:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1726870.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:局部   图像   视觉   计算机   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!