<h1 style="font-size: 32px; border-bottom: 2px solid rgb(204, 204, 204); padding: 0px 4px 0px 0px; margin: 0px 0px 10px;">BRIEF描述符</h1><p><span style=" color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif;">当前系列所有demo下载地址:</span><br/></p><p><a href="https://github.com/GaoRenBao/OpenCv4-Demo" target="_blank" style="font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; margin: 0px; padding: 0px; list-style: none; border: 0px; color: rgb(0, 102, 0); transition-duration: 0.2s; transition-property: opacity; outline: none; opacity: 0.8;">https://github.com/GaoRenBao/OpenCv4-Demo</a></p><p style="margin-top: 0px; margin-bottom: 10px; box-sizing: border-box; overflow-wrap: break-word; word-break: break-all; line-height: 1.5em; font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; color: rgb(51, 51, 51); text-wrap: wrap; ">源码参考原文:</p><p style="margin-top: 0px; margin-bottom: 10px; box-sizing: border-box; overflow-wrap: break-word; word-break: break-all; line-height: 1.5em; font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; color: rgb(51, 51, 51); text-wrap: wrap; "><a href="/api/system/download?file=OpenCV-Python-Tutorial-%E4%B8%AD%E6%96%87%E7%89%88.pdf" target="_blank" title="OpenCV-Python-Tutorial-中文版.pdf (P205)">OpenCV-Python-Tutorial-中文版.pdf (P205)</a><span style="color: rgba(0, 0, 0, 0.85);"> </span></p><p style="margin-top: 0px; margin-bottom: 10px; text-wrap: wrap; padding: 0px; list-style: none; border: 0px; overflow-wrap: break-word; word-break: break-all; line-height: 1.5em; font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; box-sizing: border-box; color: rgb(51, 51, 51);">不同编程语言对应的OpenCv版本以及<span style="">开发环境</span>信息如下:<span style="font-family: Calibri; font-size: 14px;"> </span></p><table border="1" style="margin-left: 2px; border-right: none; border-bottom: none; border-image: initial; border-left: 1px solid rgb(102, 102, 102); border-top: 1px solid rgb(102, 102, 102);"><tbody><tr class="firstRow"><td width="81" valign="top" style="border-width: 1px; border-color: windowtext rgb(102, 102, 102) rgb(102, 102, 102) windowtext; border-bottom-style: solid; border-right-style: solid; padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;text-align:center;line-height:21px"><strong><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">语言</span></strong></p></td><td width="424" valign="top" style="border-width: 1px; border-color: windowtext rgb(102, 102, 102) rgb(102, 102, 102) windowtext; border-bottom-style: solid; border-right-style: solid; padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;text-align:center;line-height:21px"><strong><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">OpenCv版本</span></strong></p></td><td width="321" valign="top" style="border-width: 1px; border-color: windowtext rgb(102, 102, 102) rgb(102, 102, 102) windowtext; border-bottom-style: solid; border-right-style: solid; padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;text-align:center;line-height:21px"><strong><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">IDE</span></strong></p></td></tr><tr><td width="81" valign="top" style="border-left-width: 1px; border-left-color: windowtext; border-top: none; border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">C#</span></p></td><td width="424" valign="top" style="border-left-width: 1px; border-left-color: windowtext; border-top: none; border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">OpenCvSharp4.4.8.0.20230708</span></p></td><td width="321" valign="top" style="border-left-width: 1px; border-left-color: windowtext; border-top: none; border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">Visual Studio 2022</span></p></td></tr><tr><td width="81" valign="top" style="border-left-width: 1px; border-left-color: windowtext; border-top: none; border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">C++</span></p></td><td width="424" valign="top" style="border-left-width: 1px; border-left-color: windowtext; border-top: none; border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">OpenCv-4.5.5-vc14_vc15</span><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px"><span style="font-family:宋体">这个版本缺少</span><span style="font-family:宋体">xfeatures2d库)</span></span></p><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">OpenCv-4.6.0(这个版本缺少xfeatures2d库)</span></p></td><td width="321" valign="top" style="border-left-width: 1px; border-left-color: windowtext; border-top: none; border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">Visual Studio 2022</span></p></td></tr><tr><td width="81" valign="top" style="border-left-width: 1px; border-left-color: windowtext; border-top: none; border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">Python</span></p></td><td width="424" valign="top" style="border-left-width: 1px; border-left-color: windowtext; border-top: none; border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">OpenCv-Python (4.6.0.66)</span></p><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">OpenCv-Python (4.5.5)(这个版本缺少xfeatures2d库)</span></p></td><td width="321" valign="top" style="border-left-width: 1px; border-left-color: windowtext; border-top: none; border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); padding: 5px;"><p style="margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;line-height:21px"><span style="font-family: 宋体;letter-spacing: 0;font-size: 16px">PyCharm Community Edition 2022.1.3</span></p></td></tr></tbody></table><p style="margin-top: 0px; margin-bottom: 10px; box-sizing: border-box; overflow-wrap: break-word; word-break: break-all; line-height: 1.5em; font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; color: rgb(51, 51, 51); text-wrap: wrap; "><br/></p><p> 算法使用的是已经平滑后的图像</p><p> 非常重要的一点是:BRIEF是-种特征描述符,它不提供查找特征的方法。所以我们不得不使用其他特征检测器,比如SIFT和SURF等。原始文献推荐使用CenSurE特征检测器,这种算法很快。而且BRIEF算法对CenSurE关键点的描述效果要比SURF关键点的描述更好。</p><p> 简单来说BRIEF是一种对特征点描述符计算和匹配的快速方法。这种算法可以实现很高的识别率,除非出现平面内的大旋转。</p><p> 下面的代码使用了CenSurE特征检测器和BRIEF描述符。(在OpenCV中CenSurE检测器被叫做STAR检测器)。</p><p><br/></p><p>测试原图如下:<br/></p><p><img src="/upload/image/6383453188145459191230459.jpg" title="blox.jpg" alt="blox.jpg"/></p><p><br/></p><p style="text-wrap: wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; border: 0px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; "><span style="font-style: italic; color: rgb(51, 153, 204); line-height: 18px;">C#版本代码如下:</span></strong><strong style="margin: 0px; padding: 0px; list-style: none; border: 0px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; "><span style="font-style: italic; color: rgb(51, 153, 204); line-height: 18px;"></span></strong></p><p style="text-wrap: wrap;"><strong style="margin: 0px; padding: 0px; list-style: none; border: 0px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; "><span style="font-style: italic; color: rgb(51, 153, 204); line-height: 18px;"><img src="/upload/image/6383453653421862878536175.jpg" title="QQ截图20231102154213.jpg" alt="QQ截图20231102154213.jpg"/></span></strong></p><pre class="brush:c#;toolbar:false">using OpenCvSharp;
using System;
namespace ConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
Mat img = Cv2.ImRead("../../../images/blox.jpg", 0);
// 创建BRIEF描述符提取器
var brief = OpenCvSharp.XFeatures2D.BriefDescriptorExtractor.Create();
// Initiate FAST detector
var star = OpenCvSharp.XFeatures2D.StarDetector.Create();
var kp = star.Detect(img);
// compute the descriptors with BRIEF
Mat des = new Mat();
brief.Compute(img, ref kp, des);
Console.WriteLine(brief.DescriptorSize);
Console.WriteLine($"{des.Width},{des.Height}");
}
}
}</pre><p><br/></p><p><strong style="text-wrap: wrap; margin: 0px; padding: 0px; list-style: none; border: 0px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; "><strong style="margin: 0px; padding: 0px; list-style: none; border: 0px;"><span style="font-style: italic; color: rgb(51, 153, 204); line-height: 18px;">C++版本代码如下:</span></strong></strong></p><pre class="brush:cpp;toolbar:false">【缺XFeatures2D算法】</pre><p><br/></p><p><strong style="text-wrap: wrap; margin: 0px; padding: 0px; list-style: none; border: 0px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; "><strong style="margin: 0px; padding: 0px; list-style: none; border: 0px;"><span style="font-style: italic; color: rgb(51, 153, 204); line-height: 18px;">Python版本代码如下:</span></strong></strong></p><p><img src="/upload/image/6383453733905760408504277.jpg" title="QQ截图20231102155535.jpg" alt="QQ截图20231102155535.jpg"/></p><pre class="brush:python;toolbar:false">import cv2
img = cv2.imread('../images/blox.jpg', 0)
# 创建BRIEF描述符提取器
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
# Initiate FAST detector
star = cv2.xfeatures2d.StarDetector_create()
# Initiate BRIEF extractor
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
# find the keypoints with STAR
kp = star.detect(img, None)
# compute the descriptors with BRIEF
kp, des = brief.compute(img, kp)
print(brief.descriptorSize())
print(des.shape)</pre><p><span style="color: rgb(255, 0, 0);"></span><br/></p>
BRIEF描述符 当前系列所有demo下载地址:
https://github.com/GaoRenBao/OpenCv4-Demo
源码参考原文:
OpenCV-Python-Tutorial-中文版.pdf (P205)
不同编程语言对应的OpenCv版本以及开发环境 信息如下:
语言
OpenCv版本
IDE
C#
OpenCvSharp4.4.8.0.20230708
Visual Studio 2022
C++
OpenCv-4.5.5-vc14_vc15 这个版本缺少 xfeatures2d库)
OpenCv-4.6.0(这个版本缺少xfeatures2d库)
Visual Studio 2022
Python
OpenCv-Python (4.6.0.66)
OpenCv-Python (4.5.5)(这个版本缺少xfeatures2d库)
PyCharm Community Edition 2022.1.3
算法使用的是已经平滑后的图像
非常重要的一点是:BRIEF是-种特征描述符,它不提供查找特征的方法。所以我们不得不使用其他特征检测器,比如SIFT和SURF等。原始文献推荐使用CenSurE特征检测器,这种算法很快。而且BRIEF算法对CenSurE关键点的描述效果要比SURF关键点的描述更好。
简单来说BRIEF是一种对特征点描述符计算和匹配的快速方法。这种算法可以实现很高的识别率,除非出现平面内的大旋转。
下面的代码使用了CenSurE特征检测器和BRIEF描述符。(在OpenCV中CenSurE检测器被叫做STAR检测器)。
测试原图如下:
C#版本代码如下:
using OpenCvSharp;
using System;
namespace ConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
Mat img = Cv2.ImRead("../../../images/blox.jpg", 0);
// 创建BRIEF描述符提取器
var brief = OpenCvSharp.XFeatures2D.BriefDescriptorExtractor.Create();
// Initiate FAST detector
var star = OpenCvSharp.XFeatures2D.StarDetector.Create();
var kp = star.Detect(img);
// compute the descriptors with BRIEF
Mat des = new Mat();
brief.Compute(img, ref kp, des);
Console.WriteLine(brief.DescriptorSize);
Console.WriteLine($"{des.Width},{des.Height}");
}
}
}
C++版本代码如下:
【缺XFeatures2D算法】
Python版本代码如下:
import cv2
img = cv2.imread('../images/blox.jpg', 0)
# 创建BRIEF描述符提取器
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
# Initiate FAST detector
star = cv2.xfeatures2d.StarDetector_create()
# Initiate BRIEF extractor
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create()
# find the keypoints with STAR
kp = star.detect(img, None)
# compute the descriptors with BRIEF
kp, des = brief.compute(img, kp)
print(brief.descriptorSize())
print(des.shape)