OpenCV与图像处理学习十四——SIFT特征(含代码)

OpenCV与图像处理学习十四——SIFT特征(含代码)

  • 一、SIFT算法
  • 二、SIFT实现过程
  • 三、代码实现

一、SIFT算法

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

其应用范围包含物体辨识、 机器人地图感知与导航、 影像缝合、 3D模型建立、手势辨识、 影像追踪和动作比对,应用广泛。

二、SIFT实现过程

SIFT特性

  1. 独特性, 也就是特征点可分辨性高, 类似指纹, 适合在海量数据中匹配。
  2. 多量性, 提供的特征多。
  3. 高速性, 就是速度快。
  4. 可扩展, 能与其他特征向量联合使用。

SIFT特点

  1. 旋转、 缩放、 平移不变性
  2. 解决图像仿射变换, 投影变换的关键的匹配
  3. 光照影响小
  4. 目标遮挡影响小
  5. 噪声景物影响小

SIFT算法步骤

  1. 尺度空间极值检测点检测
  2. 关键点定位: 去除一些不好的特征点, 保存下来的特征点能够满足稳定性等条件
  3. 关键点方向参数: 获取关键点所在尺度空间的邻域, 然后计算该区域的梯度和方向, 根据计算得到的结果创建方向直方图, 直方图的峰值为主方向的参数
  4. 关键点描述符: 每个关键点用一组向量(位置、 尺度、 方向) 将这个关键点描述出来, 使其不随着光照、 视角等等影响而改变
  5. 关键点匹配: 分别对模板图和实时图建立关键点描述符集合, 通过对比关键点描
    述符来判断两个关键点是否相同

三、代码实现

import cv2
import numpy as npimg = cv2.imread('image/harris2.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(gray, None)     # 找到关键点
img = cv2.drawKeypoints(gray, kp, img)      # 绘制关键点
cv2.imshow('sp', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下所示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tf.TensorArray

TensorArray可以看做是具有动态size功能的Tensor数组。通常都是跟while_loop或map_fn结合使用。 ta tf.TensorArray(size, dtype, dynamic_sizeTrue) # dynamic_size指定数组长度可变 ta.stack(nameNone) # 将TensorArray中元素叠起来当做一个Tensor输出 ta.unstack(value,…

液态大脑与固态大脑——圣塔菲最新群体智能文集

来源:The Royal society撰文 | Ricard Sol, Melanie Moses, and Stephanie Forrest大脑,神经元构成的器官根植于许多生物体内。这是一种固态的大脑,且组成它们的元素在空间中相对固定。但是相对的,大脑是否可以拥有流动不定的存在…

设置按钮中的图片的旋转,并且旋转之后不变形

1、设置按钮属性:self.titleBtn.imageView.contentMode UIViewContentModeCenter;self.titleBtn.imageView.clipsToBounds NO; 2、处理点击事件 - (void)titleBtnClick {self.titleBtn.imageView.transform CGAffineTransformMakeRotation(M_PI_2); }转载于:http…

OpenCV与图像处理学习十五——LBP纹理特征(含代码)

OpenCV与图像处理学习十五——LBP纹理特征(含代码)一、LBP介绍二、LBP原理三、代码应用一、LBP介绍 LBP(Local Binary Pattern, 局部二值模式) , 是一种用来描述图像局部纹理特征的算子; 它具有…

pycharm运行程序时看不到任何结果显示

原因是用程序选择了console来运行,取消console方法如下: Run->Edit Configurations 取消run with python console的勾

iOS 的 XMPPFramework 简介

XMPPFramework是一个OS X/iOS平台的开源项目,使用Objective-C实现了XMPP协议(RFC-3920),同时还提供了用于读写XML的工具,大大简化了基于XMPP的通信应用的开发。 1. 登录和好友上下线 1.1XMPP中常用对象们 XMPPStream&a…

OpenCV与图像处理学习十六——模板匹配

OpenCV与图像处理学习十六——模板匹配一、模板匹配介绍二、代码应用一、模板匹配介绍 模板匹配是一种最原始、最基本的模式识别方法,研究某一特定目标的图像位于图像的什么地方,进而对图像进行定位。 在待检测的图像上,从左到右&#xff0…

李剑锋:意识科学就在身边

来源: 科技日报-中国科技网近些年,生命科学家开始关注神奇的大脑,因此各国纷纷提出各自的脑计划;当前有一个更基础的、但极富争议性的领域却被大家忽视了,就是意识科学。事实脑计划的终点应该就是意识科学,但由于目前大…

tf.train.get_checkpoint_state

函数功能:找出训练时保存的模型 ckpt.model_checkpoint_path可以找出所有模型中最新的模型 ckpt tf.train.get_checkpoint_state(/mnist/summary/train) if ckpt and ckpt.model_checkpoint_path:print(ckpt.model_checkpoint_path) 输出: /mnist/s…

永恒的终结

无意间在豆瓣发现这本书,是阿西莫夫写的,对他的基地系列和银河帝国系列仰慕很久了,却因太长没有时间看.看这本<<永恒的终结>>篇幅不是很长,也就拿过来看了. 故事是这样的.在24世纪一个叫马兰松的的科学家发明了一种叫"时空力场"的东西,东西太超前,人们在…

OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)

OpenCV与图像处理学习十七——OpenCV人脸检测&#xff08;含代码&#xff09;一、人脸识别概要1.1 人脸检测1.2 人脸对齐&#xff08;Face Alignment&#xff09;1.3 人脸特征提取&#xff08;Face Feature Extraction&#xff09;1.4 人脸识别&#xff08;Face Recognition&am…

清华大学:人工智能之知识图谱(附PPT)

来源&#xff1a;笑看国际风云【导读】知识图谱&#xff08;Knowledge Graph)是人工智能重要分支知识工程在大数据环境中的成功应用&#xff0c;知识图谱与大数据和深度学习一起&#xff0c;成为推动互联网和人工智能发展的核心驱动力之一。基于此背景&#xff0c;《人工智能之…

RandomShuffleQueue '_1_input/shuffle_batch/random_shuffle_queue' is closed and has insufficient elem

TensorFlow报错&#xff1a; RandomShuffleQueue _1_input/shuffle_batch/random_shuffle_queue is closed and has insufficient elements (requested 128, current size 0) image tf.decode_raw(features[image_raw], tf.float32) 将tf.float32改成tf.float64或者tf.uint…

Day10

会议讨论 628&#xff1a;今天是冲刺的最后一天了&#xff0c;好紧张好激动&#xff0c;我们组还有好些个功能没实现呢&#xff0c;感觉崩崩哒&#xff01;还要实现选择不同的专业导入不同的课表呢。 601&#xff1a;在修改教师帐号信息的页面要有当密码格式、用户名格式等不符…

有关EUV光刻机,你需要知道这些

来源&#xff1a;technews晶圆制造产业进入7 纳米制程之后&#xff0c;目前全世界仅剩台积电与三星&#xff0c;再加上号称自家10 纳米制程优于竞争对手7 纳米制程的英特尔等&#xff0c;有继续开发能力之外&#xff0c;其他竞争者因须耗费大量金钱与人力物力的情况下&#xff…

读取打印TFRecord格式数据

在读取和打印TFRecord格式数据时&#xff0c;必须加入线程机制&#xff0c;否则打印不出任何结果 import tensorflow as tffilename_queue tf.train.string_input_producer([train.tfrecords], shuffleTrue) reader tf.TFRecordReader() _, serialized_example reader.read…

Java finally 的用法

Java finally 的用法&#xff0c;看这一篇就够了

我的iOS学习历程 - UISegmentedControl

今天学习的是UISegmentedControl,相当于一个切换的分区栏,例如看小说会分最新,最热等,可以用此控件来进行切换 1.初始化(用数组进行初始化)并添加到视图上 // 数组中初始化必须是字符串 或者 图片 // 如果选用图片初始化 必须使用镂空图NSArray *stringArray ["第…

多家巨头实测鸿蒙系统:比安卓快60%

来源&#xff1a;腾讯新闻&#xff0c;数码科技大爆炸众所周知&#xff0c;近期&#xff0c;华为被打压和打击的事件一直没有停止&#xff0c;但华为并没有坐以待毙&#xff0c;很快就启动了“备胎计划”给予积极的回击和反击&#xff0c;像保险柜里的海思“备胎芯片”、华为自…

numpy将bool值转换成数值

用np.array().astype(int) label np.array([0, 1, 0]) predict_label np.array([1, 0, 0]) false_num np.array(label ! predict_label).astype(int) print(false_num) # [1 1 0]