Ce Liu, Jenny Yuen, Antonio Torralba,JosefSivic, andWilliam T. Freeman 版权所有。

修改的部分函数与变量的名字,使其好懂了一些。不过这个没有salient keypoint detection和rotation normalization,所以对尺度以及旋转这些affine transform没有移不变的性质。

function [ SIFTFeatureVector, locationX, locationY ] = DenseSIFT( image, nPatchSize, nGridSpacing )

image = double( image );

image = mean( image, 3 );

image = image / max( image( : ) );

% parameters

nAngleNums = 8;

nBinNums = 4;

nSampleNums = nBinNums * nBinNums;

alpha = 9; %% parameter for attenuation of angles (must be odd)

if nargin < 5

sigmaGuassian = 1;

end

angleStep = 2 * pi / nAngleNums;

angles = 0 : angleStep : 2 * pi;

angles( nAngleNums + 1 ) = [ ]; % bin centers

[ nRow nCol ] = size( image );

[ gaussianX, gaussianY ] = genDeltaGaussian( sigmaGuassian );

imageVerticalEdges = filter2( gaussianX, image, 'same' ); % vertical edges

imageHorizontalEdges = filter2( gaussianY, image, 'same' ); % horizontal edges

imageGradientMagnitude = sqrt( imageVerticalEdges.^2 + imageHorizontalEdges.^2 ); % gradient magnitude

imageTheta = atan2( imageHorizontalEdges, imageVerticalEdges );

imageTheta( isnan( imageTheta ) ) = 0; % replace illegal result with 0

% descriptor locations

locationX = nPatchSize / 2 : nGridSpacing : nCol - nPatchSize / 2 + 1;

locationY = nPatchSize / 2 : nGridSpacing : nRow - nPatchSize / 2 + 1;

% make orientation images

imageOrientation = zeros( [ nRow, nCol, nAngleNums ], 'single' );

% for each histogram angle

imageCos = cos( imageTheta );

imageSin = sin( imageTheta );

for index = 1 : nAngleNums

% compute each orientation channel

tmp = ( imageCos * cos( angles( index ) ) + imageSin * sin( angles( index ) ) ).^ alpha;

tmp = tmp .* ( tmp > 0 );

% weight by magnitude

imageOrientation( :, :, index ) = tmp .* imageGradientMagnitude;

end

% Convolution formulation:

nHalfPatchSize = nPatchSize / 2;

nHalfPatchSizeMinusDotFive = nHalfPatchSize - 0.5;

sampleResolution = nPatchSize / nBinNums;

weightX = abs( ( 1 : nPatchSize ) - nHalfPatchSizeMinusDotFive ) / sampleResolution;

weightX = ( 1 - weightX ) .* ( weightX <= 1 );

for index = 1 : nAngleNums

imageOrientation( :, :, index ) = conv2( weightX, weightX', imageOrientation( :, :, index ), 'same' );

end

% Sample SIFT bins at valid locations (without boundary artifacts)

% find coordinates of sample points (bin centers)

[ samplePosX, samplePosY ] = meshgrid( linspace( 1, nPatchSize + 1, nBinNums + 1 ) );

samplePosX = samplePosX( 1 : nBinNums, 1 : nBinNums ); samplePosX = samplePosX( : ) - nPatchSize / 2;

samplePosY = samplePosY( 1 : nBinNums, 1 : nBinNums ); samplePosY = samplePosY( : ) - nPatchSize / 2;

SIFTFeatureVector = zeros( [ length( locationY ) length( locationX ) nAngleNums * nSampleNums ] , 'single' );

nOffset = 0;

for n = 1 : nBinNums * nBinNums

SIFTFeatureVector( :, :, nOffset + 1 : nOffset + nAngleNums ) = imageOrientation( locationY + samplePosY(n), locationX + samplePosX(n), : );

nOffset = nOffset + nAngleNums;

end

clear imageOrientation

% Outputs:

[ locationX, locationY ] = meshgrid( locationX, locationY );

[ nrows, ncols, cols ] = size( SIFTFeatureVector );

% normalize SIFT descriptors

SIFTFeatureVector = reshape( SIFTFeatureVector, [nrows * ncols nAngleNums * nSampleNums ] );

SIFTFeatureVector = SIFTNormalization( SIFTFeatureVector );

SIFTFeatureVector = reshape( SIFTFeatureVector, [ nrows ncols nAngleNums * nSampleNums] );

function [ GX, GY ] = genDeltaGaussian( sigma )

% laplacian of size sigma

G = genGaussian(sigma);

[ GX, GY ] = gradient( G );

GX = GX * 2 ./ sum( sum( abs( GX ) ) );

GY = GY * 2 ./ sum( sum( abs( GY ) ) );

function G = genGaussian( sigma )

if all( size( sigma ) == [ 1, 1 ] )

% isotropic gaussian

filterWindow = 4 * ceil( sigma ) + 1;

G = fspecial( 'gaussian', filterWindow, sigma );

else

% anisotropic gaussian

filterWindowX = 2 * ceil( sigma( 1 ) ) + 1;

filterWindowY = 2 * ceil( sigma( 2 ) ) + 1;

GaussianX = normpdf( -filterWindowX: filterWindowX, 0, sigma( 1 ) );

GaussianY = normpdf( -filterWindowY: filterWindowY, 0, sigma( 2 ) );

G = GaussianY' * GaussianX;

end

function SIFTFeatureVector = SIFTNormalization( SIFTFeatureVector )

% normalize SIFT descriptors (after Lowe)

% find indices of descriptors to be normalized (those whose norm is larger than 1)

tmp = sqrt( sum( SIFTFeatureVector.^2, 2 ) );

normalizeIndex = find( tmp > 1 );

SiftFeatureVectorNormed = SIFTFeatureVector( normalizeIndex, : );

SiftFeatureVectorNormed = SiftFeatureVectorNormed ./ repmat( tmp( normalizeIndex, : ), [ 1 size( SIFTFeatureVector, 2 ) ] );

% suppress large gradients

SiftFeatureVectorNormed( SiftFeatureVectorNormed > 0.2 ) = 0.2;

% finally, renormalize to unit length

tmp = sqrt( sum( SiftFeatureVectorNormed.^2, 2 ) );

SiftFeatureVectorNormed = SiftFeatureVectorNormed ./ repmat( tmp, [ 1 size( SIFTFeatureVector, 2 ) ] );

SIFTFeatureVector( normalizeIndex, : ) = SiftFeatureVectorNormed;

dense sift matlab,一个 Dense SIFT 算法的 matlab 实现 | 学步园相关推荐

  1. matlab dfp法,DFP算法及Matlab程序.docx

    DFP算法及Matlab程序 作业二 用DFP算法求解,取,.一.求解:求迭代点x1令,得的极小值点,所以得:于是,由DFP修正公式有下一个搜索方向为求迭代点x2令,得的极小值点于是得:,所以:,因H ...

  2. matlab hist函数_算法工匠MATLAB专训营:Matlab绘图,小试牛刀

    作者 | 蔡老师 仿真秀专栏作者 首发 | 仿真秀平台 导读:正文之前,我在此详细说明一下,因为本文包含的程序太难得,网上肯定找不到这样的程序.随着讲课的越来越深入,我给出的程序会越来越实用,接近于实 ...

  3. 神经网络算法二matlab实现,模糊神经网络算法之MATLAB实现.doc

    模糊神经网络算法之MATLAB实现.doc 用户名 密码 提 交登录 注册 矿业人生的空间主页博客相册|个人档案 |好友 |i 贴吧 查看文章 [转] 模糊神经网络算法之 MATLAB 实现2011- ...

  4. matlab dfp法,DFP算法及Matlab程序(最新整理)

    <DFP算法及Matlab程序(最新整理)>由会员分享,可在线阅读,更多相关<DFP算法及Matlab程序(最新整理)(7页珍藏版)>请在人人文库网上搜索. 1.作 业 二用 ...

  5. matlab dfp法,DFP算法及Matlab程序Word版

    <DFP算法及Matlab程序Word版>由会员分享,可在线阅读,更多相关<DFP算法及Matlab程序Word版(6页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版 ...

  6. mcra matlab,噪声估计的算法及matlab实现毕业设计

    噪声估计的算法及matlab实现毕业设计 (53页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 I噪声估计的算法及MATLAB实现毕业设计 ...

  7. matlab粒子群优化算法工具箱,MATLAB粒子群优化算法(PSO)

    MATLAB粒子群优化算法(PSO) 一.介绍 粒子群优化算法(Particle Swarm Optimization Algorithm)是一种群智能算法,为了寻求全局最优.群体迭代,粒子在解空间追 ...

  8. 图论算法及其matlab实现 程序,图论算法及其matlab程序代码.doc

    图论算法及其matlab程序代码.doc 图论算法及其MATLAB程序代码求赋权图GV,E,F中任意两点间的最短路的WARSHALLFLOYD算法设AAIJNN为赋权图GV,E,F的矩阵,当VIVJ∈ ...

  9. ukf实测信号的预测 matlab,ukf(无迹卡尔曼滤波)算法的matlab程序.

     ukf(无迹卡尔曼滤波)算法的matlab程序. function [x,P]=ukf(fstate,x,P,hmeas,z,Q,R) % UKF   Unscented Kalman Filt ...

  10. pso算法matlab程序,基本PSO算法的matlab源程序

    <基本PSO算法的matlab源程序>由会员分享,可在线阅读,更多相关<基本PSO算法的matlab源程序(2页珍藏版)>请在人人文库网上搜索. 1.主函数源程序( main. ...

最新文章

  1. go语言实现排序算法
  2. linux下获取某文件的总行数
  3. 0201-开始使用Spring Cloud实战微服务准备工作
  4. 箭头函数参数和返回值
  5. redis之(十一)redis实现缓存的功能
  6. c语言字符串输出瘕b,c语言课件10tt函数(1)幻灯片资料(51页)-原创力文档
  7. 塞班之死---放眼iOS的寒冬
  8. C++11 —— 基于区间(range)的 for 循环
  9. 数学实验4:Matlab作图实验
  10. 四元数与欧拉角(RPY角)的相互转换
  11. 趋势科技发文挑衅VB100 金山对此不以为然
  12. 布料仿真先导2-带阻尼的单个小球单摆下的拉格朗日方程列些和matlab仿真
  13. Android 模拟器横屏竖屏切换设置
  14. Python取多维数组第n维的前几位
  15. PHP 微信JSP支付
  16. linux基础教程课后答案,Linux教材课后习题答案.pdf
  17. Revit 中注释族的应用详解及公共族库工具
  18. oracle exp 导出字符集,oracle exp/imp 字符集
  19. Cadence Allegro如何添加叠层?
  20. 各CCFA类核心期刊的信息汇总与评价总结(科技领域)

热门文章

  1. mybatis多数据源配置_随笔:springboot+mybatis 配置双数据源
  2. Django:应用程序的两种架构:C/S架构,B/S架构,(TCP, URL)HTTP,HTTP request, HTTP response
  3. Django:Django简介,MTV,Django常用命令
  4. winform 读取用户控件的变量_winform中用户控件之间的传值
  5. Kotlin 接口(三)
  6. python3 threading是否被抛弃_Python3中的线程模块是否发生了变化?如果是,怎么办?...
  7. mvn 汇编_【答疑解惑】艺术生留学小白问题答疑汇编之精华
  8. oracle rollup 排序,Oracle教程之rollup用法
  9. sqoop建表_Sqoop学习之路 (一)
  10. [专栏精选]Unity中的Git最佳实践