VLfeat是一个开源BSD的轻量级的计算机视觉库算法,主要实现了SIFT、MSER、K-means、hierarchical、agglomerative information bottleneck,quick shift等算法,采用C语言编写而成,提供了MATLAB接口,文档详细,且支持跨平台,对于分类和识别特别有用。

安转编译VLfeat:https://blog.csdn.net/u011718701/article/details/51452011

首先介绍vl_covdet命令,该命令实现了许多共变量特征检测器和相应的描述子。

1、DoG检测器

示例代码:

% 加载图片
im = vl_impattern('roofs1');
% 显示加载的图片
figure(1);
% 清楚窗口上的旧图片
clf;
image(im); axis image off;
% 将图像转换为灰度空间和单精度, 然后调用vl_covdet以提取特征(默认情况下,它使用DoG角度测量,类似于SIFT)
imgs = im2single(rgb2gray(im));
frames = vl_covdet(imgs, 'verbose');
% vl_plotframe:用于显示提取到的特征
hold on;
vl_plotframe(frames);

原图:

运行结果:

verbose选项不是必需的,但是它可以提供下面这些信息。

vl_covdet: doubling image: yes

vl_covdet: octave_resolution: 3

vl_covdet: num_octaves: -1

vl_covdet: max_num_orientations: 4

vl_covdet: detector: DoG

vl_covdet: peak threshold: 0.01, edge threshold: 10

vl_covdet: 87 features suppressed as duplicate (threshold: 0.5)

vl_covdet: detected 3409 features

vl_covdet: kept 3362 inside the boundary margin (2)

2、除了DoG检测器之外,vl_covdet还支持许多其他检测器:

The Difference of Gaussian operator(也称为Hessian算子或拉普拉斯算子的轨迹)使用多尺度拉普拉斯算子的局部极值轨迹来检测尺度和空间中的特征(如SIFT中所示)。

Hessian算子使用Hessian算子的多尺度行列式的局部极值。

Hessian Laplace检测器使用Hessian算子的多尺度行列式的极值来进行空间定位,并使用多尺度拉普拉斯算子的极值进行尺度定位。

Harris Laplace使用多尺度Harris角度测量而不是Hessian的行列式来定位空间,并且在其他方​​面与之前的探测器相同。

Hessian Multiscale通过使用Hessian算子的多尺度行列式来检测多个尺度的空间特征,但不会尝试估计它们的尺度。

Harris Multiscale与前一个类似,但使用的是多尺度Harris测量。

例如:HarrisLaplace

将frames = vl_covdet(imgs, 'verbose');替换为frames = vl_covdet(imgs, 'method',‘HarrisLaplace’);即可

3、特征框架的几何含义:

由vl_covdet计算的特征是定向矩形,由平移(transaction )TT和线性图(linear map)AA(a 2x2)定义,可以如下提取:

T=frame(1:2);

A = reshape(frame(3:6), 2,2);

map(A,T)将像素从特征帧(也称为归一化补丁域)移动到图像帧,该特征表示为以特征参考系中的原点为中心的单位半径的圆,并且通过(A, T)将其转换为图像椭圆。

在范围方面,标准化的补丁域是以原点为中心的方框,而图像域使用标准MATLAB约定并从(1,1)开始,Y轴向下,X轴向右,这些概念在规范化补丁和描述符的计算中很重要。

4、仿射适应(Affine adaptation)

仿射适应是估计图像区域的仿射形状以便构建仿射共变特征帧的过程,这对于校正倾斜图像的变形是有用的:例如出现小的透视畸变,打开仿射适应的代码:

frames = vl_covdet(imgs,'EstimateAffineShape',true);

结果:

5、特征方向(Feature orientation)

到目前所讨论的检测方法是旋转不变的,这意味着无论图像旋转如何,他们都会检测到相同的圆形或者椭圆形区域,但它们不允许固定和标准化特征框架中的旋转。默认情况下估计特征是直立的(这意味着仿射变换(A,T)将垂直轴(0,1)映射到自身)。为了计算旋转不变描述符,需要去除特征框架的旋转效果,可以通过指定EstimateOrientation选项实现:

frames = vl_covdet(imgs, "EstimateOrientation", true, 'verbose');

6、计算描述子

vl_covdet还可以用来计算描述子,目前为止支持三种:SIFT、LIOP和raw patches(原始补丁,可以从中计算任何其他描述子)。

要使用此功能,只需添加输出参数:

[frames,descrs] = vl_covdet(imgs);

这将计算所有功能的SIFT描述符。每列descrs是单精度的128维描述符向量。或者,要计算补丁使用:

[frames,descrs] = vl_covdet(imgs,'descriptor','liop');

使用默认设置,每列将是单精度的144维描述符向量。如果要更改设置,请使用LIOP教程中描述的参数

[frames,descrs] = vl_covdet(imgs,'descriptor','patch');

在这种情况下,每列descrs是堆叠的补丁。为了可视化前100个补丁,可以使用例如:

w = sqrt(size(patches,1));

vl_imarraysc(reshape(patches(:,1:10 * 10),w,w,[]));

用标准检测器(左)提取补丁并添加仿射适应(右)。

有几个参数会影响与要素关联的修补程序。首先,PatchRelativeExtent可用于控制补丁相对于要素比例的大小。范围是补丁域的一半,帧参考帧中的正方形。由于大多数检测器锁定在图像结构(例如,斑点)上,在标准化帧参考中,其具有与半径1的圆相当的尺寸,将PatchRelativeExtent设置为6使得贴片大约是角结构的尺寸的六倍。这大约是SIFT特征描述符的默认范围

第二个重要参数是PatchRelativeSigma,它表示在规范化的补丁帧中应用于图像的平滑量。默认情况下,此值设置为1.0,但可以缩小以获得更清晰的补丁。当然,平滑量受到输入图像的分辨率的限制:由于后者的有限采样率,例如小于半个像素的平滑无法恢复。此外,必须对贴片进行足够精细的采样以避免混叠。

最后一个参数是PatchResolution。如果这等于ww,那么贴片的边长为2w + 12w + 1像素。 (因此,归一化帧中的采样步骤由PatchRelativeExtent / PatchResolution给出)。可能需要提取更高分辨率的贴片以获得更大的范围和更小的平滑度。此参数的良好设置可能是PatchRelativeExtent / PatchRelativeSigma。

% load image
im = vl_impattern('roofs1');
% show image
figure(1);
% clear old picture in the window
clf;
image(im); axis image off;
% 将图像转换为灰度空间和单精度, 然后调用vl_covdet以提取特征(默认情况下,它使用DoG角度测量,类似于SIFT)
imgs = im2single(rgb2gray(im));
[frames, descrs] = vl_covdet(imgs, 'descriptor', 'patch');
% 可视化补丁
w = sqrt(size(descrs, 1));
vl_imarraysc(reshape(descrs(:, 1: 10 * 10), w, w, []));

7、自定义特征帧

可以使用vl_covdet来计算自定义特征帧的描述子,或者将仿射适应和方向估计应用于自定义特征帧。

% load image
im = vl_impattern('roofs1');
% show image
figure(1);
% clear old picture in the window
clf;
image(im); axis image off;
% 将图像转换为灰度空间和单精度, 然后调用vl_covdet以提取特征(默认情况下,它使用DoG角度测量,类似于SIFT)
imgs = im2single(rgb2gray(im));
% 自定义特征帧
delta = 30
xr = delta:delta:size(im, 2) - delta + 1;
yr = delta:delta:size(im, 1) - delta + 1;
[x, y] = meshgrid(xr, yr);
frames = [x(:)';y(:)'];
frames(end + 1, :) = delta / 2;
[frames, patches] = vl_covdet(imgs,...'frames', frames,...'estimateAffineShape', true,...'estimateOrientation', true);
hold on ;
vl_plotframe(frames) ;

8、获得规模空间

vl_covdet可以返回有关功能的其他信息,包括每个检测到的功能的比例空间和分数。

[frames, descrs, info] = vl_covdet(imgs) ;

info即为获取到的信息。

VLfeat学习(1)——Covariant feature detectors(协变特征检测器)相关推荐

  1. OpenCV3学习(11.7) BRISK特征检测器及BRISK描述符

     BRISK算法一种特征提取算法,也是一种二进制的特征描述算子. 它具有较好的旋转不变性.尺度不变性,较好的鲁棒性等.在图像配准应用中,速度比较:SIFT<SURF<BRISK<FR ...

  2. OpenCV3学习(11.6) ORB特征检测器及BRIEF描述符

    ORB是ORiented Brief的简称,在ORB的方案中,先采用了FAST作为特征点检测算子,再使用改进BRIEF进行描述符的计算的.ORB的一个重要贡献就是引入了定位关键点的方向. BRIEF描 ...

  3. OpenCV3学习(11.5) FAST特征检测器FastFeatureDetector

    简介 FAST特征检测的特点是简单.快速.有效.作者为了在实时帧速率情况下进行高速特征检测,提出FAST特征检测. 相比SIFT.DoG.Harris.SUSAN等比较耗时的特征检测方法,FAST只利 ...

  4. Image Processing and Computer Vision_Review:Local Invariant Feature Detectors: A Survey——2007.11...

    翻译 局部不变特征探测器:一项调查 摘要 -在本次调查中,我们概述了不变兴趣点探测器,它们如何随着时间的推移而发展,它们如何工作,以及它们各自的优点和缺点.我们首先定义理想局部特征检测器的属性.接下来 ...

  5. 经典DL论文研读(part3)--Improving neural networks by preventing co-adaptation of feature detectors

    学习笔记,仅供参考,有错必纠 文章目录 Improving neural networks by preventing co-adaptation of feature detectors Abstr ...

  6. 文献阅读:Improving neural networks by preventing co-adaptation of feature detectors

    文献阅读:Improving neural networks by preventing co-adaptation of feature detectors ----通过防止特征检测器的共适应以改进 ...

  7. 【精读AI论文】dropout----(Improving neural networks by preventing co-adaptation of feature detectors)

    文章目录 前言 第一页: 第一段: 第二段: 第二页 第一段 第二段 第三段 第3-6页 思考与总结 dropout丢弃的是权重还是输出? dropout的正确性以及随机丢弃对结果的影响? dropo ...

  8. 【论文笔记】Improving neural networks by preventing co-adaptation of feature detectors

    多伦多大学计算机科学系12年的一篇文章,大量实验讨论了dropout的效果和直观解释了为什么dropout这么强大. 为什么强大?主要是参数独立训练,大量网络共享参数但是相当于独立训练出来的,参数之间 ...

  9. 使用RFECV、递归特征消除 (Recursive Feature Elimination)进行特征筛选详解及实战

    使用RFECV.递归特征消除 (Recursive Feature Elimination)进行特征筛选详解及实战 包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征. 所 ...

最新文章

  1. linux pps 包 网卡,linux下安装PPS
  2. OpenCV | OpenCV将图像转换成黑白图像(二进制)
  3. ESTL:新型多重扩增子测序法可实现污水中 SARS-CoV-2 RNA 的精确定量和病毒溯源...
  4. Native wifi API使用
  5. MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据
  6. 折半查找算法及分析(手工过程)
  7. 带有示例的Python date strftime()方法
  8. 基于Smadja算法的搭配词自动提取实践
  9. linux wkhtmltopdf换字体,ubuntu – 更新后Wkhtmltopdf字体大小增加
  10. JAVA运行环境设置
  11. 【笔记】鲁班智能设计平台
  12. 实现图像批量重命名处理方法(mat文件、matlab简单程序等方法)
  13. 注册Heroku账户
  14. 获取取本月一号、本月月末 日期
  15. C#笔试面试宝典值得收藏1
  16. Bottom-Up and Top-Down
  17. Buddy 内存管理机制(下)
  18. ICMP协议是什么协议?
  19. 每个程序员都应当知道的编译器优化知识
  20. 计算机无法识别光猫信号,网络突然连不上?教你如何看光猫指示灯判断网络问题!...

热门文章

  1. electron-builder打包linux桌面程序(OIM-E多平台即时通讯软件)
  2. ‘isVNode‘ is not exported by
  3. 基于Qt的收银点餐系统之小票打印(一)
  4. DECIMAL (6,2)
  5. fetion发送短信介绍(比如天气预报)
  6. 从程序员到架构师转变【转】
  7. console常用方法
  8. Conv2Former ~2
  9. 《java变量的作用域》
  10. CustomList