徐海蛟:Matlab计算大规模图片数据集的L1距离

本文介绍了如何使用Matlab优化计算大规模图片数据集的L1距离,从最初的双重for循环到逐步向量化,利用arrayfun和bsxfun函数减少计算时间,最终将原本需要5小时的计算时间缩短到3小时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




比较两幅图片之间的距离或者相似性,我们常以Matlab pdist函数或者pdist2函数计算。计算大规模图片数据集的两两图片之间的距离,很自然想到双重for循环完成了。不过,这很慢:
function KMatrix = getL1( X, Y ) %L1距离
m = size(X,1);  n = size(Y,1);
KMatrix = zeros(m,n);
for i = 1: m %按行
for j = 1: n
KMatrix(i,j) = sum( abs( X(i,:)-Y(j,:)) );
end
fprintf('%d.',i); if mod(i,10)==0, fprintf('\n'); end
end
其中,X、Y分别是图片集X、Y的特征文件矩阵。


以L1距离为例,特征文件是4096维的RGB彩色描述子,两万幅图片之间的L1距离矩阵20000×20000,在 8CPU + 16GB内存的X64 Windows 7系统上计算,MATLAB 2012b运行时间5小时。比较慢。


向量化是一个考虑。不过,童鞋们,如何向量化呢?这个比起点积要复杂一点点。通过一行一行计算距离,去掉一个内循环:
function KMatrix = getL1( X, Y ) %L1距离 向量化
m = size(X,1);  n = size(Y,1);
nOnes = ones(1,n); KMatrix = zeros(m,n);
for i = 1: m %按行
    xi = X(i,:);  xi = xi( nOnes, : );
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值