我正在研究一种算法(在MATLAB中),它需要在图像中找到重叠块的Hu矩。我在列矩阵(im2col(.,‘滑动’)中转换图像,然后计算每个列的Hu矩。为了计算512X512图像块的Hu矩,我的系统需要14到15分钟。代码如下:
d=im2col(A,[m n],'sliding');
[mm nn]=size(d);
for j=1:nn
d_temp=d(:,j);
d_pass_temp=col2im(d_temp,[n n], [n n], 'distinct');
[mn_t vr_t]=new_hu_moment(d_pass_temp);
[mn]=[mn mn_t];
[vr]=[vr vr_t];
end“new_hu_moment”是我自己制作的函数,返回每个块的hu矩的均值和方差。
我的系统配置是6GB内存的I3处理器。
发布于 2017-08-14 12:02:58
1.在循环前预先分配mn和vr,如下所示
% I suppose that new_hu_moment returns row of known length nvals
mn=zeros(nn,nvals);
vr=zeros(nn,nvals);
for k=1:nn,
...
[mn(k,:) vr(k,:)]=new_hu_moment(d_pass_temp);
...
end我强烈建议不要使用i和j作为变量名,因为它们是假想单位的同义词。在旧的MATLAB中,它会导致错误。
2.如果您有足够的内存,并且需要循环处理独立的数据块,请使用parfor或cellfun/arrayfun。
3.如果代码没有您想要的那么快,请使用轮廓仪查找性能瓶颈
https://stackoverflow.com/questions/45641154
复制相似问题