最近没空写最后一部分的内容,先把代码放上来

% SIFT 算法的最后一步是特征向量生成orient_bin_spacing = pi/4;
orient_angles = [-pi:orient_bin_spacing:(pi-orient_bin_spacing)];grid_spacing = 4;
[x_coords y_coords] = meshgrid( [-6:grid_spacing:6] );
feat_grid = [x_coords(:) y_coords(:)]';
[x_coords y_coords] = meshgrid( [-(2*grid_spacing-0.5):(2*grid_spacing-0.5)] );
feat_samples = [x_coords(:) y_coords(:)]';
feat_window = 2*grid_spacing;desc = [];if interactive >= 1fprintf( 2, 'Computing keypoint feature descriptors for %d keypoints', size(pos,1) );
end
for k = 1:size(pos,1)x = pos(k,1)/subsample(scale(k,1));y = pos(k,2)/subsample(scale(k,1));   % 将坐标轴旋转为关键点的方向,以确保旋转不变性M = [cos(orient(k)) -sin(orient(k)); sin(orient(k)) cos(orient(k))];feat_rot_grid = M*feat_grid + repmat([x; y],1,size(feat_grid,2));feat_rot_samples = M*feat_samples + repmat([x; y],1,size(feat_samples,2));% 初始化特征向量.feat_desc = zeros(1,128);for s = 1:size(feat_rot_samples,2)x_sample = feat_rot_samples(1,s);y_sample = feat_rot_samples(2,s);% 在采样位置进行梯度插值[X Y] = meshgrid( (x_sample-1):(x_sample+1), (y_sample-1):(y_sample+1) );G = interp2( gauss_pyr{scale(k,1),scale(k,2)}, X, Y, '*linear' );G(find(isnan(G))) = 0;diff_x = 0.5*(G(2,3) - G(2,1));diff_y = 0.5*(G(3,2) - G(1,2));mag_sample = sqrt( diff_x^2 + diff_y^2 );grad_sample = atan2( diff_y, diff_x );if grad_sample == pigrad_sample = -pi;end      % 计算x、y方向上的权重x_wght = max(1 - (abs(feat_rot_grid(1,:) - x_sample)/grid_spacing), 0);y_wght = max(1 - (abs(feat_rot_grid(2,:) - y_sample)/grid_spacing), 0); pos_wght = reshape(repmat(x_wght.*y_wght,8,1),1,128);diff = mod( grad_sample - orient(k) - orient_angles + pi, 2*pi ) - pi;orient_wght = max(1 - abs(diff)/orient_bin_spacing,0);orient_wght = repmat(orient_wght,1,16);         % 计算高斯权重g = exp(-((x_sample-x)^2+(y_sample-y)^2)/(2*feat_window^2))/(2*pi*feat_window^2);feat_desc = feat_desc + pos_wght.*orient_wght*g*mag_sample;end% 将特征向量的长度归一化,则可以进一步去除光照变化的影响.feat_desc = feat_desc / norm(feat_desc);feat_desc( find(feat_desc > 0.2) ) = 0.2;feat_desc = feat_desc / norm(feat_desc);% 存储特征向量.desc = [desc; feat_desc];if (interactive >= 1) & (mod(k,25) == 0)fprintf( 2, '.' );end
end
desc_time = toc;% 调整采样偏差
sample_offset = -(subsample - 1);
for k = 1:size(pos,1)pos(k,:) = pos(k,:) + sample_offset(scale(k,1));
endif size(pos,1) > 0scale = scale(:,3);
end% 在交互模式下显示运行过程耗时.
if interactive >= 1fprintf( 2, '\nDescriptor processing time %.2f seconds.\n', desc_time );fprintf( 2, 'Processing time summary:\n' );fprintf( 2, '\tPreprocessing:\t%.2f s\n', pre_time );fprintf( 2, '\tPyramid:\t%.2f s\n', pyr_time );fprintf( 2, '\tKeypoints:\t%.2f s\n', keypoint_time );fprintf( 2, '\tGradient:\t%.2f s\n', grad_time );fprintf( 2, '\tOrientation:\t%.2f s\n', orient_time );fprintf( 2, '\tDescriptor:\t%.2f s\n', desc_time );fprintf( 2, 'Total processing time %.2f seconds.\n', pre_time + pyr_time + keypoint_time + grad_time + orient_time + desc_time );
end

福利答谢大家!

感谢您阅读本篇文章,对此特别发放一个无门槛的现金红包,打开支付宝扫码领取,可以领到钱的哦!

SIFT四部曲之——构建关键点特征描述符相关推荐

  1. opencv(十八)-关键点和描述符

    索引目录 1.关键点的类cv::KeyPoint 2.cv::Feature2D-查找并计算描述符 3.cv::DMatch对象 4.cv::DescriptorMatcher 关键点匹配类 5.核心 ...

  2. OpenCV3学习(11.3)关键点的描述符KeyPoint对象与匹配类DMatch

    corners:包含大量本地信息的像素块,并能够在另一张图中被快速识别 keypoints:作为 corners 的扩展,它将像素块的信息进行编码从而使得更易辨识,至少在原则上唯一 descripto ...

  3. HTMD | 从PDB文件获取3D特征描述符

    KDEEP是使用深度学习(CNN)进行亲和力预测的预测器. 关于这篇文章,我发现了一个新的名为HTMD(高通分子动力学)的python库. 我真的不擅长从头算或MD计算等计算领域. 因此,我无法评估该 ...

  4. 计算机视觉大型攻略 —— 特征与匹配(3)特征描述符

    接上一篇文章.这篇写特征描述符.特征匹配算法在确定角点后,还需要使用描述符来描述这些角点. 本文参考书籍:Computer Vision: Algorithms and Applications, R ...

  5. 使用LIRe来实现基于多特征描述符的图像检索系统

    使用LIRe来实现基于多特征描述符的图像检索系统 摘要 - 因为没有完美的特征描述符可以适合描述任何图像,本文提出组合不同的特征描述符来做基于内容的图像检索和使用LIRe实现图像检索系统.实验表明使用 ...

  6. 从特征描述符到深度学习:计算机视觉发展20年

    转自:http://cs2.swfc.edu.cn/~zyl/ 赵毅力的视觉研究博客 从特征描述符到深度学习:计算机视觉发展20年 Author: Tomasz Malisiewicz 翻译:赵毅力( ...

  7. 线特征作为视觉描述:用于视觉定位的上下文感知线特征描述符

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨泡泡机器人SLAM 标题: Line as a Visual Sen ...

  8. BEBLID:增强的高效局部图像特征描述符

    (本文转载自:当SLAM遇见小王同学) 在前不久发布的OpenCV4.5中更新了很多新特性: 从4.5版本开始,OpenCV将正式使用Apache2协议,从而避免专利算法带来的潜在纠纷 SIFT专利到 ...

  9. SIFT四部曲之——高斯滤波

    版权声明:本文为博主原创文章,未经博主允许不得转载.博客不用于商业活动,博主对博客的使用,拥有最终解释权  本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权  欢 ...

最新文章

  1. 58前端内推笔试2017(含答案)
  2. Callable和Future
  3. OSI七层模型与TCP/IP四层模型
  4. 《FPGA入门教程》看书随笔——数字电路设计入门
  5. React开发(246):react项目理解 this打印
  6. IP通信基础 4月28号
  7. Linux驱动程序中的并发控制
  8. eclipse对mysql进行增删改查_用eclipse编写的 能对MySQL数据库中表实现增删改查功能...
  9. 设置和获取函数体现的软件工程
  10. python mysql_Python-操作 MySQL
  11. 2021财经直播系统 H5网页直播 大区直播间源码
  12. 孙策被刺杀,凶手是孔雀东南飞里的焦仲卿,主谋是曹操谋士郭嘉
  13. python卖水果_用Python解决一个简单的水果分类问题
  14. 向大家推荐一本学统计学的书
  15. 多邻国学英语 tips
  16. linux gnu升级,GNU/Linux 让Ubuntu 系统版本升级
  17. 计算机前沿软件应用课程怎么样,信息技术前沿心得体会|信息技术应用心得体会...
  18. 未来的计算机儿童画,儿童画未来的科学幻想绘画优秀作品
  19. phpstorm使用小技巧一
  20. Ambari2.7.4 + HDP3.1.4 离线安装(2)

热门文章

  1. LINUX性能调优方法总结
  2. 调试你的Python代码
  3. 【技术贴】解决 myeclipse打不开报错an error has occurred, see .
  4. ASP用DSN连接数sql数据库
  5. PHP创建图像的应用!!!!
  6. HD 1213 How Many Tables(裸 并查集)
  7. 1951: [Sdoi2010]古代猪文
  8. NYOJ 905 卡片游戏
  9. Golang中调用“方法”的简单理解
  10. sqli-labs(十三)(hpp)