dense sift matlab,一个 Dense SIFT 算法的 matlab 实现 | 学步园
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 实现 | 学步园相关推荐
- matlab dfp法,DFP算法及Matlab程序.docx
DFP算法及Matlab程序 作业二 用DFP算法求解,取,.一.求解:求迭代点x1令,得的极小值点,所以得:于是,由DFP修正公式有下一个搜索方向为求迭代点x2令,得的极小值点于是得:,所以:,因H ...
- matlab hist函数_算法工匠MATLAB专训营:Matlab绘图,小试牛刀
作者 | 蔡老师 仿真秀专栏作者 首发 | 仿真秀平台 导读:正文之前,我在此详细说明一下,因为本文包含的程序太难得,网上肯定找不到这样的程序.随着讲课的越来越深入,我给出的程序会越来越实用,接近于实 ...
- 神经网络算法二matlab实现,模糊神经网络算法之MATLAB实现.doc
模糊神经网络算法之MATLAB实现.doc 用户名 密码 提 交登录 注册 矿业人生的空间主页博客相册|个人档案 |好友 |i 贴吧 查看文章 [转] 模糊神经网络算法之 MATLAB 实现2011- ...
- matlab dfp法,DFP算法及Matlab程序(最新整理)
<DFP算法及Matlab程序(最新整理)>由会员分享,可在线阅读,更多相关<DFP算法及Matlab程序(最新整理)(7页珍藏版)>请在人人文库网上搜索. 1.作 业 二用 ...
- matlab dfp法,DFP算法及Matlab程序Word版
<DFP算法及Matlab程序Word版>由会员分享,可在线阅读,更多相关<DFP算法及Matlab程序Word版(6页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版 ...
- mcra matlab,噪声估计的算法及matlab实现毕业设计
噪声估计的算法及matlab实现毕业设计 (53页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 I噪声估计的算法及MATLAB实现毕业设计 ...
- matlab粒子群优化算法工具箱,MATLAB粒子群优化算法(PSO)
MATLAB粒子群优化算法(PSO) 一.介绍 粒子群优化算法(Particle Swarm Optimization Algorithm)是一种群智能算法,为了寻求全局最优.群体迭代,粒子在解空间追 ...
- 图论算法及其matlab实现 程序,图论算法及其matlab程序代码.doc
图论算法及其matlab程序代码.doc 图论算法及其MATLAB程序代码求赋权图GV,E,F中任意两点间的最短路的WARSHALLFLOYD算法设AAIJNN为赋权图GV,E,F的矩阵,当VIVJ∈ ...
- ukf实测信号的预测 matlab,ukf(无迹卡尔曼滤波)算法的matlab程序.
ukf(无迹卡尔曼滤波)算法的matlab程序. function [x,P]=ukf(fstate,x,P,hmeas,z,Q,R) % UKF Unscented Kalman Filt ...
- pso算法matlab程序,基本PSO算法的matlab源程序
<基本PSO算法的matlab源程序>由会员分享,可在线阅读,更多相关<基本PSO算法的matlab源程序(2页珍藏版)>请在人人文库网上搜索. 1.主函数源程序( main. ...
最新文章
- go语言实现排序算法
- linux下获取某文件的总行数
- 0201-开始使用Spring Cloud实战微服务准备工作
- 箭头函数参数和返回值
- redis之(十一)redis实现缓存的功能
- c语言字符串输出瘕b,c语言课件10tt函数(1)幻灯片资料(51页)-原创力文档
- 塞班之死---放眼iOS的寒冬
- C++11 —— 基于区间(range)的 for 循环
- 数学实验4:Matlab作图实验
- 四元数与欧拉角(RPY角)的相互转换
- 趋势科技发文挑衅VB100 金山对此不以为然
- 布料仿真先导2-带阻尼的单个小球单摆下的拉格朗日方程列些和matlab仿真
- Android 模拟器横屏竖屏切换设置
- Python取多维数组第n维的前几位
- PHP 微信JSP支付
- linux基础教程课后答案,Linux教材课后习题答案.pdf
- Revit 中注释族的应用详解及公共族库工具
- oracle exp 导出字符集,oracle exp/imp 字符集
- Cadence Allegro如何添加叠层?
- 各CCFA类核心期刊的信息汇总与评价总结(科技领域)
热门文章
- mybatis多数据源配置_随笔:springboot+mybatis 配置双数据源
- Django:应用程序的两种架构:C/S架构,B/S架构,(TCP, URL)HTTP,HTTP request, HTTP response
- Django:Django简介,MTV,Django常用命令
- winform 读取用户控件的变量_winform中用户控件之间的传值
- Kotlin 接口(三)
- python3 threading是否被抛弃_Python3中的线程模块是否发生了变化?如果是,怎么办?...
- mvn 汇编_【答疑解惑】艺术生留学小白问题答疑汇编之精华
- oracle rollup 排序,Oracle教程之rollup用法
- sqoop建表_Sqoop学习之路 (一)
- [专栏精选]Unity中的Git最佳实践