当前位置 : 主页 > 编程语言 > python >

【图像配准】基于surf实现图像特征点检测及图像拼接处理附matlab代码

来源:互联网 收集:自由互联 发布时间:2022-09-02
1 内容介绍 SURF特征点的检测 在图像拼接中,特征点的检测与描述是非常重要的一步,寻找一种鲁棒、快速的特征点检测方法对水下图像拼接来说至关重要。SURF算法由Bay等人提出,该算

1 内容介绍

SURF 特征点的检测

在图像拼接中,特征点的检测与描述是非常重要的一步,寻找一种鲁棒、快速的特征点检测方法对水下图像拼接来说至关重要。SURF 算法由 Bay 等人提出,该算法使用积分图像对图像进行卷积来提高运算速度,得到的特征点在鲁棒性、重复性和独特性等方面均具有较好优势。并且 Bay 等人已经证明了SURF 算法的快速性以及在计算机视觉领域的实用性。

【图像配准】基于surf实现图像特征点检测及图像拼接处理附matlab代码_尺度空间

【图像配准】基于surf实现图像特征点检测及图像拼接处理附matlab代码_尺度空间_02

【图像配准】基于surf实现图像特征点检测及图像拼接处理附matlab代码_特征点_03

【图像配准】基于surf实现图像特征点检测及图像拼接处理附matlab代码_特征点_04

由于特征点是在不同的尺度空间中检测到的,所以还需要构造尺度空间金 字塔。Lowe 提出使用不同尺寸的高斯滤波器与图像进行卷积得到图像金字塔, 并让图像金字塔上相邻两层相减得到高斯差分(Difference of Gaussian,DoG)金 字塔,然后在 DoG 金字塔上检测特征点。与 Lowe 所用方法不同的是,SURF 算法使用不同尺寸但计算速度相同的框状滤波器与图像直接进行卷积来构建尺 度空间金字塔,如图 2-5 所示。构建尺度空间金字塔的步骤可以简单概括为:首先用图 2-4 所示的 9×9 框状滤波器与图像卷积作为金字塔的第一层,然后通过逐渐扩大的框状滤波器 与图像相卷积得到金字塔的其余各层。为了使框状滤波器存在中心像素,需要 让连续两个层级的框状滤波器相差 6 个像素,如图 2-6 所示。再将尺度空间划 分为不同的组(Octave),每一组由相同的输入图像与逐渐扩大的框状滤波器相 卷积而来的一系列响应图构成。对于大小为 N×N 的框状滤波器,它所对应的 尺度可以通过式(2-9)计算得到。

【图像配准】基于surf实现图像特征点检测及图像拼接处理附matlab代码_特征点_05

【图像配准】基于surf实现图像特征点检测及图像拼接处理附matlab代码_特征点_06

此外,相邻两组之间框状滤波器的尺寸差值需要增加一倍,即从 6 到 12 到

24 到 48;为了使尺度的变化更加连续,组与组之间的尺寸选取一般是存在交叉

重叠的,如表 2-1 所示。在实际应用时,由于每组检测到的特征点数量会迅速

衰减,因此一般不需要将组数划分太多。

【图像配准】基于surf实现图像特征点检测及图像拼接处理附matlab代码_卷积_07

确定特征点的位置

当得到与图像对应的行列式和尺度空间金字塔后,通过检测 3×3×3 邻域

内的特征点行列式的局部最大值,就可以确定特征点的位置,该区域其实是一

种类似于斑状的结构。具体形式如图 2-7 所示,对于每个点,只有比其相邻的

3×3×3 邻域内的 26 个点都大,才能被选定为局部极值点。然后通过在尺度和

图像空间中进行差值来确定特征点的精确位置。​

【图像配准】基于surf实现图像特征点检测及图像拼接处理附matlab代码_卷积_08

2 仿真代码

% Example 2, Corresponding points

% Load images

  I1=imread('TestImages/testc1.png');

  I2=imread('TestImages/testc2.png');

% Get the Key Points

  Options.upright=true;

  Options.tresh=0.0001;

  Ipts1=OpenSurf(I1,Options);

  Ipts2=OpenSurf(I2,Options);

% Put the landmark descriptors in a matrix

  D1 = reshape([Ipts1.descriptor],64,[]); 

  D2 = reshape([Ipts2.descriptor],64,[]); 

% Find the best matches

  err=zeros(1,length(Ipts1));

  cor1=1:length(Ipts1); 

  cor2=zeros(1,length(Ipts1));

  for i=1:length(Ipts1),

      distance=sum((D2-repmat(D1(:,i),[1 length(Ipts2)])).^2,1);

      [err(i),cor2(i)]=min(distance);

  end

% Sort matches on vector distance

  [err, ind]=sort(err); 

  cor1=cor1(ind); 

  cor2=cor2(ind);

% Show both images

  I = zeros([size(I1,1) size(I1,2)*2 size(I1,3)]);

  I(:,1:size(I1,2),:)=I1; I(:,size(I1,2)+1:size(I1,2)+size(I2,2),:)=I2;

  figure, imshow(I/255); hold on;

% Show the best matches

  for i=1:30,

      c=rand(1,3);

      plot([Ipts1(cor1(i)).x Ipts2(cor2(i)).x+size(I1,2)],[Ipts1(cor1(i)).y Ipts2(cor2(i)).y],'-','Color',c)

      plot([Ipts1(cor1(i)).x Ipts2(cor2(i)).x+size(I1,2)],[Ipts1(cor1(i)).y Ipts2(cor2(i)).y],'o','Color',c)

  end

3 运行结果

【图像配准】基于surf实现图像特征点检测及图像拼接处理附matlab代码_尺度空间_09

4 参考文献

[1]夏岩, 刘智, 王俊然. 图像拼接中surf配准算法的研究[J]. 长春理工大学学报:自然科学版, 2017, 40(2):4.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


上一篇:Python自学教程5-字符串有哪些常用操作
下一篇:没有了
网友评论