我正致力于计算图像数据集的某些功能并保存这些功能供以后使用。以下是代码:
tic
l = 9907 % size of image data set
% pre-allocating space for variables in the for loop
Icolor = cell(1,l);
Iwave = cell(1,l);
IglrlFeatures = cell(1,l);
for i = 1:l % l = size of image data set = 9907
IDB{1,i} = imread(strcat(path,strcat(num2str(i),'.jpg')));
Icolor{1,i} = colorMoments(IDB{1,i}); % 6-features in each cell
Iwave{1,i} = waveletTransform(IDB{1,i}); % 8-features in each cell
IglrlFeatures{1,i} = textureFeatures(IDB{1,i}); % 44-features in each cell
ICW{1,i} = [Icolor{1,i} Iwave{1,i} IglrlFeatures{1,i}];
end
toc
此处单个图像上每个功能的计算时间为:
colorMoments(single_image)=经过的时间是0.009689秒。
waveletTransform(single_image)=经过的时间是0.018069秒。
textureFeatures(single_image)=经过的时间是0.022902秒。
l =数据集大小= 9907张图片
不同数据集大小的计算时间(l):
l = 10;经过的时间是0.402629秒。
l = 100;经过的时间是2.233971秒。
l = 1000;经过的时间是21.178395秒。
l = 2000;经过的时间是44.510071秒。
l = 5000;经过的时间是111.393866秒。
l = 9907;经过的时间是238.924998秒。约(约4分钟)
我想减少这个计算时间,有什么建议吗?
谢谢,
戈皮
答案 0 :(得分:0)
测量的时间似乎表示O(n)阶的计算复杂度。我怀疑这种类型的问题可以进一步减少订单。因此,我认为,充其量只能希望性能线性增长。
您应该关注的一件事是代码是否使用多个处理器核心。如果没有,请尝试重新构建for
- 循环,以便能够使用parfor
。