当前位置:网站首页 > 技术博客 > 正文

sift matlab

1 基于sift算法实现图像配准算法

模型参考这里。

2 部分代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close all; clear all; %% image path file_image='F:\class_file\图像配准\图像配准'; %% read images [filename,pathname]=uigetfile({'*.*','All Files(*.*)'},'Reference image',...                          file_image); image_1=imread(strcat(pathname,filename)); [filename,pathname]=uigetfile({'*.*','All Files(*.*)'},'Image to be registered',...                          file_image); image_2=imread(strcat(pathname,filename)); figure; subplot(1,2,1); imshow(image_1); title('Reference image'); subplot(1,2,2); imshow(image_2); title('Image to be registered'); %% make file for save images if (exist('save_image','dir')==0)%如果文件夹不存在    mkdir('save_image'); end t1=clock;%Start time %% Convert input image format [~,~,num1]=size(image_1); [~,~,num2]=size(image_2); if(num1==3)    image_11=rgb2gray(image_1); else    image_11=image_1; end if(num2==3)    image_22=rgb2gray(image_2); else    image_22=image_2; end %Converted to floating point data image_11=im2double(image_11); image_22=im2double(image_22);    %% Define the constants used sigma=1.6;%最底层高斯金字塔的尺度 dog_center_layer=3;%定义了DOG金字塔每组中间层数,默认是3 contrast_threshold_1=0.03;%Contrast threshold contrast_threshold_2=0.03;%Contrast threshold edge_threshold=10;%Edge threshold is_double_size=false;%expand image or not change_form='affine';%change mode,'perspective','affine','similarity' is_sift_or_log='GLOH-like';%Type of descriptor,it can be 'GLOH-like','SIFT' %% The number of groups in Gauss Pyramid nOctaves_1=num_octaves(image_11,is_double_size); nOctaves_2=num_octaves(image_22,is_double_size); %% Pyramid first layer image image_11=create_initial_image(image_11,is_double_size,sigma); image_22=create_initial_image(image_22,is_double_size,sigma); %% Gauss Pyramid of Reference image tic; [gaussian_pyramid_1,gaussian_gradient_1,gaussian_angle_1]=... build_gaussian_pyramid(image_11,nOctaves_1,dog_center_layer,sigma);                                                       disp(['参考图像创建Gauss Pyramid花费时间是:',num2str(toc),'s']); %% DOG Pyramid of Reference image tic; dog_pyramid_1=build_dog_pyramid(gaussian_pyramid_1,nOctaves_1,dog_center_layer); disp(['参考图像创建DOG Pyramid花费时间是:',num2str(toc),'s']); %% display the Gauss Pyramid,DOG Pyramid,gradient of Reference image display_product_image(gaussian_pyramid_1,dog_pyramid_1,gaussian_gradient_1,...        gaussian_angle_1,nOctaves_1,dog_center_layer,'Reference image');                               clear gaussian_pyramid_1; %% Reference image DOG Pyramid extreme point detection tic; [key_point_array_1]=find_scale_space_extream... (dog_pyramid_1,nOctaves_1,dog_center_layer,contrast_threshold_1,sigma,... edge_threshold,gaussian_gradient_1,gaussian_angle_1); disp(['参考图像关键点定位花费时间是:',num2str(toc),'s']); clear dog_pyramid_1; %% descriptor generation of the reference image tic; [descriptors_1,locs_1]=calc_descriptors(gaussian_gradient_1,gaussian_angle_1,...                                key_point_array_1,is_double_size,is_sift_or_log); disp(['参考图像描述符生成花费时间是:',num2str(toc),'s']);  clear gaussian_gradient_1; clear gaussian_angle_1; %% Gauss Pyramid of the image to be registered tic; [gaussian_pyramid_2,gaussian_gradient_2,gaussian_angle_2]=... build_gaussian_pyramid(image_22,nOctaves_2,dog_center_layer,sigma);                                                                                                   disp(['待配准图像创建Gauss Pyramid花费时间是:',num2str(toc),'s']); %% DOG of the image to be registered tic; dog_pyramid_2=build_dog_pyramid(gaussian_pyramid_2,nOctaves_2,dog_center_layer); disp(['待配准图像创建DOG Pyramid花费时间是:',num2str(toc),'s']); display_product_image(gaussian_pyramid_2,dog_pyramid_2,gaussian_gradient_2,...        gaussian_angle_2,nOctaves_2,dog_center_layer,'Image to be registered');                               clear gaussian_pyramid_2; %% Image to be registered DOG Pyramid extreme point detection tic; [key_point_array_2]=find_scale_space_extream... (dog_pyramid_2,nOctaves_2,dog_center_layer,contrast_threshold_2,sigma,.... edge_threshold,gaussian_gradient_2,gaussian_angle_2); disp(['待配准图像关键点定位花费时间是:',num2str(toc),'s']); clear dog_pyramid_2; %% descriptor generation of the Image to be registered tic; [descriptors_2,locs_2]=calc_descriptors(gaussian_gradient_2,gaussian_angle_2,...                       key_point_array_2,is_double_size,is_sift_or_log); disp(['待配准图像描述符生成花费时间是:',num2str(toc),'s']);  clear gaussian_gradient_2; clear gaussian_angle_2; %% match tic; [solution,rmse,cor1,cor2]=...    match(image_2, image_1,descriptors_2,locs_2,descriptors_1,locs_1,change_form); disp(['特征点匹配花费时间是:',num2str(toc),'s']);  

3 仿真结果

img

img

img4 参考文献

[1]汪道寅. 基于SIFT图像配准算法的研究[D]. 中国科学技术大学.

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

版权声明


相关文章:

  • int类型和integer的区别2025-06-05 21:30:05
  • 宽带在性取向里代表啥2025-06-05 21:30:05
  • 用matlab做图像配准2025-06-05 21:30:05
  • can和canfd波特率2025-06-05 21:30:05
  • 小波变换图像增强 matlab2025-06-05 21:30:05
  • 原型设计的流程2025-06-05 21:30:05
  • mysql in和=的区别2025-06-05 21:30:05
  • 收藏夹吃灰是什么意思2025-06-05 21:30:05
  • 基于matlab的语音信号处理与分析2025-06-05 21:30:05
  • python面向对象编程的三大特性2025-06-05 21:30:05