• 【图像配准】基于surf算法实现图像配准附Matlab代码


    1 内容介绍

    传统的全景图像配准多采用基于SIFT的方法,该方法数据量大,时间效率低.提出了一种基于SURF的全景图像快速配准方法.运用SU RF提取特征点,计算特征描述符;运用低时间复杂度的K-D树最近邻搜索法实现特征点快速匹配;利用RANSAC算法剔除误匹配点;最后估计出两幅全景图像的变换矩阵.测试表明:算法具有较高的时间效率和良好的鲁棒性.

    2 部分代码

    % Example 3, Affine registration

    % Load images

    clc

    clear all

    close all

    tic

    I1=im2double(imread('TestImages/lena1.png'));

    I2=im2double(imread('TestImages/lena2.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);

    % Make vectors with the coordinates of the best matches

    Pos1=[[Ipts1(cor1).y]',[Ipts1(cor1).x]'];

    Pos2=[[Ipts2(cor2).y]',[Ipts2(cor2).x]'];

    Pos1=Pos1(1:30,:);

    Pos2=Pos2(1:30,:);

    % 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); hold on;

    % Show the best matches

    plot([Pos1(:,2) Pos2(:,2)+size(I1,2)]',[Pos1(:,1) Pos2(:,1)]','-');

    plot([Pos1(:,2) Pos2(:,2)+size(I1,2)]',[Pos1(:,1) Pos2(:,1)]','o');

    % Calculate affine matrix

    Pos1(:,3)=1; Pos2(:,3)=1;

    M=Pos1'/Pos2';

    % Add subfunctions to Matlab Search path

    functionname='OpenSurf.m';

    functiondir=which(functionname);

    functiondir=functiondir(1:end-length(functionname));

    addpath([functiondir '/WarpFunctions'])

    % Warp the image

    I1_warped=affine_warp(I1,M,'bicubic');

    % Show the result

    figure,

    subplot(1,3,1), imshow(I1);title('Figure 1');

    subplot(1,3,2), imshow(I2);title('Figure 2');

    subplot(1,3,3), imshow(I1_warped);title('Warped Figure 1');

    toc 

    fprintf('Found %d matches.\n', size(Pos1,1)) ;

    fprintf('Matched in %.3f s\n', toc) ;

    3 运行结果

    4 参考文献

    [1]阳吉斌, 胡访宇, 朱高. 基于改进SURF算法的遥感图像配准[J]. 电子测量技术, 2012, 35(3):5.​

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

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

  • 相关阅读:
    操作系统(3.5)--死锁概述
    几种“超强壮”的弱密码方案
    【附源码】Python计算机毕业设计网络硬盘管理系统
    opengauss数据备份(docker中备份)
    comfyui安装指南及animaldiff使用
    Kotlin委托
    人体解析(Human Parse)开源数据集整理
    CMake的使用
    jmeter调试错误大全
    易点易动上线招标管理模块:提升企业高效招标管理的解决方案
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/126940124