OpenCV Tutorials 16 – Shi-Tomasi角点检测 & SIFT

Shi-Tomasi角点检测 & SIFT

一、Shi-Tomasi角点检测

在本末节中,咱们将会了解到Shi-Tomasi角点检测的基本概念,用到以下函数:cv.goodFeatwGoindows7旗舰版uresToTrack()

  • 用法如下:
  1. cv角点解.goodFeatu角点解resToTrack( image, maxCorners, qualityLevel, minopencv和yolo的区别Distance[, corners[, ask[, blockSize[, useHarrisDetector[, k]]]]] ) -> corners
  2. cv.g梯度怎样求oodFea宫颈癌turesToTrack( image, maxCor工商银行电话人工客服ners, qualityLevel, minDistance, mOpenCVas梯度公式k, blockSize,opencv目标检测 gradientSize[, corners[, useHarrisDetector[, k]]] ) -> corners
  3. cv.goodFeaturesTo梯度下降法原理TrackW梯度下降法角点法ithQuality( im龚俊age, maxCorners, qualityLevel, mi角点是什么nDistance, mask[, corners[, cornersQuality[, blockSize[, gradientSize[, useHarrisDetector[, k]]]]]] ) -> corners,

1. 概念

在上一章中,咱们看到了 Harris Cowindows许可证行将过期怎样办rner Detector。 1994 年晚些时候,J. Shi 和 C. Tomasi 在他们的论文windows系统 Good Features to Track 中对其进行了小修改,与 Harris Corner Detector 相比,它显示出更好的成果。windows怎么激活 Harris Corner Det梯度稀释的目的ector 中的评分函数由下式给出:R角点=12−k(1+2)2R = lambda_1 lambda_2 –windows是什么意思 k (lambda_1+lam角点bda_2)^2

可是shi却给出了如下函数进行评分:R=min(1,2)R = m梯度稀释in(lambda_1,lambda_2)

假如大于阈值,则将其视为梯度稀释的目的角点。 假如咱们像在 Harris Corner Detector 中那样将其制作在 1−2lambda_1 – lambda_2空间中,咱们会得到如下图画:

OpenCV Tutorials 16 - Shi-Tomasi角点检测 & SIFT

从图中能够看出,只有当 1lambda_12lambda_2 大于角点最小值 minlamb梯度洗脱da_{miwindows怎么激活n} 时,才被认为是角点(绿色区域)。

2. 角点检测

OpenCV 有一个函数,cv.goodFeaturesToTrack()。 它通过 Shi-Tomasi 办法(也能够指定为 Harris 角Go点检测)在图画中找到工龄差一年薪酬差多少 N 个最强角点。 像往常一样,windowindows许可证即将过期怎么办ws是什么意思图画应该是灰度图画。 然梯度下降后指定要查找的角点数。 然后你指定质量等级,这是一个介于 0-1 之间的值,若角点的值小于此等级角点法计算附加应力则会被抑google制。 然后咱们供给检测角点检测到的角点opencv轮廓提取之间的最小欧几里德间隔。

有了一切这些信息,该函数就角点检测角点是什么够找到图画中的角点。 一切低于质量水平的角都被抑制。 然后它依据质量按降序对剩余的角龚俊进行排梯度下降法原理序。 然后函数取第一个最强角,扔掉最小间隔范围内的一切邻近角,并回windows是什么意思来 N 个最强角。

import cv2 as cv
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
def cv_show(name, img):
    cv.imshow(name, img)
    cv.waitKey(0)
    cv.destroyAllWindows()
def compare(imgs):
  #  for i in range(len(imgs)):
 #       imgs[i][:,-3:-1,:] = [255,255,255]
    res = np.hstack(imgs)
    cv_show('Compare', res)
img = cv.imread('chessboard.jpg')
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
#参数分别为 灰度图,角点数,角点质量,焦点之间的最小欧式间隔(小于此间隔则兼并)
corners = cv.goodFeaturesToTrack(gray,25,0.01,10)
corners = np.int0(corners)
for i in corners:
    x,y = i.ravel()
    cv.circle(img,(x,y),3,255,-1)
plt.xticks([]),plt.yticks([])
plt.imshow(img)
plt.show()

OpenCV Tutorials 16 - Shi-Tomasi角点检测 & SIFT

三、标准不变特征转化(SIFT)

在本末节中,咱们会了解到SIFT算法概念以及找出SIFT要害点和描述符的办法

1. 概念

在前几章中,咱们看到了一些角点检测器,如 Harris 等。它们是旋转不变的,这意味着即使图画旋转,咱们也能够找到相同的角点。 很明显,因为角在旋转图画中仍然是角。 可是缩放呢? 假如图画被缩放,一个角或许不OpenCV是一个角。 例如,查看下面的简单图画。 当在同一窗口中放大时,小窗Go积金口内的小图画中的角windows10激活密钥是平坦的。 所以哈里斯角不是标准opencv是软件还是库不变的。

OpenCV Tutorials 16 - Shi-Tomasi角点检测 & SIFT

也即是当图画全体被放大时,原opencv概括提取方位的图画像素应该还保留着角点的特征

2004 年,不列颠哥伦比亚大学的 D.Lowe 在他的windows许可证行将过期怎样办论文 Distinctive Image Features from Scale-Invar宫颈癌iant Keopencv目标检测ypwindows怎么激活oin梯度ts 中提出了一种新算法,即 Scale Invariant Feature Transform (SIFT),该算法提取要害点并核算其描述符。 (本文易于了解,被认windows10激活密钥为是 SIFwindows7怎么重装系统T 上可用的最佳材料。此解释只是本文的简短摘要)

SIFT算法主要触及四个步骤。 下面进行逐个介绍:

A. 标准空间极值检测

从上图能够看出,咱们不能运用OpenCV同一个窗口来检测不角点法计算附加应力同标准的要害点。 小角能够检测, 可是要检测更大opencv方针检测的旮旯,咱们需要更大的窗口。 为此,运用了标准空间过滤。 在其中windows7怎样重装系统,对于具有各种 值的图画,找到了高斯的拉普拉斯算子。 LoG 充任斑驳检测器,可检测因为 的变化而产生的各种巨细的斑驳。 简而言之, 充任缩角点解放参龚俊数。 例如,在上图中,具有低 的高斯核为小角供给了高值,而具有高 的高斯核十分适合较大的角。 因而,咱们能够找到跨标准和空间的部分最大值,这为咱们供给opencv人员技术了 (x,y,) 值的列枸杞表,这意味着在 标准的 (x,y) 处存在潜在的要害点。

可是这个 LoG 有点耗时耗力,所以 SIFT 算龚俊法运用了高斯差值,它是 LoG 的近似值。 高斯差值作为具有两个不同 的图画的高斯模糊差值得到,分别为 和 k。 这个进程角点法核算附加应力是针对高斯金字塔中图画角点解windows10不同倍频程完成的。 如下图所示:

OpenCV Tutorials 16 - Shi-Tomasi角点检测 & SIFT

一旦找到这个DoG,就会在图画上搜索标准梯度怎么求和空间上的部分极值。 例如,将图画中的一个像素与其 8 个相邻像素以及下一个份额的 9 个像角点是什么素和前一个份额的 9 个像素进行比梯度较。 假如是部分极值,就是潜在的要害点。 这基本上意味着要害点在该份额中得到最好opencv是软opencv人员技术件仍是库工商银行表明。 如下图所示:

OpenCV Tutorials 16 - Shi-Tomasi角点检测 & SIFT

关于不同的参数,本文给出了一些经验数据,能够总结为,八度音阶数= 4,音阶opencv目标检测数= 5,初始=1.6,k工商银行=2sqrt2等作为最佳工龄越长退休金越多吗

B. 要害点定位

一旦找到潜在的要害点方位,就windows10激活密钥有必要对其进行角点细化以获得更精确的成果。 他们运用标准空间的泰勒opencv轮廓提取级数扩展来获得更精确的极值方位,假如该极值处的强度小于阈值(依据论文为 0.03),则将其抑制。

这个阈值在 OpenCV 中称梯度稀释为 contrastThresopencv人员技能hold,DoG 对边际的呼应较高,因而也需要去除边际。 为工龄越长退休金越多吗windows10此,运用了类似于 Harr梯度的几何意义is 角点检测windows是什么意思器的概念。 他们运用 2×2 Hessian 矩阵 (H) 来核算主曲率。 咱们从 Harris 角点检测器中得知,对角点法于边际梯度,一个特征值大于另一个特征值。 所以梯度下降法原理在这儿他windows系opencv是软件还是库们运用了一个简单的函数,假如这个比率大于一个阈值,在 OpenCV 中称为 edgeThreshold,那么这个要害点就会被丢掉opencv是软件还是库。 它在论文上以 10 的方式给出。 所以它消除了任何低对比度的要害点和边际要害点,剩余的是激烈的兴趣点。

C. 方向分宫颈癌

现在为每个关梯度怎样求键点分配一个方向,以完成图画旋转的不变性。 依据标准在要害点方位周围取一个邻域,并在该区角点域核算梯度巨细和方向。 创立一opencv是什么个具有 36 个 bin 掩盖 360 度的方向直方图(它梯度洗脱由梯度起伏和高斯加权圆形窗口加权, 等于要害点标准的 1.5 倍)。梯度下降 任何高于直方图中的最高峰 80% 的峰也被认为是核算方向。 它创立具有相同方位和份额但方Windopencv是什么ows向不同的要害点。opencv人员技能 它有助于匹配的安稳枸杞性。

D.windows10 要害点工龄越长退休金越多吗描述符

现在创立了要害点描述符。opencv安装角点要害点周围的 16×16 邻域。 它分为 16 个 4×4 巨细opencv和yolo的差异工龄差一年工资差多少子块。 对于每个子块,创立 8windows7旗舰版梯度下降法 bin 方向直方图。 因而共有 128 个 bin 值可用。 它被表明为一个向量以形宫颈癌龚俊要害点描述符。 除此之外,还采纳opencv和yolo的差异了一些措施来完成对光照变化、旋转等的鲁棒性。

E. 要害点匹配

薪酬超越5000怎样扣税过识别它们最近的街坊来匹配两个图画之间的要害点。 但在某些情况下,第二个最挨近的匹配或许十分挨近第一个。 这或许工龄越长退休金越多吗opencv教程是因为噪音或其他一些原因而产生的。 在这种情况下,采用最近间隔与次近间隔的比率。 假如大于 0.8,则抑制。 依据论文,它消除了大约 90% 的过错匹配,而仅丢windows系统掉了 5% 的正确匹配。

这是SIFT算法的总结。 有关更多详细信息和了解,激烈建议阅览原始论文。

2. OpenCV中的特征匹配

现在让咱们看看 OpenCV 中可用的 SIFT 功能。 请注意,这opencv装置教梯度些以前仅在 opencv梯度公式 contrib repo 中可用,但专利于 2020 年到期。因而它们现在Windows包含在主 repo 中。 让咱们从要害点检测开端并制作它们。 首要,咱们有必要结构一个 SIF公司让职工下角点检测班发手机电量截图T 对工龄越长退休金越多吗象。 咱们能够将不同的参数传公司让员工下班发手机电量截图递给它,这些参数是可选的,它们在文档中有很好的解释。

  • 将要害点制作在灰度图画上: cv.drawKeypoints( i工龄越长退休金越多吗mage, keypopencv是什么oints, oopencv装置utImage[, color[, flags]] ) -> outImage
img = cv.imread('lena.png')
gray= cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift = cv.SIFT_create()
kp = sift.detect(gray,None)
cv.drawKeypoints(gray,kp,img)
# gray = cv.merge([gray,gray,gray])
# compare([gray,img])
array([[[162, 162, 162],
        [162, 162, 162],
        [162, 162, 162],
        ...,
        [170, 170, 170],
        [155, 155, 155],
        [128, 128, 128]],
       [[162, 162, 162],
        [162, 162, 162],
        [162, 162, 162],
        ...,
        [170, 170, 170],
        [155, 155, 155],
        [128, 128, 128]],
       [[162, 162, 162],
        [162, 162, 162],
        [162, 162, 162],
        ...,
        [170, 170, 170],
        [155, 155, 155],
        [128, 128, 128]],
       ...,
       [[ 43,  43,  43],
        [ 43,  43,  43],
        [ 50,  50,  50],
        ...,
        [104, 104, 104],
        [100, 100, 100],
        [ 98,  98,  98]],
       [[ 44,  44,  44],
        [ 44,  44,  44],
        [ 55,  55,  55],
        ...,
        [104, 104, 104],
        [105, 105, 105],
        [108, 108, 108]],
       [[ 44,  44,  44],
        [ 44,  44,  44],
        [ 55,  55,  55],
        ...,
        [104, 104, 104],
        [105, 105, 105],
        [108, 108, 108]]], dtype=uint8)

OpenCV Tutorials 16 - Shi-Tomasi角点检测 & SIFT

siftgoogle.detect() 函数找到图画中的要害点windows怎么激活。 假如您只想搜索图画的一部windows是什么意思分,则能够传入掩码。 每个要害点都是一个特别角点的结构,它具有许多特点,例工龄差一年薪酬差多少如它的 (x,y) 坐标、有意义的邻域的巨细、指定其方向的角度、指定要害点强度的呼应等。

OpenCV 还工商银行供给了 cv.drawKeyPoints() 函数,它在要害点的方位上制作小圆圈。 假如您将标志 cv.DRAW_MATCHES_FLAGwindows怎样激活S_DRAW_梯度怎么求RICH_KEYopencv概括提取POINTS 传递给它,它将制作一个要害点巨细的圆,甚至会显示其opencv是软件还是库方向。 请参见下面的示例:

cv.drawKeypoints(gray,kp,img,flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
gray = cv.merge([gray,gray,gray])
compare([gray, img])

OpenCV Tutorials 16 - Shi-Tomasi角点检测 & SIFT

现在要核算描述符,OpenCV 供给了两种办法。 因为您现已找到了工商银行要害点,您能够调用 sift.compute() 从咱们找到的要害点核算描述符。 例如:kp,des = sift.compute(gray,kp) 假如没有找到要害点,直接运用函数 sift.detectAndComputopencv概括提取e() 一步找到要害点和描述符。

img = cv.imread('lena.png')
gray= cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift = cv.SIFT_create()
kp, des = sift.detectAndCompute(gray,None)
res = img.copy()
cv.drawKeypoints(img,kp,res)
compare([img,res])

这儿工龄差一年工资差多少 kp 将是一个要害点列表,而 des 是一工资超过5000怎么扣税个形状为(要梯度下降害点数)128角点检测梯度下降法 numpy 数组。 所以咱们得到了要害点、描述符等。现在咱们想看看怎么匹配不同图画中的要害点。 咱们windows许可证行将过期怎样办将在接下来的章节中学习。

OpenCV Tutorials 16 - Shi-Tomasi角点检测 & SIFT

发表评论

提供最优质的资源集合

立即查看 了解详情