前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快乐学AI系列——计算机视觉(2)特征提取和描述

快乐学AI系列——计算机视觉(2)特征提取和描述

原创
作者头像
MATRIX.矩阵之芯
发布2023-03-29 14:38:36
6680
发布2023-03-29 14:38:36
举报
文章被收录于专栏:快乐学AI系列快乐学AI系列

本系列是由“MATRIX.矩阵之芯”精炼的AI快速入门系列,特色是内容简洁,学习快速。

相关要求:学员需要掌握Python编程基础,另外还需要有一定的线性代数、概率论基础。

第二章:特征提取和描述

在计算机视觉中,图像特征是指从图像中提取出的一些有意义的信息,如边缘、角点、颜色等。通过对图像特征的提取,可以将图像转换为可处理的数字形式,从而使计算机能够理解和处理图像。

边缘检测和角点检测

在计算机视觉中,边缘和角点是图像中具有重要意义的特征。在本节中,我们将介绍边缘检测和角点检测的基本概念和常用算法。

边缘检测

边缘是图像中灰度值明显变化的地方,可以用来表示图像中物体的边界信息。在计算机视觉中,常用的边缘检测算法包括Sobel算法、Canny算法等。

  • Sobel算法

Sobel算法是一种简单且有效的边缘检测算法,其基本思想是利用图像灰度值的变化来检测图像中的边缘。Sobel算法使用一组3×3的卷积核来计算图像中每个像素点的梯度值,进而检测图像中的边缘。

具体来说,Sobel算法可以通过以下步骤来实现:

1、将图像转化为灰度图像; 2、使用Sobel卷积核计算图像的梯度值; 3、对梯度值进行阈值处理,以检测图像中的边缘。

Sobel算法的优点是简单易实现,适用于各种类型的图像。但其缺点是对于噪声比较敏感,容易出现误检测。

来个例子:

代码语言:javascript
复制
import cv2
import numpy as np

# 读取图像 原图+黑白图
img = cv2.imread('image.jpg')
cv2.imshow("Image", img)

img = cv2.imread('image.jpg', 0)

# Sobel算子进行边缘检测
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)

# 取绝对值并转换成uint8
abs_sobelx = cv2.convertScaleAbs(sobelx)
abs_sobely = cv2.convertScaleAbs(sobely)

# 合并两个方向的边缘检测结果
sobel = cv2.addWeighted(abs_sobelx, 0.5, abs_sobely, 0.5, 0)

# 显示结果
cv2.imshow('sobel', sobel)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • Canny算法

Canny算法是一种常用的边缘检测算法,其主要特点是能够在减少噪声干扰的同时,准确地检测出图像中的边缘。Canny算法包括以下几个步骤:

1、高斯滤波:对图像进行高斯滤波,以平滑图像,减少噪声干扰; 2、梯度计算:使用Sobel算子计算图像中每个像素点的梯度值和方向; 3、梯度幅值和非极大值抑制:对梯度幅值进行非极大值抑制,以获得更为精确的边缘信息; 4、阈值处理:对梯度幅值进行阈值处理,以得到最终的边缘图像。

Canny算法的优点是能够准确地检测出图像中的边缘,且对于噪声干扰的鲁棒性较强。但是,Canny算法在实际应用中也存在一些缺陷,例如:

参数设置较为复杂:Canny算法中需要设置阈值参数来确定边缘的强度,这些参数的选取对于算法的效果有很大的影响。因此,在实际应用中需要经过多次实验来确定最优的参数。 对于一些特殊情况,检测效果不佳:例如对于图像中存在大量直线的情况,Canny算法容易将这些直线误认为是边缘。 计算量较大:Canny算法中需要进行高斯滤波、梯度计算、非极大值抑制、双阈值处理等多个步骤,计算量较大,因此需要较高的计算资源。

除了Canny算法,还有一些其他的边缘检测算法,例如Sobel算子、Prewitt算子、Laplacian算子等。这些算法各有优缺点,选择合适的算法需要根据具体的应用场景来确定。同时,角点检测也是计算机视觉中常用的技术之一,它可以检测出图像中的角点,是很多视觉任务的基础。常用的角点检测算法有Harris角点检测算法、Shi-Tomasi角点检测算法等。

下图是一个简单实例:

特征点检测和匹配

特征点检测和匹配是计算机视觉中的重要内容。特征点是指在图像中比较明显的、能够用数学方法进行描述的点,如角点、边缘点等。特征点检测的目的是在图像中找到这些特征点。特征点匹配的目的是在不同图像中寻找对应的特征点,用于图像配准、三维重建等应用。

特征点检测的基本概念和方法

特征点检测是计算机视觉中的基本问题之一,也是很多应用的关键。其基本思想是通过寻找在图像中具有不变性、可重复性和区分性的特殊点,来对图像进行描述和匹配。

特征点的本质是图像中的局部特征,与整体图像的变换(平移、旋转、缩放等)具有不变性,能够准确地表达图像的局部特征,常用于图像匹配、目标跟踪、三维重建等应用。

特征点检测的基本流程如下:

1、构建图像金字塔:为了尺度不变性,在不同尺度下检测特征点,需要构建图像金字塔。 2、计算图像的梯度:使用Sobel、Laplacian等算子计算图像在x、y方向的梯度。 3、计算特征点响应值:特征点通常具有高斯变换下的局部极值,可以使用Harris角点检测、SIFT、SURF等算法来计算特征点的响应值。 4、非极大值抑制:为了避免检测到重复的特征点,需要在局部极值点周围进行非极大值抑制。 5、消除边缘响应:由于边缘在图像梯度方向上也具有极大值,需要消除边缘响应。 6、特征点定位:对于检测到的局部极值点,通常需要进行亚像素精度的定位,以提高匹配的精度。一个经典的亚像素精度的定位方法是图像金字塔,它通过不断缩小图像的尺寸来提高特征点的定位精度。 7、特征点匹配:通过特征点的描述子进行匹配,以确定图像之间的对应关系。特征点的描述子可以使用如SIFT、SURF、ORB等算法提取,这些算法能够有效地描述特征点周围的图像特征,从而提高匹配的准确性。

特征点检测和匹配在计算机视觉领域中得到了广泛应用,例如在目标检测、物体跟踪、图像配准等方面都有重要作用。

常用的特征点检测算法

  • Harris角点检测算法

Harris角点检测算法是一种经典的角点检测算法,由Chris Harris和Mike Stephens在1988年提出。该算法是一种基于局部灰度变化的角点检测方法,能够检测出图像中的角点和边缘,并且具有较高的鲁棒性和稳定性。

Harris角点检测算法的基本思想是通过计算图像中每个像素点周围灰度变化的大小和方向,来判断该点是否为角点。具体实现方法是通过计算图像中每个像素点周围灰度值的变化率和方向来判断该点是否为角点,变化率越大,说明该点越可能是角点。

  • SIFT算法

SIFT(Scale Invariant Feature Transform)算法是一种基于尺度空间的特征点检测和描述算法,由David Lowe在1999年提出。该算法可以在不同尺度和旋转角度下提取图像中的稳定的特征点,并且具有较高的鲁棒性和稳定性。

SIFT算法的基本思想是通过构建尺度空间来检测图像中的稳定的特征点,并通过描述这些特征点的局部特征来进行特征点的匹配。具体实现方法是通过对图像进行高斯模糊和降采样操作来构建尺度空间,并通过Difference of Gaussian(DoG)算法来检测尺度空间中的极值点,然后通过关键点的方向和尺度信息来描述关键点的局部特征。

  • SURF算法

SURF(Speeded Up Robust Features)算法是一种快速的特征点检测和描述算法,由Herbert Bay等人在2006年提出。该算法基于SIFT算法,但是通过一系列优化措施来提高算法的速度和鲁棒性。

SURF算法的基本思想是通过构建尺度空间和积分图像来检测图像中的稳定的特征点,并通过描述这些特征点的局部特征来进行特征点的匹配。具体实现方法是通过高斯差分算子来构建尺度空间,使用积分图像来计算图像的Hessian矩阵,并通过Hessian矩阵的特征值来判断关键点的稳定性和方向。

  • ORB算法

ORB(Oriented FAST and Rotated BRIEF)算法是一种快速的特征点检测和描述算法,它在FAST关键点检测算法和BRIEF特征描述算法的基础上进行了改进。ORB算法的主要优点是具有较快的计算速度和较高的检测准确率,同时还具备尺度不变性、旋转不变性和鲁棒性等特点。

ORB算法采用FAST关键点检测算法来检测图像中的关键点,然后使用BRIEF算法来描述关键点的特征。为了提高ORB算法的鲁棒性,还引入了方向分配和旋转不变性的处理方法。具体来说,ORB算法会首先计算每个关键点的方向,然后在描述关键点特征时,通过对描述子进行旋转,使其具有旋转不变性。

除了Harris角点检测、SIFT、SURF和ORB算法外,还有一些其他常用的特征点检测和描述算法,例如:KAZE、AKAZE、BRISK、FREAK等。这些算法各具特点,应根据实际应用场景选择合适的算法。

SIFT和SURF特征描述

SIFT和SURF算法除了可以进行特征点检测之外,还可以进行特征描述。这些算法对于检测到的关键点周围的局部区域进行描述,并生成一个向量。这些向量通常用于图像匹配和目标识别任务。

在SIFT算法中,使用高斯差分函数来寻找局部极值点。在每个极值点周围的区域中,通过方向直方图来描述其特征。该算法生成128维的向量。

而SURF算法则使用了尺度不变性特征变换(Scale-Invariant Feature Transform, SIFT)的思想,并采用了一种称为加速积分图像(integral image)的技术来加速计算。该算法生成了一个64维的向量。

在图像匹配时,通常使用特征描述向量之间的欧氏距离或余弦相似度进行匹配。如果两个向量之间的距离小于一个特定的阈值,则将这些向量匹配为同一个物体的特征点。

这些算法中的特征描述向量具有很好的鲁棒性和独特性,因此在许多计算机视觉应用中被广泛使用。

HOG和LBP特征描述

在计算机视觉领域,HOG(Histogram of Oriented Gradient)和LBP(Local Binary Pattern)是两种广泛使用的特征描述算法。

HOG特征描述算法主要用于物体检测和行人检测等任务。该算法首先将图像分割为若干个小区域,然后在每个小区域内计算梯度直方图,将直方图拼接起来作为该区域的特征描述。由于物体的边缘通常是其重要的区域,因此在计算直方图时,需要对像素点的梯度赋予不同的权重。HOG特征描述算法的优点是能够有效地描述物体的边缘和纹理等信息,但在复杂的背景下,容易受到噪声和光照等干扰。

LBP特征描述算法主要用于人脸识别和纹理分类等任务。该算法通过比较每个像素点与其周围邻居像素的灰度值大小关系,将其转化为二进制编码,然后将每个像素点的二进制编码组合起来形成一个二进制数,作为该像素点的特征描述。LBP特征描述算法的优点是计算量小、对光照变化和噪声具有一定的鲁棒性,但由于仅关注局部像素之间的关系,可能会忽略一些重要的全局信息。

通过学习本章内容,读者可以了解如何从图像中提取出有意义的特征,以用于图像识别、目标检测等应用场景中。这些基本知识将是未来所学内容的基础。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第二章:特征提取和描述
    • 边缘检测和角点检测
      • 特征点检测和匹配
      • SIFT和SURF特征描述
      • HOG和LBP特征描述
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档