LDB简介

局部差异二进制 LDB(Local Difference Binary)是一种高效,健壮且独特的二进制描述符。
LDB的独特性和稳健性通过3个步骤实现:
第一,LDB通过一组二进制测试捕获每个图像块的内部模式,每个二进制测试比较图像块内图像网格的平均强度IavgIavg Iavg和一阶梯度dxdx dx 和dydy dy(图a和图b)。
第二,LDB采用多网格策略来捕获不同空间粒度的结构(图c)。粗级网格可以消除高频噪声,而精细级别的网格可以捕获详细的局部模式,从而增强独特性。这样不同的网格密度可以捕获不同的空间结构。
第三,LDB选择高变量和独特位的子集并将它们连接起来以形成紧凑且唯一的LDB描述符。

libLDB是 一个C ++库,用于从图像块中提取二进制特征 - LDB(局部差异二进制)。源代码可以从官网LDB - Local Difference Binary An Ultrafast and Distinctive Binary Feature Description上下载。
libLDB中LDB特征提取的工作流程:

libLDB配置

环境:Win7+VS2012+OpenCV2.4.10
从官网上下载可得到ldb_final文件夹下如下内容:

新建一个win32控制台程序,选择空项目;然后按照OpenCV配置步骤依次配置好当前的“包含目录”、“库目录”以及“连接器”下“输入”中的“附加依赖项”,如图:


然后将ldb_final文件夹下的include、src文件夹复制到当前工程目录下。然后分别右键选择‘头文件’、‘源文件’分别添加include下的ldb.h和src下的ldb.cpp、main.cpp。
然后,打开‘项目属性’——>’配置属性’——>‘调试’——>‘命令参数’;根据当前example文件夹下两个图片的实际地址,添加命令参数(如 “E://example//paris1.jpg” “E://example//paris2.jpg” 1),如图:

运行,可看到结果如图:

源码查看

文件main.cpp:

#include<vector>
#include<iostream>
#include<stdlib.h>
#include<stdio.h>#include"ldb.h"
#include<opencv2/calib3d/calib3d.hpp>using namespace std;
using namespace cv;int main(int argc, char** argv)
{if(argc<3){printf("Usage: %s img_1 img_2 flag\nflag: 1 - dominant orientation is computed.\n      0 - dominant orientation is not computed.\n", argv[0]);return -1;}const char* imgName_1=argv[1];const char* imgName_2=argv[2];bool flag=atoi(argv[3]);// 加载图像Mat image_1, image_2, mat_show, descriptors_1, descriptors_2, out_img;vector<Point2f> obj, scene;  image_1 = imread(imgName_1, CV_LOAD_IMAGE_GRAYSCALE);image_2 = imread(imgName_2, CV_LOAD_IMAGE_GRAYSCALE);if(!image_1.data){cout << "fail to load " << argv[1] << endl;return -1;} if(!image_2.data){cout << "fail to load " << argv[2] << endl;return -1;}//ORB关键点检测ORB orb;vector<KeyPoint> keypoints_1, keypoints_2;orb(image_1, Mat(), keypoints_1, descriptors_1);orb(image_2, Mat(), keypoints_2, descriptors_2);//计算LDB描述符LDB ldb(48);ldb.compute(image_1, keypoints_1, descriptors_1, flag);ldb.compute(image_2, keypoints_2, descriptors_2, flag);//关键点匹配DescriptorMatcher* pMatcher = new BFMatcher(NORM_HAMMING, false);vector< vector<DMatch> > matches;vector<DMatch> good_matches;pMatcher->knnMatch(descriptors_1, descriptors_2, matches, 2);delete pMatcher;for(unsigned int i=0; i<matches.size(); i++){if(matches[i][0].distance < 0.8*matches[i][1].distance){good_matches.push_back(matches[i][0]);}}drawMatches(image_1, keypoints_1, image_2, keypoints_2, good_matches, out_img);imshow("Match", out_img);imwrite("match.jpg", out_img);waitKey(0);//RANSAC几何验证if(good_matches.size() < 4){cout << "insufficient matches for RANSAC verification" << endl;return -1;} for(unsigned int i = 0; i < good_matches.size(); i++)  {  obj.push_back( keypoints_1[ good_matches[i].queryIdx ].pt );  scene.push_back( keypoints_2[ good_matches[i].trainIdx ].pt );   }  //计算srcPoints到dstPoints最合适的透视转换映射 Mat H = findHomography( obj, scene, CV_RANSAC );vector<Point2f> obj_corners(4), scene_corners(4);obj_corners[0] = cvPoint(0,0); obj_corners[1] = cvPoint( image_1.cols, 0 );obj_corners[2] = cvPoint( image_1.cols, image_1.rows ); obj_corners[3] = cvPoint( 0, image_1.rows );//输入多通道矩阵,执行每个元素的透视变换perspectiveTransform(obj_corners, scene_corners, H);line( out_img, scene_corners[0] + Point2f( image_1.cols, 0), scene_corners[1] + Point2f( image_1.cols, 0), Scalar(0, 255, 0), 4 );line( out_img, scene_corners[1] + Point2f( image_1.cols, 0), scene_corners[2] + Point2f( image_1.cols, 0), Scalar(0, 255, 0), 4 );line( out_img, scene_corners[2] + Point2f( image_1.cols, 0), scene_corners[3] + Point2f( image_1.cols, 0), Scalar(0, 255, 0), 4 );line( out_img, scene_corners[3] + Point2f( image_1.cols, 0), scene_corners[0] + Point2f( image_1.cols, 0), Scalar(0, 255, 0), 4 );//显示匹配结果imshow( "Good Matches & Object detection", out_img );imwrite("goodmatch.jpg", out_img);waitKey(0);return 0;
}

  • Local Difference Binary for Ultrafast and Distinctive Feature Description

  • 官网:LDB - Local Difference Binary An Ultrafast and Distinctive Binary Feature Description

  • libLDB: A Library for Extracting Ultrafast and Distinctive Binary Feature Description

局部差异二进制 LDB - Local Difference Binary相关推荐

  1. 局部响应归一化(Local Response Normalization)

    LRN是一种提高深度学习准确度的技术方法.LRN一般是在激活.池化函数后的一种方法.  在ALexNet中,提出了LRN层,对局部神经元的活动创建竞争机制,使其中响应比较大对值变得相对更大,并抑制其他 ...

  2. 异常检测——局部异常因子(Local Outlier Factor ,LOF)算法

    异常检测--局部异常因子(Local Outlier Factor ,LOF)算法 参考文章: (1)异常检测--局部异常因子(Local Outlier Factor ,LOF)算法 (2)http ...

  3. 【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解

    更多精彩尽在微信公众号[程序猿声] 迭代局部搜索(Iterated Local Search, ILS) 00 目录 局部搜索算法 简单局部搜索 迭代局部搜索 01 局部搜索算法 1.1 什么是局部搜 ...

  4. 局部异常因子算法-Local Outlier Factor(LOF)

    局部异常因子算法-Local Outlier Factor(LOF) 在数据挖掘方面,经常需要在做特征工程和模型训练之前对数据进行清洗,剔除无效数据和异常数据.异常检测也是数据挖掘的一个方向,用于反作 ...

  5. 局部响应归一化(Local Response Normalization,LRN)和批量归一化(Batch Normalization,BN)的区别

    为什么要归一化? 归一化已成为深度神经网络中的一个重要步骤,它可以弥补ReLU.ELU等激活函数无界性的问题.有了这些激活函数,输出层就不会被限制在一个有限的范围内(比如tanh的[−1,1][-1, ...

  6. 【文献阅读】 局部最大梯度先验Local Maximum Gradient Prior——对盲图像去模糊(L. Chen等人,CVPR,2019)

    一.文章背景 文章题目:<Blind Image Deblurring with Local Maximum Gradient Prior> 这篇文章的第一单位是华东师范,主要工作就是对图 ...

  7. 数字图像处理:局部直方图处理(Local Histogram Processing)

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░ 一.引言 在前面章节<<数字图像处理>直方图均衡学习总结+感悟> ...

  8. 第四章第十二题(十六进制转二进制)(Hex to binary)

    4.12(十六进制转二进制)编写一个程序,提示用户输入一个十六进制数,显示其对应的二进制数.对于不正确的输入数字,提示非法输入. 下面是一个运行示例: Enter a hex digit: B The ...

  9. 局部图像描述(weber local descriptor)

    一.韦伯定律介绍 在黑色的纸上用白色的笔写字比用深色的笔写字更容易被看清,这是因为这种刺激达到了一定的阈值,从而引起了我们的感官刺激.韦伯定律是心理学上描述这一现象的定律(刚萨雷斯的数字图像基础书中, ...

最新文章

  1. CVPR 2020录用率十年最低,商汤官宣62篇入选
  2. 李开复看2019投资趋势:最坏的时代将酝酿最伟大的公司
  3. ​ICML 2021 Long Oral | 顺序不可知的交叉熵函数
  4. 给JSP页面加过滤器
  5. 计算机的病毒防治教案,计算机病毒及其防治教案.doc
  6. Redis 主从复制(replication)
  7. jconsole工具检测堆内存变化
  8. 移动app测试之怎么避免bug漏测
  9. ELK安装配置及nginx日志分析
  10. java使用netty
  11. 一个逐页抓取网站小说的爬虫
  12. Gitbook 与Ditamap的区别
  13. Matlab使用rng固定随机数生成
  14. android 热更新jar,Android热更新之so库的热更新
  15. 爬虫练习:南阳理工学院ACM题目信息
  16. ftp用户名 密码输入正确 登陆报530 Login incorrect.331 Please specify the password.
  17. 各自然带代表植被_十种常见自然带所对应的植被 十种常见自然带所对应的气候类型...
  18. ubuntu18.04开机后出现黑屏 最上显示/dev/nvme。。。
  19. 大数据影响人类认知和行为习惯
  20. Spring 青鸟云题库

热门文章

  1. html怎么设置img样式,css默认样式 css中img默认样式问题
  2. Civil3D二次开发之撤销(Undo\Ctrl+Z)命令
  3. Mac M1安装pycharm专业版,幼儿教学
  4. Three.js盖房子 点击开关门
  5. Silicon单片机芯片解密
  6. 技术牛人如何发财致富?
  7. 阿里数据港张北数据中心项目本月底运营
  8. MIPI DSI之DBI DPI含义和区别(3-1)
  9. c语言写一元一次函数图像,一次函数与一元一次不等式(洋葱数学)
  10. Linux 安装中文 man 手册