0

私は、画像内に重なっているブロックのHu-momentsを見つける必要のあるアルゴリズム(MATLAB内)で作業しています。私は列マトリックス(im2col(...、 'sliding'))の画像をに変換してから、各列のHu-Momentsを個別に計算しています。 512X512のブロックのHuモーメントを計算すると、私のシステムは14-15分かかります。下記のようなコードは次のとおりです。イメージの重複ブロックのHuモーメントを見つける際のパフォーマンス上の問題

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の分散瞬間を返す私自身作られた機能です。

私のsys構成は6GB RAMのI3プロセッサです。

  1. このコードの性能を上げるために提案してください。
  2. は、重複するブロックのための7つのHuモーメントを計算することができるmatlabの関数です。

答えて

0

1.preallocateのMNとVRループの前に、彼らは虚数単位の同義語ですと、私は強く、変数名としてiおよびjを使用していないお勧め

% 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 

のようなもの。古いMATLABでは、それはあなたが十分なメモリを持っているし、forループのプロセスは独立したデータチャンクは、あなたがそれになりたい

3.Ifはコードが同じ速さではありませんarrayfun /のparforまたは関数cellfun使用2.Ifはエラー

を引き起こす可能性がありますパフォーマンスボトルネックを見つけるには profilerを使用してください。

関連する問題