目录

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

1.1 SIFT简介

1.2 SIFT算法可以解决的问题

1.3 SIFT算法实现特征匹配的三个主要流程

1.4 关键点检测的相关概念

1.4.1 哪些点是SIFT中要查找的关键点(特征点)?

1.4.2 什么是尺度空间(scale space )?

1.4.3 高斯模糊

1.4.4 高斯金字塔

1.5 关键点检测——DOG

1.5.1 DoG(Difference of Gaussian)函数

1.5.2 DoG高斯差分金字塔

1.6 关键点匹配

1.7 SIFT算法实现

1.8 SIFT特征匹配

​ 二、匹配地理标记图像

2.1匹配地理标记图像代码:


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

1.1 SIFT简介

SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。

1.2 SIFT算法可以解决的问题

• 目标的旋转、缩放、平移(RST)
        • 图像仿射/投影变换(视点viewpoint)
        • 弱光照影响(illumination)
        • 部分目标遮挡(occlusion)
        • 杂物场景(clutter)
        • 噪声

1.3 SIFT算法实现特征匹配的三个主要流程

1、提取关键点;

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

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

1.4 关键点检测的相关概念

1.4.1 哪些点是SIFT中要查找的关键点(特征点)?

这些点是一些十分突出的点,不会因光照、尺度、旋转等因素的改变而消失,比如角点、边缘点、暗区域的亮点以及亮区域的暗点。假定两幅图像中有相同的景物,那么使用某种算法分别提取各自的特征点,这些点之间会有相互对应的匹配关系。

1.4.2 什么是尺度空间(scale space )?

尺度空间理论最早于1962年提出,其主要思想是通过对原始图像进行尺度变换,获得图像多尺度下的空间表示。从而实现边缘、角点检测和不同分辨率上的特征提取,以满足特征点的尺度不变性。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网
膜上的形成过程。尺度越大图像越模糊。

1.4.3 高斯模糊

高斯模糊是在Adobe Photoshop等图像处理软件中广泛使用的处理效果,通常用它来减小图像噪声以及降低细节层次。这种模糊技术生成的图像的视觉效果是好像经过一个半透明的屏幕观察图像。

1.4.4 高斯金字塔

高斯金字塔的构建过程可分为两步:
(1)对图像做高斯平滑;
(2)对图像做降采样。
为了让尺度体现其连续性,在简单下采样的基础上加上了高斯滤波。一幅图像可以产生几组(octave)图像,一组图像包括几层(interval)图像。

1.5 关键点检测——DOG

1.5.1 DoG(Difference of Gaussian)函数

1.5.2 DoG高斯差分金字塔

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

1.6 关键点匹配

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

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

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

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

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

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

1.7 SIFT算法实现

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
from PCV.localdescriptors import sift# 添加中文字体支持
from matplotlib.font_manager import FontPropertiesfont = FontProperties(fname=r"C:\Windows\Fonts\simsun.ttc", size=14)imname = '456.jpg'# 以灰度图的方式读入图片
im = np.array(Image.open(imname).convert('L'))
# 引用sift.py中的process_image将图像文件转化为pgm格式
sift.process_image(imname, '456.sift')
# l1为兴趣点坐标、尺度和方位角度,d1是对应描述符的128 维向量
l1, d1 = sift.read_features_from_file('456.sift')plt.figure()
plt.gray()
plt.subplot(131)
plt.imshow(im, cmap='gray')
plt.axis('off')
plt.title(u'原图像', fontproperties=font)plt.subplot(132)
sift.plot_features(im, l1, circle=False)
plt.title(u'SIFT特征', fontproperties=font)plt.subplot(133)
sift.plot_features(im, l1, circle=True)
plt.title(u'圆圈表示特征尺度的SIFT特征', fontproperties=font)plt.show()

运行结果:

1.8 SIFT特征匹配

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import sys
from PCV.localdescriptors import sift# 添加中文字体支持
from matplotlib.font_manager import FontPropertiesfont = FontProperties(fname=r"C:\Windows\Fonts\simsun.ttc", size=14)im1path = '456.jpg'
im2path = '789.jpg'im1 = np.array(Image.open(im1path))
im2 = np.array(Image.open(im2path))sift.process_image(im1path, 'out_sift_456.txt')
l1, d1 = sift.read_features_from_file('out_sift_789.txt')
plt.figure()
plt.gray()
plt.subplot(121)
sift.plot_features(im1, l1, circle=False)
plt.title(u'第一幅图SIFT特征', fontproperties=font)sift.process_image(im2path, 'out_sift_ZS1.txt')
l2, d2 = sift.read_features_from_file('out_sift_ZS1.txt')
plt.subplot(122)
sift.plot_features(im2, l2, circle=False)
plt.title(u'第二幅图SIFT特征', fontproperties=font)# 输出两张图像的匹配度
matches = sift.match_twosided(d1, d2)
print('{} matches'.format(len(matches.nonzero()[0])))plt.figure()
plt.gray()
sift.plot_matches(im1, im2, l1, l2, matches, show_below=True)
plt.show()

运行结果:

二、匹配地理标记图像

2.1匹配地理标记图像代码:

# -*- coding: utf-8 -*-
# from pylab import *
import numpy as np
from PIL import Image
from PCV.localdescriptors import sift
import pydotimport os
def get_imlist(path):return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]# 将其设置为存储图像的路径
download_path = "H:\zhifangtu"
# 保存缩略图的路径(pydot需要完整的系统路径)
path = "H:\\zhifangtu\\TUPIAN"# 下载的文件名列表
imlist = get_imlist(download_path)
nbr_images = len(imlist)# 提取特征
featlist = [imname[:-3] + 'sift' for imname in imlist]
for i, imname in enumerate(imlist):sift.process_image(imname, featlist[i])matchscores = np.zeros((nbr_images, nbr_images))for i in range(nbr_images):for j in range(i, nbr_images):  # 仅仅计算上三角print('comparing ', imlist[i], imlist[j])l1, d1 = sift.read_features_from_file(featlist[i])l2, d2 = sift.read_features_from_file(featlist[j])matches = sift.match_twosided(d1, d2)nbr_matches = sum(matches > 0)print('number of matches = ', nbr_matches)matchscores[i, j] = nbr_matches
print("The match scores is: \n", matchscores)# 复制值
for i in range(nbr_images):for j in range(i + 1, nbr_images):  # 无需复制对角线matchscores[j, i] = matchscores[i, j]# 可视化
threshold = 2  # 创建关联所需的最小匹配数目g = pydot.Dot(graph_type='graph')  # 不使用默认的有向图for i in range(nbr_images):for j in range(i + 1, nbr_images):if matchscores[i, j] > threshold:# 图像对中的第一幅图像im = Image.open(imlist[i])im.thumbnail((100, 100))filename = path + str(i) + '.jpg'im.save(filename)  # 需要大小合适的临时文件g.add_node(pydot.Node(str(i), fontcolor='transparent', shape='rectangle', image=filename))# 图像对中的第一幅图像im = Image.open(imlist[j])im.thumbnail((100, 100))filename = path + str(j) + '.jpg'im.save(filename)  # 需要大小合适的临时文件g.add_node(pydot.Node(str(j), fontcolor='transparent', shape='rectangle', image=filename))g.add_edge(pydot.Edge(str(i), str(j)))
g.write_png('jmu.jpg')
print('结束')

图片展示:

运行结果:

计算机视觉——基于sift算法的地理信息图像匹配相关推荐

  1. 计算机视觉课程-SIFT算法特征检测

    计算机视觉课程作业-SIFT算法特征检测 1.实验内容 1.1实验目的: 采集两幅图像,要求有视角和比例变化,完成两幅图像的SIFT特征检测,并对实验结果进行比较分析. 实验的问题是将同一个物体或事物 ...

  2. python实现基于SIFT算法的图像配准(仿射变换)

    话不多说,直接上代码,可以用的话别忘了请喝可乐!(手动笑哭脸) [用法] 第45.46行的输入: img1 = cv2.imread('sift/3.jpg') img2 = cv2.imread(' ...

  3. 【老生谈算法】matlab实现sift算法的图像匹配——sift算法

    基于sift算法的图像匹配matlab实现 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]基于sift算法的图像匹配matlab实现. ...

  4. 无人机航拍图像匹配——SIFT算法实践(含代码)

    无人机航拍图像匹配--SIFT算法实践(含代码) 一.摘要 二.SIFT算法的原理 1.尺度空间极值检测 &关键点定位 尺度不变性&尺度空间 高斯金字塔 2.方向分配 3.特征描述 4 ...

  5. 尺度不变特征变换(SIFT算法)Matlab程序代码测试例子的说明(Lowe的代码)

    目前网络上可以找到的关于SIFT算法Matlab测试代码的资源就是: 1 加拿大University of British Columbia 大学计算机科学系教授 David G. Lowe发表于20 ...

  6. 【计算机视觉】局部图像描述子:SIFT算法

    文章目录 [计算机视觉]局部图像描述子:SIFT算法 1. SIFT算法的原理 1.1 SIFT算法的目标与思想 1.1.1 算法目标 1.1.2 算法思想 1.2 尺度空间的思想和表示 1.2.1 ...

  7. m基于sift特征提取和模板匹配的车标识别算法matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 车标识别技术研究是近几年出现的,尚未成熟.智能交通系统主要应用于高速公路收费管理系统.高速公路超速自 ...

  8. 计算机视觉CV中特征点提取SIFT算法的学习笔记

    1 SIFT算法介绍 SIFT算法,即 Scale-Invariant Feature Transform,尺度无关的特征变换算法. 2 SIFT算法的主要步骤 2.1 生成特征点 2.1.1生成尺度 ...

  9. 基于sift的医学图像配准算法matlab版

    当进行医学图像配准时,SIFT (Scale-Invariant Feature Transform) 算法是一种广泛使用的特征提取和匹配算法.它具有良好的尺度不变性和鲁棒性,可以在不同的图像尺度下检 ...

最新文章

  1. JVM中线程是否可以并行执行
  2. 轻松构建微服务之分布式锁
  3. 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点[数据结构]
  4. 基于MATLAB的RGB转YCBCR色彩空间转换
  5. html中滚动栏的样式
  6. HashMap为什么在多线程下会让cpu100%
  7. c语言贪吃蛇_C语言贪吃蛇完整代码
  8. 蜜蜂路线(洛谷P2437题题解,Java语言描述)
  9. AD教程系列 | 1-认识基本电子元器件、封装和读数
  10. 前端开发面试题收集 JS
  11. matlab卷积神经网络代码_卷积神经网络(四):反向传播过程的代码实现
  12. 中安网培***入门教程
  13. vim编辑器 解决vim编辑异常
  14. 计算机工作区如何删除,Windows Ink工作区是什么,怎么打开/关闭Windows Ink?
  15. TMS28335 XINTF
  16. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——2.2 令牌和数据类型...
  17. DataType 数据类型
  18. layui 搜索 重置 自动刷新
  19. Perl常用模块使用例子
  20. 2020牛客多校第八场E-Enigmatic Partition(隔项差分)

热门文章

  1. 计算机视觉python--基础矩阵和极点极线
  2. VBA 关于for循环和变量的测试, for 循环的自变量i会停留在i+1,自变量会基于最新变化改变
  3. vba中MsgBox的参数及用法
  4. 计算机和局域网络的保密管理,浅析计算机局域网的安全保密与管理.doc
  5. 江西省南昌市谷歌高清卫星地图下载(百度网盘离线包下载)
  6. PHP多人聊天系统,ttltCha​tPHP多人在线聊天系统软件源码 v0.0.12
  7. 关于在word里的表格里面打公式出现换行问题
  8. 微信群控服务器一体机,群控和微信群控,你了解多少?
  9. grpc报错: java.nio.channels.UnresolvedAddressException : null
  10. Spring JDBC与事务管理