首页 > 编程语言 >基于Surf+GTM的图像配准和拼接算法matlab仿真

基于Surf+GTM的图像配准和拼接算法matlab仿真

时间:2023-02-14 21:01:30浏览次数:50  
标签:Surf 配准 I1 矩阵 GTM Ipts1 图像 Hessian size

1.算法描述 SIFT采用的是DoG图像,而SURF采用的是Hessian矩阵(SURF算法核心)行列式近似值图像。在数学中,Hessian矩阵是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵,即每一个像素点都可以求出一个2x2的Hessian矩阵,可计算出其行列式detH,可以利用行列式取值正负来判别该点是或不是极值点来将所有点分类。在SURF算法中,选用二阶标准高斯函数作为滤波器,通过特定核间的卷积计算二阶偏导数,从而计算出Hessian矩阵,但是由于特征点需要具备尺度无关性,所以在进行Hessian矩阵构造前,需要对其进行高斯滤波(由于高斯核服从正态分布,所以为了提高运算速度,SURF采用了盒式滤波器近似代替高斯滤波器提高运算速度),即与以方差为自变量的高斯函数的二阶导数进行卷积。通过这种方法可以为图像中每个像素计算出其H的行列式的决定值,并用这个值来判别特征点。

    黑塞矩阵(Hessian Matrix)是一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。由德国数学家Ludwin Otto Hessian于19世纪提出。 
   surf构造的金字塔图像与sift有很大不同,Sift采用的是DOG图像,而surf采用的是Hessian矩阵行列式近似值图像。 Hessian矩阵是Surf算法的核心,构建Hessian矩阵的目的是为了生成图像稳定的边缘点(突变点),为下文的特征提取做好基础。

   每一个像素点都可以求出一个Hessian矩阵。

image.png

   Hessian矩阵的判别式为: 

image.png

   当Hessian矩阵的判别式取得局部极大值时,判定当前点是比周围邻域内其他点更亮或更暗的点,由此来定位关键点的位置。

   在SURF算法中,图像像素l(x,y)即为函数值f(x,y)。但是由于我们的特征点需要具备尺度无关性,所以在进行Hessian矩阵构造前,需要对其进行高斯滤波,选用二阶标准高斯函数作为滤波器。 

   与Sift特征点匹配类似,Surf也是通过计算两个特征点间的欧式距离来确定匹配度,欧氏距离越短,代表两个特征点的匹配度越好。 不同的是Surf还加入了Hessian矩阵迹的判断,如果两个特征点的矩阵迹正负号相同,代表这两个特征具有相同方向上的对比度变化,如果不同,说明这两个特征点的对比度变化方向是相反的,即使欧氏距离为0,也直接予以排除。

2.仿真效果预览 matlab2022a仿真结果如下:

5.png7.png4.png6.png3.png

3.MATLAB核心程序

clear;
close all;
warning off;
addpath(genpath(pwd));
 
  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;
A106

标签:Surf,配准,I1,矩阵,GTM,Ipts1,图像,Hessian,size
From: https://blog.51cto.com/matworld/6057419

相关文章

  • 基于Surf+GTM的图像配准和拼接算法matlab仿真
    1.算法描述        SIFT采用的是DoG图像,而SURF采用的是Hessian矩阵(SURF算法核心)行列式近似值图像。在数学中,Hessian矩阵是一个自变量为向量的实值函数的二阶偏导......
  • Surface Pro (1796),安装Win11之后出现的问题。
    2020年年中我为了体验微软新的操作系统,加入了Review计划,即:Windows预览体验计划。然后升级到了Win11。由于苏菲一直是作为辅助设备用,所以平时就是开节电模式,中途也升级了几......
  • 采用 opencv surf 算子进行特征匹配
    ​​opencvdocu​​​​源码在git​​目录结构.├──build├──CMakeLists.txt├──main.cpp├──t1.jpg└──t2.jpg/**@fileSURF_FlannMatcher*@briefSUR......
  • 如何在 Nuxt 3 中使用 wavesurfer.js
    安装wavesurfer.js在项目中安装wavesurfer.jsnpminstall--savewavesurfer.js常规方式引入如果你的根目录中没有components目录则需要创建该目录,并在此目录中创......
  • 【Surface Detection】Segmentation-Based Deep-Learning Approach for Surface-Defec
    物体表面缺陷检测现状传统机器学习局限性传统机器学习方法对于特定的算法只能解决特定的问题,不够灵活,无法快速适应新产品;不同的问题有不同的特征,当需要解决新问题时,需......
  • 安卓-SurfaceView
    一、SurfaceView是View的孪生兄弟View通过刷新来重绘视图,安卓系统通过发出VSYNC信号来进行屏幕重绘,刷新间隔是16ms。如果一次重绘耗时太长超过16ms会出现警告的log告诉你......
  • convex Adam | 快速3D配准 | Learn2Reg 2021
    微信公众号:机器学习炼丹术笔记:陈亦新参考论文:Fast3Dregistrationwithaccurateoptimisationandlittlelearningforlearn2Reg2021相关代码:​​github.com/multimoda......
  • DeepSTAPLE:UDA任务下学习多模态配准质量
    微信公众号:机器学习炼丹术笔记:陈亦新参考论文:DeepSTAPLE:Learningtopredictmultimodalregistrationqualityforunsuperviseddomainadaptation、参考code:​​multim......
  • 特征提取算法的综合实验(多种角度比较sift/surf/brisk/orb/akze)
    一、基本概念:作用:特征点提取在“目标识别、图像拼接、运动跟踪、图像检索、自动定位”等研究中起着重要作用;主要算法:•FAST,​​Machine......
  • gpu 渲染 surface与canvas
    Android应用程序UI硬件加速渲染技术简要介绍和学习计划罗升阳    Android系统的流畅性一直被拿来与iOS比较,并且认为不如后者。这一方面与Android设备硬件质量参差......