[VLFeat]Fisher vector提取matlab代码

fisher vector学习笔记:http://blog.csdn.net/happyer88/article/details/46576379
fisher vector改进:http://blog.csdn.net/happyer88/article/details/46625639

使用vlfeat提取fisher vector的matlab 代码

% 读入图片
I = vl_impattern('roofs1') ;
I = single(vl_imdown(rgb2gray(I))) ;

% 设置bin大小
binSize = 8 ;
% sparse sift中bin大小是根据该层的高斯平滑的尺度sigma计算来的
% dense sift这里是设定binSize,反推sigma
magnif = 3 ;
% 对图像做高斯平滑
Is = vl_imsmooth(I, sqrt((binSize/magnif)^2 - .25)) ;

% f中每一列保留每个sift点位置,d中每一列保留每个sift的128维特征向量
[f, d] = vl_dsift(Is, 'size', binSize) ;

siftData = double(d);

% GMM
% GMM中的component个数
numClusters = 20 ;
% means是GMM的均值,大小128*20
% covariances是协方差,大小128*20
% priors是每个component的权重,大小20*1
[means, covariances, priors] = vl_gmm(siftData, numClusters);

% fisher vector
% 这里得到的fisher vector大小是(2*128*20=5120)*1, 其中没有包含对权重的梯度
encoding = vl_fisher(siftData, means, covariances, priors);
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Fisher判别分析的 Matlab 代码可能会有所不同,具体实现取决于所使用的数据集和目标。但是,以下是一个简单的示例代码,可以帮助您了解 Fisher 判别分析的基本实现方式: ``` % 导入数据 data = load('data.mat'); X = data.X; % 特征矩阵 y = data.y; % 标签 % 计算类均值 mu1 = mean(X(y == 1,:)); % 类1均值 mu2 = mean(X(y == 2,:)); % 类2均值 % 计算类内散布矩阵 S1 = cov(X(y == 1,:)); % 类1散布矩阵 S2 = cov(X(y == 2,:)); % 类2散布矩阵 % 计算总散布矩阵 Sw = S1 + S2; % 计算 Fisher 线性判别系数 w = inv(Sw) * (mu1 - mu2)'; % 将数据投影到 Fisher 线性判别系数上 X_lda = X * w; % 将投影后的数据可视化 scatter(X_lda(y == 1), zeros(sum(y == 1), 1), 'r'); hold on; scatter(X_lda(y == 2), zeros(sum(y == 2), 1), 'b'); ``` 这段代码演示了如何导入数据,计算类均值,类内散布矩阵和总散布矩阵,计算 Fisher 线性判别系数,并将数据投影到 Fisher 线性判别系数上。最后将投影后的数据可视化。 请注意,这只是一个简单示例,您可能需要根我可以提供一个简单的 Fisher 判别分析 Matlab 代码示例: ``` % 输入数据 data1 = randn(50, 2); data2 = randn(50, 2) + repmat([3, 3], 50, 1); % 拼接数据 data = [data1; data2]; label = [ones(50, 1); ones(50, 1)*2]; % 计算每个类别的均值和协方差 mu1 = mean(data1); mu2 = mean(data2); sigma1 = cov(data1); sigma2 = cov(data2); % 计算类内散度矩阵和类间散度矩阵 within_class_scatter = sigma1 + sigma2; between_class_scatter = (mu1 - mu2)'*(mu1 - mu2); % 计算 Fisher 线性判别系数 [V, D] = eig(within_class_scatter\between_class_scatter); % 选择最大特征值对应的特征向量 [~, idx] = max(diag(D)); w = V(:, idx); % 绘制分类边界 x = linspace(min(data(:, 1)), max(data(:, 1)), 100); y = -w(1)/w(2)*x; figure scatter(data1(:, 1), data1(:, 2), 'r', 'o') hold on scatter(data2(:, 1), data2(:, 2), 'b', 'x') plot(x, y) xlabel('x1') ylabel('x2') legend('class 1', 'class 2') ``` 这是一个简单的线性分类示例。Fisher判别分析可以通过计算类内散度矩阵和类间散度矩阵来求出最佳线性判别系数,在这个示例中,我们使用了 eig 函数来计算线性判别系数。 请注意,这只是一个简单的示例,在实际应用中,需要根据很抱歉,我没有完整的Fisher判别分析的matlab代码。不过,我可以给您一些关于如何实现Fisher判别分析的指导: 1. 导入数据集并将其格式化为矩阵形式。 2. 计算数据的均值向量和协方差矩阵。 3. 使用类间协方差矩阵和类内协方差矩阵计算Fisher线性判别函数的系数。 4. 将训练数据投影到Fisher线性判别函数上。 5. 在新数据上进行预测,并将其与训练数据进行比较。 希望这些信息能帮到你,如果有任何问题请随时问。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值