OpenCV-Python(35):BRIEF算法

这篇具有很好参考价值的文章主要介绍了OpenCV-Python(35):BRIEF算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

算法介绍

        BRIEF(Binary Robust Independent Elementary Features)是一种用于计算机视觉中特征点描述子的算法。它是一种二进制描述子,通过比较图像上不同位置的像素值来生成特征点的描述子。

        BRIEF算法的基本思想是选取一组固定的像素对,并比较这些像素对之间的亮度差异。对于每一个像素对,如果第一个像素的亮度大于第二个像素的亮度,则将该像素对的比较结果设为1,否则设为0。将所有像素对的比较结果串联起来,就得到了该特征点的二进制描述子。

        BRIEF算法的优点是计算速度快、内存消耗小,适用于实时应用和资源受限的设备。然而,由于BRIEF算法只比较像素的亮度差异,而没有考虑像素的空间关系,因此对于图像的旋转、尺度变化等变换不具有鲁棒性

        实际应用中,为了提高BRIEF算法的鲁棒性,通常会结合其他方法来使用,比如使用FAST算法或Harris角点检测等方法来检测特征点,然后再使用BRIEF算法生成特征点的描述子。

背景说明

        我们知道,SIFT 算法使用的是128 维的描述符。由于它是使用的浮点数,所以需要使用512 个字节。同样SURF 算法最少使用256 个字节,因为至少是64 为维描述符。创建一个包含上千个特征的向量需要消耗大量的内存,在嵌入式等资源有限的设备上这样是不合适的,因为匹配时也会消耗更多的内存和时间。

        实际的匹配过程中,如此多的维度是没有必要的。我们可以使用PCA,LDA 等方法来进行降维。甚至可以使用LSH(局部敏感哈希)将SIFT 浮点数的描述符转换成二进制字符串。对这些字符串再使用汉明距离进行匹配。汉明距离的计算只需要 XOR 位运算以及位计数,这种计算算很适合在现代的CPU 上运行。但我们还是需要先找到描述符才能使用哈希,这不能解决最初的内存消耗问题。

        BRIEF 算法应运而生。它不去计算描述符而是直接找到一个二进制字符串。这种算法使用的是已经平滑后的图像,它会按照一种特定的方式选取一组像素点对nd (x,y),然后在这些像素点对之间进行灰度值对比。例如,第一个点对的灰度值分别为p 和q。如果p 小于q,结果就是1,否则就是0。就这样对nd个点对进行对比得到一个nd 维的二进制字符串。

OpenCV-Python(35):BRIEF算法,opencv-python,opencv,BRIEF算法,特征检测,特征描述,图像匹配

        nd 可以是128,256,512。OpenCV 对这些都提供了支持,但在默认情况下是256(OpenC 是使用字节表示它们的,所以􄦈这些值分别对应与16、32、64)。当我们获得这些二进制字符串之后就可以使用汉明距离对它们匹配了。

        非常重要的一点是:BRIEF 是一种特征描述符,它不提供查找特征的方法。所以我们不得不使用其他特征检测器,比如SIFT 和SURF 等。原始文献推荐使用CenSurE 特征检测器,这种算法很快。而且BRIEF 算法对CenSurE关键点的描述效果比SURF 关键点的描述更好。

        简单来说, BRIEF 是一种对特征点描述符计算和匹配的快速方法。这种算法可以实现很高的识别率,除非出现平面内的大旋转。

OpenCV 中的BRIEF

        下面的代码使用了CenSurE 特征检测器和BRIEF 描述符。在OpenCV中CenSurE 检测器被叫做STAR 检测器。

import numpy as np
import cv2
from matplotlib import pyplot as plt

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

# Initiate STAR detector
star = cv2.FeatureDetector_create("STAR")

# Initiate BRIEF extractor
brief = cv2.DescriptorExtractor_create("BRIEF")

# find the keypoints with STAR
kp = star.detect(img,None)

# compute the descriptors with BRIEF
kp, des = brief.compute(img, kp)

print (brief.getInt('bytes'))
print (des.shape)

        函数brief.getInt(′bytes′) 会以字节格式给出nd 的大小,默认值为32。 

如果opencv版本不同,可能会报错,可以尝试以下代码:

在Python的OpenCV中,可以使用cv2.xfeatures2d.BriefDescriptorExtractor_create()函数来创建BRIEF算法的特征点描述子生成器。

以下是一个简单的示例代码,展示了如何在Python的OpenCV中使用BRIEF算法生成特征点的描述子:

import cv2

# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 创建BRIEF算法的特征点检测器和描述子生成器
detector = cv2.FastFeatureDetector_create()
descriptor = cv2.xfeatures2d.BriefDescriptorExtractor_create()

# 检测图像中的特征点
keypoints = detector.detect(image, None)

# 计算特征点的描述子
_, descriptors = descriptor.compute(image, keypoints)

# 打印特征点数目和描述子的维度
print('Number of keypoints:', len(keypoints))
print('Descriptor size:', descriptors.shape[1])

在这个示例中,首先使用cv2.imread()函数读取了一幅灰度图像。然后,使用cv2.FastFeatureDetector_create()函数创建了一个FAST算法的特征点检测器,并使用cv2.xfeatures2d.BriefDescriptorExtractor_create()函数创建了一个BRIEF算法的特征点描述子生成器。接下来,使用特征点检测器检测图像中的特征点,并使用描述子生成器计算特征点的描述子。最后,使用len()函数获取特征点的数目,使用shape[1]获取描述子的维度,并打印出来。

需要注意的是,需要安装OpenCV的Python模块和对应的xfeatures2d模块。可以使用以下命令来安装:

pip install opencv-python
pip install opencv-contrib-python

以上代码仅仅是一个简单的示例,实际应用中可能需要根据具体情况进行参数调整和错误处理。文章来源地址https://www.toymoban.com/news/detail-816891.html

到了这里,关于OpenCV-Python(35):BRIEF算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OpenCV-Python】——单/多模板匹配&分水岭算法图像分割&图像金字塔&交互式前景提取

    目录 前言: 1、模板匹配 1.1 单目标匹配 1.2 多目标匹配 2、图像分割

    2024年02月07日
    浏览(36)
  • 解决opencv-python 安装报错 Could not build wheels for opencv-python

    但是发现更新完了之后还是没用,因为主要原因是如果直接安装opencv默认安装最新版,此时找一个python3.6支持的版本就行了,如4.3.0.38,使用如下命令即可成功安装

    2024年02月16日
    浏览(48)
  • opencv-python 降噪

    定义 图像噪声是指存在于图像数据中的 不必要的或多余的干扰信息 。噪声的存在严重影响了图像的质量,因此在图像增强处理和分类处理之前,必须予以纠正。 图像中各种妨碍人们对其信息接受的因素即可称为图像噪声 。噪声在理论上可以定义为“不可预测,只能用概率

    2024年02月03日
    浏览(32)
  • opencv-python安装

    OpenCV就是学习计算机视觉的过程中经常用到的工具,opencv降低了计算机视觉的学习门槛。随着机器学习、深度学习等技术的发展,Python庞大的扩展库为Python用户在编程过程中提供了极大的便利,opencv-python便是其中一员。在实际使用opencv-python扩展库的过程中,更多的读者关心

    2024年02月04日
    浏览(69)
  • 安装opencv-python

    1.由于之前pip install --upgrade pip出错了,导致Anaconda中Scripts中pip.exe出错 解决方式:python -m ensurepip --default-pip,获得可行的pip.exe 可行的升级pip的方式:python -m pip install --upgrade pip 2.安装opencv-python 尝试从官网安装,官网提示需要更新pip 但是更新出错了,于是有了1问题,pip.exe不

    2024年02月06日
    浏览(40)
  • Python:安装opencv-python出错问题ERROR: Could not build wheels for opencv-python

    笔者在安装opencv-python的过程中遇到了如下错误 在安装opencv-python的过程,笔者直接通过pip命令进行安装,遇到了如下问题 命令 问题 直接使用上述命令安装的是最新版本,挑一个别的版本的opencv-python即可解决上述问题 使用命令如下 问题解决

    2024年02月11日
    浏览(46)
  • opencv-python版本问题

    opencv库有两种,一种是 opencv-python ,另一种是 opencv-contrib-python 。前者是基础库,后者则是在前者基础上加了一些contrib module(视觉处理一般用这个)。 安装好OpenCV库,想着先在OpenCV的瀚海里扎两个猛子。没成想,一头扎下去便撞到石头上。 如下图,在键入cv2.imread()时,不仅

    2024年02月13日
    浏览(33)
  • OpenCV-Python(21):OPenCV查找及绘制轮廓

    1.1 目标 理解什么是轮廓 学习掌握找轮廓、绘制轮廓等 学习使用cv2.findContours()、cv2.drawContours()函数的用法 1.2 什么是轮廓         在OpenCV中,轮廓是 图像中连续的边界线的曲线,具有相同的颜色或者灰度,用于表示物体的形状 。轮廓在图像处理和计算机视觉中非常重要

    2024年01月18日
    浏览(33)
  • opencv-python常用函数汇总

    环境配置地址 Anaconda:https://www.anaconda.com/download/ Python_whl:https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 代码如下(示例): cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。 如果是视频文件,直接指定好路径即可。 BORDER_REPLICATE:复制法,也就是复制最边缘像素。

    2024年02月07日
    浏览(37)
  • openCV-python模板匹配(旋转)

    本文将介绍使用OpenCV实现多角度模板匹配的详细步骤 + 代码。 熟悉OpenCV的朋友肯定都知道OpenCV自带的模板匹配matchTemplate方法是不支持旋转的,也就是说当目标和模板有角度差异时匹配常常会失败,可能目标只是轻微的旋转,匹配分数就会下降很多,导致匹配精度下降甚至匹

    2024年02月01日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包