您现在的位置:首页 >> 图像处理 >> 内容

基于sift特征提取的图像配准算法matlab仿真

时间:2022/12/28 17:58:45 点击:

  核心提示:A154包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y5uTmJ9q

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览




3.算法概述

        SIFT 是一种从图像中提取独特不变特征的方法,其特点为基于图像的一些局部特征,而与图像整体的大小和旋转无关。并且该方法对于光照、噪声、仿射变换具有一定鲁棒性,同时能生成大量的特征点。SIFT (Scale-invariant feature transform), 尺度不变特征转换,是一种图像局部特征提取算法,它通过在不同的尺度空间中寻找极值点(特征点,关键点)的精确定位和主方向,构建关键点描述符来提取特征。

        SIFT提取的关键点具有尺度不变性、旋转不变性,而且不会因光照、仿射变换和噪音等因素而干扰。SIFT所查找到的关键点是一些十分突出、不会因光照、仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。

1. SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;

2. 独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;

3. 多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;

4. 高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;

5. 可扩展性,可以很方便的与其他形式的特征向量进行联合。

4.部分源码

....................................

frames = [] ;

descriptors = [] ;

%   开始工作

%

fprintf('---------------------------- 开始 SIFT: 从图像中提取SIFT特征 ------------------------------\n') ; tic ; 

fprintf('SIFT: 用DoG构造尺度空间 ...\n') ; tic ; 

scalespace = do_gaussian(I,sigmaN,O,S,omin,-1,S+1,sigma0) ;

fprintf('                高斯尺度空间计时: (%.3f s)\n',toc) ; tic ; 

difofg = do_diffofg(scalespace) ;

fprintf('                构建相减尺度空间: (%.3f s)\n',toc) ;

for o=1:scalespace.O

fprintf('CS5240 -- SIFT: 计算 “组”  %d\n', o-1+omin) ;

                tic ;

  %  DOG octave 的局部极值检测

    oframes1 = do_localmax(  difofg.octave{o}, 0.8*thresh, difofg.smin  ) ;

    oframes2 = do_localmax( -difofg.octave{o}, 0.8*thresh, difofg.smin  ) ;

oframes = [oframes1 ,oframes2 ] ; 

    fprintf('CS5240 -- SIFT: 初始化关键点 # %d.  \n', ...

      size(oframes, 2)) ;

    fprintf('                用时 (%.3f s)\n', ...

       toc) ;

    tic ;

    if size(oframes, 2) == 0

        continue;

    end

  % 移除靠近边界的关键点

    rad = magnif * scalespace.sigma0 * 2.^(oframes(3,:)/scalespace.S) * NBP / 2 ;

    sel=find(...

      oframes(1,:)-rad >= 1                     & ...

      oframes(1,:)+rad <= size(scalespace.octave{o},2) & ...

      oframes(2,:)-rad >= 1                     & ...

      oframes(2,:)+rad <= size(scalespace.octave{o},1)     ) ;

    oframes=oframes(:,sel) ;%把不是靠近边界点的极值点重新放入oframes中

fprintf('CS5240 -- SIFT: 移除靠近边界关键点后 # %d \n', size(oframes,2)) ;

      tic ;

  % 精简局部, 阈值强度 和移除边缘关键点

    oframes = do_extrefine(...

  oframes, ...

  difofg.octave{o}, ...

  difofg.smin, ...

  thresh, ...

  r) ;

    fprintf('CS5240 -- SIFT:  移除低对比度和边缘上关键点后 # %d \n',size(oframes,2)) ;

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

    tic ;

    fprintf('CS5240 -- SIFT: 计算特征点方向\n');

  % 计算方向

oframes = do_orientation(...

oframes, ...

scalespace.octave{o}, ...

scalespace.S, ...

scalespace.smin, ...

scalespace.sigma0 ) ;

fprintf('                用时: (%.3f s)\n', toc);tic;

  % Store frames

x     = 2^(o-1+scalespace.omin) * oframes(1,:) ;

y     = 2^(o-1+scalespace.omin) * oframes(2,:) ;

sigma = 2^(o-1+scalespace.omin) * scalespace.sigma0 * 2.^(oframes(3,:)/scalespace.S) ; %图像的尺度

frames = [frames, [x(:)' ; y(:)' ; sigma(:)' ; oframes(4,:)] ] ;

fprintf('CS5240 -- SIFT:计算方向后的特征点 # %d  \n', size(frames,2)) ;

  % Descriptors

    fprintf('CS5240 -- SIFT: 计算 描述子...\n') ;

    tic ;

........................................

A154

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168