数字图像处理【13】图像特征概述。

news2024/11/29 8:38:42

前言概述

打算用几篇文章回顾OpenCV特征模块(features2d)当中的对象检测(object detection)概念,以及主要的经典算法。这些传统的算法相对于现在来讲,可能有些过时,但对于初学者来说还是有必要学学的。了解掌握什么是图像特征,常见的图像特征,有哪些提取方法,这些特征能做些什么?有哪些应用场景?

1、什么是图像特征?可以表达图像中对象的主要信息、并且以此为依据可以从其他未知图像中检测出相似或者相同的对象。最常见的应用场景就是人脸检测/人脸识别,

2、场景的图像特征包含:角点、边缘、纹理。我们也是从这三个特征点,基于OpenCV的feature2d已有的API去分析。

3、图像特征的描述,包括以下主要的特征提取方法:SIFT、SURF、HOG、Haar、OBR、FLANN、LBP、AKAZE、BRISK等等,

4、图像特征的应用场景,经典的就是以图搜图、全景图像拼接。最广泛的实用场景有:人脸检测、物体识别、车牌识别、OCR等等广泛的智能应用。

初识特征

想象一下拿图片所有像素去进行搜索,如果对其中的所有信息都进行比较的话,那是非常困难、非常耗时、非常耗存储空间。实际上的做法就是把目标图像的一些特征点提取出来,提取出来的特征可能只有几个字节,然后再用这些特征去搜索就非常的方便且快速了。再简单描述下人脸检测,也是通过提取人脸的特征,譬如眼角、嘴唇边缘、鼻孔纹理等一些特征信息,去定位检索人脸所在的区域。

我们来看一个具体的例子,如上图所示,我们从图中任意区域检索出六张子图。AB/CD/EF各一组,对应纹理、边缘、角点三种特征。

  • 先观察第一组A和B,通过纹理特征是否能知道它在原图的具体哪个位置?目前来看,这是很难准确的定位到AB在原图的哪个位置上,因为原图有很多地方是包含类似的特征信息。在二维平坦的图像来说,它没有明显的特征,也不是唯一的,所以单靠纹理这种特征是很难识别出来的。
  • 再来看第二组C和D,通过其边缘的特征,我们可以基本确定是在屋顶这一片区域,但是还是无法确切的知道它是在屋顶的具体哪个位置。
  • 最后看第三组E和F,这一组是两个边角的特征,这时候我们就容易识别出它两在原图的哪个位置上,就是左边第一栋建筑楼顶上。

通过上面的一个简单案例的分析,我们试着总结以下规律:

  1. 图像特征就是指有意义的图像区域,具有独特性,易于识别,比如角点斑点,边缘轮廓,以及高密度区域。
  2. 在三大类特征中:角点的特征足够明显,边缘轮廓次之,平坦的纹理就无法确认其细节了。
  3. 寻找特征的简易方法:首先特征最好是唯一的,而且必须是可追踪可量化的,最后就是这些特征是可以比较的,如果不能比较,那么是不可能在目标图像上寻找到相同or类似的位置或者是描述。

聚焦特征

一般的图像特征提取,我们都聚焦到角点特征上,因为角点特征足够明显。那么对于计算机视觉来说,什么是角点呢?可以简单概述为 灰度的梯度最大值 对应的像素区域。图像灰度是具有阶梯性的,从白到灰依次递进,对应灰度求梯度所对应的最大值的点位置,我们可以定性为其角点特征。另外呢,两条边缘线的交点基本也是确认为一个角点;还有灰度的极值点也是可以确定为角点特征,用数学语言描述就是一阶导数最大值&二阶导数为0(对应Jacobian矩阵 和 Hessian矩阵)。以上这些的条件,对于我们人类来说是不够清晰而且难于描述,但是对于计算机来说,这些都是可量化可理解的。

理解到什么是图像特征之后,那么图像特征有什么作用呢?在传统图像处理中,利用图像的特征进行匹配,进而识别图像中的内容,一般要遵循三个基本步骤,这三步骤统称Feature DDM:

  1. 特征检测提取Detection,特征提取就是从图像中提取出关键点(或特征点、角点)等。
  2. 特征描述Description,特征描述就是用一组数学向量对特征点进行描述,其主要保证不同的向量和不同的特征点之间是一种对应的关系,同时相似的关键点之间的差异尽可能小。
  3. 特征匹配Match,特征匹配其实就是特征向量之间的距离计算,常用的距离有欧氏距离、汉明距离、余弦距离等。

以上内容主要介绍了什么是图像特征,能应用于哪些场景,特征在计算机中是如何定义等一系列概念知识。也了解到通过角点特征,我们立马就可以判断当前特征对应的区域,是否在于原始图像中。后面的文章也是按照Feature DDM去深入展开,了解OpenCV给我们提供了哪些API,学习如何实用这些API以及其背后的基本原理。

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

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

相关文章

netty编程之广播消息

写在前面 本文看下使用netty如何实现广播消息,主要依赖于类io.netty.channel.group.ChannelGroup。 1:正戏 首先定义server: package com.dahuyou.netty.broadcastmsg;import io.netty.bootstrap.ServerBootstrap; import io.netty.chann…

Midjourney中文版教程:参数详解

1.长宽比 可以设置图片的纵横比。按照需求可以选择不同的尺寸,也可以自定义。 注意:--ar必须使用整数。使用139:100代替1.39:1。 长宽比会影响生成图像的形状和构图。 在放大时,某些长宽比可能会稍微改变。 较旧的…

「字符串」详解AC自动机并实现对应的功能 / 手撕数据结构(C++)

前置知识 在此前,你应该首先了解trie树(字典树)的概念: 「字符串」详解Trie(字典树|前缀树)并实现对应的功能 / 手撕数据结构(C) 我们建议你先阅读这篇文章,以了解我们…

C语言-用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数中输出。

题目要求&#xff1a; 用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入&#xff0c;最后在主函数中输出。 程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int arr[100];int* pa…

王者壁纸下载站照片墙-(HTML+CSS)

效果图&#xff1a; 参考源代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>王者荣耀高清壁纸</title><style>#main{width:1366px;height:768px;margin-top:20px;}#main img{width:350px;}…

算法的学习笔记—从上往下打印二叉树(牛客JZ32)

&#x1f600;前言 在二叉树的遍历问题中&#xff0c;从上往下、从左到右打印出二叉树的每个节点值是一种常见的题目类型。这种遍历方式与广度优先搜索&#xff08;BFS&#xff09;密切相关&#xff0c;常常用于需要层次遍历&#xff08;Level-order Traversal&#xff09;的场…

PCIE-Precode

Transmitter Precode Request: Precoding可以有效的降低Burst errors&#xff08;突发连续&#xff09;的影响&#xff0c;但是Bit Error Rate&#xff08;BER&#xff09;将上升为之前的两倍. 32GT/s就必须使用这项功能吗&#xff1f;&#xff1f; [FPGA 实现及PCIe IP 核知…

SD 卡数据恢复免费版软件推荐及无法读取修复指南!

SD 卡数据怎么恢复&#xff1f;SD卡无法读取怎么修复&#xff1f;有没有SD卡数据恢复免费版&#xff1f; 在如今数字化的时代&#xff0c;SD 卡作为我们存储珍贵记忆和重要文件的常用工具&#xff0c;一旦出现数据丢失或无法读取的情况&#xff0c;往往会让人感到焦虑和无助。…

JAVA中的语序

目录 1. 顺序 2. 分支 2.1 if语句 2.1.1 单一条件的if语句 2.1.2 if-else语句 2.1.3 多层if-else语句 2.2 switch语句 3. 循环 3.1 for循环 3.2 while循环 3.3 do-while循环 3.4 break和continue 语序即代码运行的顺序&#xff0c;主要分为三种&#xff0c;顺序、分…

Java数组怎么转List,Stream的基本方法使用教程

Stream流 Java 的 Stream 流操作是一种简洁而强大的处理集合数据的方式,允许对数据进行高效的操作,如过滤、映射、排序和聚合。Stream API 于 Java 8 引入,极大地简化了对集合(如 List、Set)等数据的处理。 一、创建 Stream 从集合创建: List<String> list = Ar…

C#用户控件usercontrol中的子控件事件及属性的传递

也不知道这个标题怎么写&#xff0c;但是问题是个老问题&#xff0c;大家都可能遇到过&#xff0c;不过有同学问到&#xff0c;那就写出来。其实很简单。只不过有的同学看了其他博文后脑子还是懵懵的。所以这里就分两部分来说明一下。 文章目录 一、属性的传递1、原理2、步骤3…

一个实验带你全面学废网络OSPF协议内容

文章目录 一、OSPF实验与原理1. 多区域与虚链路配置及原理2. OSPF区域与接口认证的方法3. OSPF的Cost 值的作用4. 明白OSPF引入缺省、直连路由、宣告路由方法5. 描述OSPF区域间路由汇总和外部路由汇总6. 描述OSPF的5种类型的LSA区别&#xff0c;以及作用7. 控制OSPF的DR与BDR选…

微信小程序——弹出隐私指引教程(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【echarts】ECharts 解决地图标签重叠问题的技术实践

ECharts 解决地图标签重叠问题的技术实践 在使用 ECharts 绘制地图时&#xff0c;遇到的一个常见问题是某些地区的名称标签会因为地理位置接近而出现重叠&#xff0c;导致可读性变差。为了提升地图的展示效果&#xff0c;确保每个地区的名称都能清晰可见&#xff0c;我们可以通…

Java语言程序设计——篇十五(4)

&#xff1a; &#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;…

亦菲喊你来学习之机器学习(7)--逻辑回归内下采样

文章目录 下采样优缺点下采样步骤总结 下采样 在逻辑回归中&#xff0c;下采样是一种处理数据不平衡问题的方法&#xff0c;特别是在处理二分类问题时&#xff0c;如果某一类的样本数量远多于另一类&#xff0c;就可能导致模型偏向于多数类&#xff0c;从而忽略了少数类的特征…

基于推荐算法的景点攻略网站的设计与实现---附源码130855

摘 要 21世纪时信息化的时代&#xff0c;几乎任何一个行业都离不开计算机&#xff0c;将计算机运用于旅游景点分享也是十分常见的。过去使用传统广告方式对旅游景点进行推荐分享&#xff0c;造成了流程繁琐、难以维护&#xff0c;难于进准推荐给适合需求的人群等问题&#xff0…

java15-网络编程

一 网络编程概述 1.1 网络编程简介 其实&#xff0c;所谓的网络编程&#xff0c;就是编写程序&#xff0c;实现让同一个网络中的机器实现数据的传递&#xff0c;实现通信。 Java是 Internet 的语言&#xff0c;它从语言级上提供了对网络应用程序的支持。 Java提供的网络类库&a…

注册Github账号详细过程

目录 一、准备工作 二、注册步骤 一、准备工作 在注册GitHub账号之前&#xff0c;请确保您已经准备好以下信息&#xff1a; 一个有效的电子邮箱地址&#xff1a;用于接收验证邮件和GitHub的后续通知。 用户名&#xff1a;确保该用户名在GitHub上是唯一的&#xff0c;且符合…

如何选择合适的端口管控软件

一、明确需求 管控的端口类型&#xff1a;首先确定需要管控的端口类型是USB端口&#xff0c;还是需要同时管控串口、并口等其他类型的端口。 管控的力度&#xff1a;确定是需要对所有端口进行统一管控&#xff0c;还是需要根据不同的用户或部门实施不同的策略。 日志记录需求…