精华内容
下载资源
问答
  • sift特征匹配算法matlab
    2021-04-24 16:52:59

    【实例简介】

    matlab实现的SIFT特征提取的全代码,可运行 可测试 很不错的sift原代码

    【实例截图】

    【核心代码】

    sift的matlab代码,是最新的,效果不错,其中有很多详细说明,可以试试

    └── sift的matlab代码,是最新的,效果不错,其中有很多详细说明,可以试试

    └── sift

    ├── data

    │   ├── box.pgm

    │   ├── box.sift

    │   ├── circle.pgm

    │   ├── circle.sift

    │   ├── file11.jpg

    │   ├── file12.jpg

    │   ├── file1.jpg

    │   ├── file.jpg

    │   ├── ima1.jpg

    │   ├── ima2.jpg

    │   ├── img3.jpg

    │   ├── img5.jpg

    │   ├── landscape-a.jpg

    │   ├── landscape-b.jpg

    │   ├── nest2.bmp

    │   ├── nest.png

    │   ├── vessel-1.pgm

    │   └── vessel-2.pgm

    ├── demo.m

    ├── diffss.m

    ├── doc

    │   ├── bibliography.bib

    │   ├── figures

    │   │   ├── sift-descriptor-AI.bb

    │   │   ├── sift-descriptor-AI.pdf

    │   │   ├── sift-descriptor.aux

    │   │   ├── sift-descriptor.pdf

    │   │   ├── sift-descriptor-SAVED.tex

    │   │   ├── sift-descriptor.tex

    │   │   ├── sift-descriptor.wrm

    │   │   └── warmread.sty

    │   ├── sift.bbl

    │   ├── sift.tex

    │   └── visionlab.sty

    ├── gaussianss.m

    ├── imreadbw.m

    ├── imsmooth.c

    ├── imsmooth.mexw32

    ├── imsmooth.mexw32.pdb

    ├── LICENSE

    ├── Makefile

    ├── mexutils.c

    ├── plotmatches.asv

    ├── plotmatches.m

    ├── plotsiftdescriptor.m

    ├── plotsiftframe.m

    ├── plotss.m

    ├── README

    ├── sift_compile.m

    ├── sift_demo2.m

    ├── sift_demo3.m

    ├── sift_demo4.m

    ├── sift_demo5.m

    ├── sift_demo6.m

    ├── sift_demo.asv

    ├── sift_demo.m

    ├── siftdescriptor.c

    ├── siftdescriptor.dll

    ├── siftdescriptor.m

    ├── siftdescriptor.mexw32.pdb

    ├── sift_gendoc.css

    ├── siftlocalmax.c

    ├── siftlocalmax.m

    ├── siftlocalmax.mexw32

    ├── siftlocalmax.mexw32.pdb

    ├── sift.m

    ├── siftmatch.c

    ├── siftmatch.dll

    ├── siftmatch.m

    ├── siftormx.c

    ├── siftormx.mexw32

    ├── siftormx.mexw32.pdb

    ├── sift_overview.m

    ├── siftread.m

    ├── siftrefinemx.c

    ├── siftrefinemx.m

    ├── siftrefinemx.mexw32

    ├── siftrefinemx.mexw32.pdb

    ├── tightsubplot.m

    ├── TIMESTAMP

    └── VERSION

    5 directories, 79 files

    更多相关内容
  • matlab编制,可以有效实现双目视觉特征匹配,利用Sift算法进行特征匹配
  • This is a content.SIFT SIFT 指路 ???? The SIFT Keypoint Detector 注:程序为matlab版。 参考 SIFT特征提取-应用篇

    本来想做一个匹配算法汇总blog,but好累啊,还是一个一个来吧。
    (大不了后面…复制粘贴)

    SIFT

    程序指路 👉 The SIFT Keypoint Detector

    注:
    1)程序为matlab版;
    2)图像需为灰度图,若是彩色图像,需要转为灰度图,为便利使用,可以直接在sift.m中添加语句;
    3)执行sift.m会在命令行显示关键点数量;
    4)匹配数目由distRatio筛选;
    5)执行match.m会在命令行显示关键点数量及匹配数目;
    6)调用程序的主函数需要自己编写,在篇尾参考链接中有测试程序的和调用自己图片的例子。

    内含4个函数文件,分别为sift.mmatch.mshowkeys.mappendimages.m

    1. sift.m
    function [image, descriptors, locs] = sift (imageFile)
    % 输入参数
    % imageFile :图像路径
    %
    % 输出参数
    % image :double格式的图像数组
    % descriptors :K * 128矩阵,每行为第K个关键点的不变描述子,每个描述子为标准化后由128个值组成的向量
    % locs:K * 4矩阵,每行为第K个关键点的位置,每个位置包含4个值(行、列、尺度、方向),其中方向在[-PI,PI]范围内
    

    sift.m会调用到3个重要文件:tmp.pgmtmp.key以及一个名为sift的文件(如果使用VS应该是名为siftWin32exe执行文件)。

    • tmp.pgm:将图像转换为PGM图像文件。
    • tmp.key:确定关键点的数量及描述子长度。
    • sift:调用关键点可执行文件。
    1. match.m
    function num = match(image1, image2)
    % 输入参数
    % image1, image2 :2个图片数组
    %
    % 输出参数
    % num :匹配的sift特征数
    

    match.m中会先调用sift.m,先查找2张输入图像的sift关键点,再查找对于image1的每个关键点描述子在image2中的匹配点。
    distRatio值是筛选匹配关键点的一个阈值。(只有当最近邻与第二最近邻的矢量角之比小于distRatio,才认为是一个成功匹配)

    1. showkeys.m
    function showkeys(image, locs)
    % 输入参数
    % image :图像数组
    % locs :K * 4矩阵,每行为第K个关键点的位置,每个位置包含4个值(行、列、尺度、方向),其中方向在[-PI,PI]范围内
    

    在调用这个函数前,要先执行sift.m
    showkeys.m中还包含一个TransformLine子函数,用于绘制每个关键点描述子处的箭头。箭头长度的缩放比例为近似于用于计算关键点描述子的区域半径,箭头方向为关键点的方向。

    1. appendimages.m
    function im = appendimages(image1, image2)
    % 输入参数
    % image1, image2 :2个图片数组
    %
    % 输出参数
    % im :2个图像并排排列的组合图像
    

    match.m中调用,用于显示特征匹配结果。

    参考
    SIFT特征提取-应用篇

    展开全文
  • 实现人脸识别的特征提取特征,使用SIFT算法,可运行。Matlab环境。
  • 注:解压后将siftWin32放至matlab的bin文件夹下。 脚本调用格式如下: clc;clear;close all; img1=imread('figure1.png'); img2=imread('figure2.png'); img1_gray=rgb2gray(img1); img2_gray=rgb2gray(img2); ...

    源码下载:
    链接:https://pan.baidu.com/s/191COIwM515XP1rEDEP5H1Q
    提取码:owqt

    注:解压后将siftWin32放至matlab的bin文件夹下。

    脚本调用格式如下:

    clc;clear;close all;
    
    img1=imread('figure1.png');
    img2=imread('figure2.png');
    img1_gray=rgb2gray(img1);
    img2_gray=rgb2gray(img2);
    imwrite(img1_gray,'g1.jpg');
    imwrite(img2_gray,'g2.jpg');
    match('g1.jpg','g2.jpg');
    

    代码效果:
    在这里插入图片描述

    展开全文
  • 尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe在1999年所...

    一、sift算法简介

    尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe在1999年所发表,2004年完善总结。

    其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。

    SIFT算法的特点有:

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

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

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

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

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

    加拿大University of British Columbia 大学计算机科学系教授 David G. Lowe发表于2004年Int Journal of Computer Vision,2(60):91-110的那篇标题为“Distivtive Image Features from Scale -Invariant Keypoints" 的论文。作者在其学术网站上发表的Matlab程序代码(注意,这个程序代码的初始版本是 D. Alvaro and J.J. Guerrero, 来自Universidad de Zaragoza。)

    上述代码可以很容易检索到:http://www.cs.ubc.ca/~lowe/keypoints/
    

    二、sift算法的matlab实现

    1.sift.m 检测特征点+构建特征点描述子

    % [image, descriptors, locs] = sift(imageFile)
    %
    % This function reads an image and returns its SIFT keypoints.
    %   Input parameters:
    %     imageFile: the file name for the image.
    %
    %   Returned:
    %     image: the image array in double format
    %     descriptors: a K-by-128 matrix, where each row gives an invariant
    %         descriptor for one of the K keypoints.  The descriptor is a vector
    %         of 128 values normalized to unit length.
    %     locs: K-by-4 matrix, in which each row has the 4 values for a
    %         keypoint location (row, column, scale, orientation).  The 
    %         orientation is in the range [-PI, PI] radians.
    %
    % Credits: Thanks for initial version of this program to D. Alvaro and 
    %          J.J. Guerrero, Universidad de Zaragoza (modified by D. Lowe)
    
    function [image, descriptors, locs] = sift(imageFile)
    
    % Load image
    image = imread(imageFile);
    
    % If you have the Image Processing Toolbox, you can uncomment the following
    %   lines to allow input of color images, which will be converted to grayscale.
    % if isrgb(image)
    %    image = rgb2gray(image);
    % end
    
    [rows, cols] = size(image); 
    
    % Convert into PGM imagefile, readable by "keypoints" executable
    f = fopen('tmp.pgm', 'w');
    if f == -1
        error('Could not create file tmp.pgm.');
    end
    fprintf(f, 'P5\n%d\n%d\n255\n', cols, rows);
    fwrite(f, image', 'uint8');
    fclose(f);
    
    % Call keypoints executable
    if isunix
        command = '!./sift ';
    else
        command = '!siftWin32 ';
    end
    command = [command ' <tmp.pgm >tmp.key'];
    eval(command);
    
    % Open tmp.key and check its header
    g = fopen('tmp.key', 'r');
    if g == -1
        error('Could not open file tmp.key.');
    end
    [header, count] = fscanf(g, '%d %d', [1 2]);
    if count ~= 2
        error('Invalid keypoint file beginning.');
    end
    num = header(1);
    len = header(2);
    if len ~= 128
        error('Keypoint descriptor length invalid (should be 128).');
    end
    
    % Creates the two output matrices (use known size for efficiency)
    locs = double(zeros(num, 4));
    descriptors = double(zeros(num, 128));
    
    % Parse tmp.key
    for i = 1:num
        [vector, count] = fscanf(g, '%f %f %f %f', [1 4]); %row col scale ori
        if count ~= 4
            error('Invalid keypoint file format');
        end
        locs(i, :) = vector(1, :);
        
        [descrip, count] = fscanf(g, '%d', [1 len]);
        if (count ~= 128)
            error('Invalid keypoint file value.');
        end
        % Normalize each input vector to unit length
        descrip = descrip / sqrt(sum(descrip.^2));
        descriptors(i, :) = descrip(1, :);
    end
    fclose(g);
    end
    

    2.showkeys.m 绘制带有特征点的图像

    % showkeys(image, locs)
    %
    % This function displays an image with SIFT keypoints overlayed.
    %   Input parameters:
    %     image: the file name for the image (grayscale)
    %     locs: matrix in which each row gives a keypoint location (row,
    %           column, scale, orientation)
    
    function showkeys(image, locs)
    
    disp('Drawing SIFT keypoints ...');
    
    % Draw image with keypoints
    figure('Position', [50 50 size(image,2) size(image,1)]);
    colormap('gray');
    imagesc(image);
    hold on;
    imsize = size(image);
    for i = 1: size(locs,1)
        % Draw an arrow, each line transformed according to keypoint parameters.
        TransformLine(imsize, locs(i,:), 0.0, 0.0, 1.0, 0.0);
        TransformLine(imsize, locs(i,:), 0.85, 0.1, 1.0, 0.0);
        TransformLine(imsize, locs(i,:), 0.85, -0.1, 1.0, 0.0);
    end
    hold off;
    
    
    % ------ Subroutine: TransformLine -------
    % Draw the given line in the image, but first translate, rotate, and
    % scale according to the keypoint parameters.
    %
    % Parameters:
    %   Arrays:
    %    imsize = [rows columns] of image
    %    keypoint = [subpixel_row subpixel_column scale orientation]
    %
    %   Scalars:
    %    x1, y1; begining of vector
    %    x2, y2; ending of vector
    end
    
    function TransformLine(imsize, keypoint, x1, y1, x2, y2)
    
    % The scaling of the unit length arrow is set to approximately the radius
    %   of the region used to compute the keypoint descriptor.
    len = 6 * keypoint(3);
    
    % Rotate the keypoints by 'ori' = keypoint(4)
    s = sin(keypoint(4));
    c = cos(keypoint(4));
    
    % Apply transform
    r1 = keypoint(1) - len * (c * y1 + s * x1);
    c1 = keypoint(2) + len * (- s * y1 + c * x1);
    r2 = keypoint(1) - len * (c * y2 + s * x2);
    c2 = keypoint(2) + len * (- s * y2 + c * x2);
    
    line([c1 c2], [r1 r2], 'Color', 'c');
    end
    
    

    3.appendimages.m 绘制两幅图像经过特征匹配后的一幅图像

    % im = appendimages(image1, image2)
    %
    % Return a new image that appends the two images side-by-side.
    
    function im = appendimages(image1, image2)
    
    % Select the image with the fewest rows and fill in enough empty rows
    %   to make it the same height as the other image.
    rows1 = size(image1,1);
    rows2 = size(image2,1);
    
    if (rows1 < rows2)
         image1(rows2,1) = 0;
    else
         image2(rows1,1) = 0;
    end
    
    % Now append both images side-by-side.
    im = [image1 image2];   
    end
    

    4.match.m 读取两幅图像,分别提取它们的关键点并进行匹配

    % num = match(image1, image2)
    %
    % This function reads two images, finds their SIFT features, and
    %   displays lines connecting the matched keypoints.  A match is accepted
    %   only if its distance is less than distRatio times the distance to the
    %   second closest match.
    % It returns the number of matches displayed.
    %
    % Example: match('scene.pgm','book.pgm');
    
    function num = match(image1, image2)
    
    % Find SIFT keypoints for each image
    [im1, des1, loc1] = sift(image1);
    [im2, des2, loc2] = sift(image2);
    
    % For efficiency in Matlab, it is cheaper to compute dot products between
    %  unit vectors rather than Euclidean distances.  Note that the ratio of 
    %  angles (acos of dot products of unit vectors) is a close approximation
    %  to the ratio of Euclidean distances for small angles.
    %
    % distRatio: Only keep matches in which the ratio of vector angles from the
    %   nearest to second nearest neighbor is less than distRatio.
    distRatio = 0.6;   
    
    % For each descriptor in the first image, select its match to second image.
    des2t = des2';                          % Precompute matrix transpose
    for i = 1 : size(des1,1)
       dotprods = des1(i,:) * des2t;        % Computes vector of dot products
       [vals,indx] = sort(acos(dotprods));  % Take inverse cosine and sort results
    
       % Check if nearest neighbor has angle less than distRatio times 2nd.
       if (vals(1) < distRatio * vals(2))
          match(i) = indx(1);
       else
          match(i) = 0;
       end
    end
    
    % Create a new image showing the two images side by side.
    im3 = appendimages(im1,im2);
    
    % Show a figure with lines joining the accepted matches.
    figure('Position', [100 100 size(im3,2) size(im3,1)]);
    colormap('gray');
    imagesc(im3);
    hold on;
    cols1 = size(im1,2);
    for i = 1: size(des1,1)
      if (match(i) > 0)
        line([loc1(i,2) loc2(match(i),2)+cols1], ...
             [loc1(i,1) loc2(match(i),1)], 'Color', 'c');
      end
    end
    hold off;
    num = sum(match > 0);
    fprintf('Found %d matches.\n', num);
    end
    

    四、说明

    1 match.m
    功能:该函数读入两幅(灰度)图像,找出各自的 SIFT 特征, 并显示两连接两幅图像中被匹配的特征点(关键特征点(the matched keypoints)直线(将对应特征点进行连接)。判断匹配的准则是匹配距离小于distRatio倍于下一个最近匹配的距离( A match is accepted only if its distance is less than distRatio times the distance to the second closest match.
    该程序返回显示的匹配对的数量。( It returns the number of matches displayed.)

    调用实例: match(‘desk.jpg’,‘book.jpg’);
    ( 测试一个含有一本书的桌面的图像和一本书的图像之间特征匹配)
    注意:
    (1)图像为灰度图像,如果是彩色图像,应该在调用前利用rgb2gray转换为灰度图像。
    (2)参数distRatio 为控制匹配点数量的系数,这里取 0.6,该参数决定了匹配点的数量,在Match.m文件中调整该参数,获得最合适的匹配点数量。

    2.sift.m:SIFT算法的核心
    具体原理详见David G. Lowe发表于2004年Int Journal of Computer Vision,2(60):91-110的那篇标题为“Distivtive Image Features from Scale -Invariant Keypoints" 的论文
    功能:该函数读入灰度图像,返回SIFT 特征关键点( SIFT keypoints.)
    调用方式:[image, descriptors, locs] = sift(imageFile)
    输入参数:imageFile: 图像文件名
    返回参数:image: 是具有double format格式的图像矩阵,descriptors: 一个 K-by-128的矩阵x, 其中每行是针对找到的K个关键特征点(the K keypoints)的不变量描述子,这个描述子(descriptor)是一个拥有128个数值并归一化为单位长度向量;locs: 是K-by-4 矩阵, 其中的每一行具有四个数值,表示关键点位置信息 (在图像中的行坐标,列坐标(row, column) ,注意,一般图像的左上角为坐标原点);尺度scale,高斯尺度空间的参数,其中该参数也决定了frame(结构)确定的图像disk的大小;最后一个参数是方向orientation),方向参数的范围是[-PI, PI] 单位为弧度。

    3.appendimages.m
    该函数创建一个新的图像分别包含两个匹配的图像和他们之间的匹配对的连接直线。

    4.其余详细解释可参考博文https://www.cnblogs.com/xfzhang/articles/1878089.html

    三、结果

    1.两幅图像的特征点匹配结果:
    在这里插入图片描述
    2.单幅图像的特征点检测
    在这里插入图片描述

    展开全文
  • 本文章仅实现SIFT特征提取,并未进行特征匹配。代码注释详细,结合推荐学习资料阅读,可以快速学习并掌握SIFT特征提取算法,并使用matlab实现。
  • matlab版本的源码,有详细的sift特征提取和匹配的步骤介绍,具体sift是什么我就不多说了。这个matlab版本的源码就是供初学者学习之用。本人也是刚刚学习,代码亲字试过,希望对大家有帮助,大家一起学习
  • matlab实现sift提取特征点代码程序 SIFT算法的相关实现 自己用matlab写的sift特征点检测与匹配程序,运行能通过
  • sift特征匹配matlab

    2021-04-23 17:55:04
    首先对彩色壁画图像提取 SIFT 特征 点与特征向量,然后对每个特征点提取 HSI 彩色特征,最后按定义的相似性度 量公式计算两个特征点之间的距离,确定二者是否匹配。...通过计算机中 的 Matlab 软件对图片进行处理,包括...
  • matlab实现sift提取特征点,SIFT算法的相关实现 自己用matlab写的sift特征点检测与匹配程序,运行能通过
  • SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。 2、内容说明 略 3、仿真分析 main...
  • d) 高速性,经优化的SIFT匹配算法甚至可以达到实时的要求。 e) 可扩展性,可以很方便的与其他形式的特征向量进行联合。 SIFT算法基于图像特征尺度选择的思想,建立图像的多尺度空间,在不同尺度下检测到同一个特征...
  • 这是SIFT算法,其中核心代码是SIFT特征匹配代码
  • Matlab 写的sift查找特征点和特征匹配算法代码。 输入两幅图像,检测特征点并匹配,输出匹配结果
  • SIFT特征匹配算法-SIFT.rar SIFT:Scale Invariant Feature Transform SIFT特征匹配算法是目前国内外特征点匹配研究领域的热点与难点,其匹配能力较强,可以处理两幅图像之间发生平移、旋转、仿射变换情况下的...
  • 基于SIFT的图像配准,适合初学者,里面有程序,分较少。
  • SIFT算法Matlab实现

    热门讨论 2014-02-23 16:30:51
    SIFT算法的纯Matlab实现,其中用到的C代码可以通过compile进行编译后,和matlab完美融合,可以运行在lunix和win平台上,非常实用,是另一种SIFT算法实现,不是David Lowe实现的算法,但是效果和他的相当!...
  • SIFT图像处理算法,可对灰度图像和彩色图像进行图像匹配
  • 图像特征匹配算法 SCALE INVARIANT FEATURE TRANSFORM
  • SIFT特征点检测算法matlab实现的,程序里还有匹配部分功能
  • 算法原文如下,有需要的朋友可以点击进行下载(1) 尺度不变特征变换(SIFT算法)概要 是一种计算机视觉的算法,用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。...
  • sift算法实现的图像匹配程序,使用matlab编写的,多用于图像拼接,融合等领域。
  • vlfeat中sift特征点检测和匹配的测试代码,要先预先下载安装vlfeat工具箱,然后自行修改这个代码文件里面vlfeat工具箱路径。vlfeat里的sift算子是目前实现效果最好的。注意若输入不是rgb图像请修改代码,去除rgb转...
  • 特征点检测与匹配SIFT算法的纯MATLAB源程序,原理一清二楚
  • 三维坐标点的SIFT特征匹配。产生2个三维模型的坐标点,然后进行SIFT特征提取,然后进行配准
  • SIFT特征匹配算法简介

    千次阅读 2012-12-07 12:19:16
    Sift是David Lowe于1999年提出的局部特征描述子,可以处理两幅图像之间发生平移、旋转、仿射变换情况下的匹配问题,具有良好的不变性和很强的匹配能力。SIFT算法是一种提取局部特征算法,也是一种模式识别技术,其...
  • SIFT算法实现特征匹配,首先检测特征点,然后形成描述符,将描述符进行比对,匹配对应的特征点。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,976
精华内容 790
关键字:

sift特征匹配算法matlab

matlab 订阅