python图像局部特点_GitHub - hongrui16/PythonComputerVision-2-SIFT: 局部图像描述子,介绍用于图像匹配对两种描述子算法,分别使用SIFT以及Harr...

本文介绍了图像匹配中的关键算法——SIFT和Harris角点检测。SIFT是尺度不变特征变换,提供旋转、缩放、亮度不变性,而Harris角点检测用于检测图像中的显著变化点。通过实例展示了SIFT和Harris在图像匹配中的应用,比较了两者在匹配效果上的差异。SIFT在描述子的区分性和稳定性方面表现出色,适合大规模特征库匹配,而Harris算法在某些情况下可能产生误匹配。
摘要由CSDN通过智能技术生成

* 图像局部特征描述子

一幅图像是由固定个数等像素点组成等,每幅图像中总存在着其独特等像素点,我们称这些点为图像点特征点。今天要介绍点计算机视觉领域点图像特征匹配就是以各个图像的特征点为基础而进行的。本文介绍了两种特征点以及特征匹配方法。本文主要讲解局部图像描述子,即介绍用于图像匹配对两种描述子算法,阐述其原理,并且分别使用SIFT以及Harris对两幅图像检测匹配举例、通过SIFT匹配地理标记图像等实际操作。

一.图像匹配

图像匹配,就是通过找出所给出的每幅图像中点特征点,来与另外一幅图片中的特征点进行一一匹配,从而找到两幅或多幅图片之间的联系。常用的匹配方法有SIFT以及Harris两种,因SIFT(尺度不变特征变换)是过去十年中最成功的图像局部描述算子之一,故下文着重介绍SIFT。

二.Harris角点

Harris算子是一种角点特征,所谓角点,就是局部窗口沿各方向移动,均产生明显变化的点、图像局部曲率突变的点,典型的角点检测算法有:

• Harris角点检测

• CSS角点检测

下图所示为“角点”:

1.如何检测出Harris角点?

角点检测最早期的想法就是取某个像素的一个邻域窗口。当这个窗口在像素点各个方向上进行移动时,观察窗口内平均的像素灰度值的变化,若变化巨大,则为角点,若单一方向无变化则为平滑,垂直方向变化大则为边缘。从下图可知,我们可以将一幅图像大致分为三个区域(‘flat’,‘edge’,‘corner’),这三个区域变化是不一样的。

其数学表达式为:

将图像窗口平移[u,v]产生灰度变化E(u,v)

我们把图像域中点x上的对称半正定矩阵定义为:

M为自相关函数E(x,y)的近似Hessian矩阵(M为22矩阵)。

设 λ1、λ2 λ1、λ2为M的特征值,定义角点相应函数R为:

R=λ1λ2−k(λ1+λ2)2,即

R=det(M)−k(tr(M))2

det(M)=λ1λ2

tr(M)=λ1+λ2

2.图片匹配实例

Harris.py代码如下:

#-*- coding: utf-8 -*-

from pylab import *

from PIL import Image

from PCV.localdescriptors import harris

from PCV.tools.imtools import imresize

"""

This is the Harris point matching example in Figure 2-2.

"""

#Figure 2-2上面的图

#im1 = array(Image.open("../data/crans_1_small.jpg").convert("L"))

#im2 = array(Image.open("../data/crans_2_small.jpg").convert("L"))

#Figure 2-2下面的图

im1 = array(Image.open("../data/sf_view1.jpg").convert("L"))

im2 = array(Image.open("../data/sf_view2.jpg").convert("L"))

#resize to make matching faster

im1 = imresize(im1, (im1.shape[1]/2, im1.shape[0]/2))

im2 = imresize(im2, (im2.shape[1]/2, im2.shape[0]/2))

wid = 5

harrisim = harris.compute_harris_response(im1, 5)

filtered_coords1 = harris.get_harris_points(harrisim, wid+1)

d1 = harris.get_descriptors(im1, filtered_coords1, wid)

harrisim = harris.compute_harris_response(im2, 5)

filtered_coords2 = harris.get_harris_points(harrisim, wid+1)

d2 = harris.get_descriptors(im2, filtered_coords2, wid)

print 'starting matching'

matches = harris.match_twosided(d1, d2)

figure()

gray()

harris.plot_matches(im1, im2, fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值