joyce19920920的专栏

sift是目前常用的local feature的描述子。sift特征匹配算法可以处理两幅图像之间发生一些平移、旋转、仿射等匹配问题。因为早前自己要做一个图像拼接的问题,所以用到了sift。写这篇blog,是因为自己准备向CV进军,开始着手写blog来积累知识,这也是我第一篇blog,虽然这篇blog很简陋,纯属向sift致敬,但也方便一些初学者使用吧。以后也会不定期对自己的一些在CV的见解进行发表,希望能通过这个和大家相互讨论。如果您想对其原理有个透彻的理解,,可以参考下面这篇blog,博主写的非常详尽 —— [ sift算法详解 ]

代码分析

首先,你可以从David Lowe的个人网站~lowe/keypoints/” target = “-blank”>[website]找到代码的Version4,download后可以得到有4个m函数,主要看match.m,我对其进行了中文注解:

= = sift(image1);[im2, des2, loc2] = sift(image2);distRatio = 0.6;des2t = = 1 : size(des1,1)dotprods = des1((vals(1) < distRatio * vals(2))match(i) = indx(1);elsematch(i) = 0;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);= 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’);endendhold off;num = sum(match > 0);fprintf(‘Found %d matches.\n’, num);

你可以在command window中输入: match(‘scene.pgm’,’book.pgm’); 便可以得到下图:

sift.m因为主要的求解方式被C混编了,所以看不到,所以只给出该函数返回的参数: % image:灰度图像 % descriptors:对特征点进行描述的128维向量 % locs:是一个4维向量组,前两维为特征点的坐标,第三维是尺度,第四维为方向,详细可以看showkeys.m

disp(‘Drawing SIFT keypoints …’);% Draw image with keypoints% 下面这是对出来的figure进行一些参数输入,这个不重要figure(‘Position’, [50 50 size(image,2) size(image,1)]);colormap(‘gray’);imagesc(image);hold on;imsize = size(image);= 1: size(locs,1)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);endhold off;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’);

给出一张彩色的showkeys的效果:

blending.m就是把两张图片在同一个figure中展示,这个就不需要过多解释了。

第一篇博文,水是水了点,慢慢会改善。希望学习CV的博友多加好友,共同学习。

我也相信爱可以排除万难;只是,万难之后,又有万难。这是我更相信的。

joyce19920920的专栏

相关文章:

你感兴趣的文章:

标签云: