0

値0,1,2,3だけで構成された1000の配列があるとしましょう。私がしたいことは、他の値の海で奇妙な値を取り除くことです。 0,0,0,0,0,1,0,0,0,0 - > 0,0,0,0,0,0,0,0,0,0。私はいつも0,1,2,3の値を返さなければならないので、単純な移動平均は実際には機能しません。したがって、0,3,0 - > 1を平均化することは間違っています。 私は仕事をしているように見えるこれを思いついたが、私はそれをより効率的かつきれいにする方法があるのだろうかと思っていた。 ImageJマクロ用です。固定された結果セットで効率的に配列を平滑化する

r = 7; //window length 
for(j=r; j<lengthOf(armsPosition)-r;j++){ 
    count0 = 0; count1 = 0; count2=0;count3 = 0; 
    for(m = j - r/2; m <= j + r/2; m++){ 
     if(armsPosition[m] == 0) 
      count0++; 
     else if(armsPosition[m] == 1) 
      count1++; 
     else if(armsPosition[m] == 2) 
      count2++; 
     else 
      count3++; 

    } 

    if(count0 >= count1 && count0 >= count2 && count0 >= count3) 
     armsPositionA[j]=0; 
    else if(count1 > count0 && count1 > count2 && count1 > count3) 
     armsPositionA[j]=1; 
    else if(count2 > count0 && count2 > count1 && count2 > count3) 
     armsPositionA[j]=2; 
    else 
     armsPositionA[j]=3; 
} 

おかげで、

答えて

0

あなたがImageJののマクロ言語に限定されず、サポートscripting languagesのいずれかを使用するためのオープンしていない場合、あなたは、Apacheコモンズ・数学からStatUtils.mode(double[] sample, int begin, int length)メソッドを使用することができます。助け

import org.apache.commons.math3.stat.StatUtils 

a = [1,3,4,21,3,2,21,21,21,21,21,21,4,3,5,2,2,1,1,1,1] 

println StatUtils.mode((double[])a, 0, 7) 

希望:

次のGroovyスクリプトはこのことを示しています。

+0

ありがとうございました。私はマクロ全体をスクリプトや完全なpledgeプラグインに変更することを考えていますが、それはかなりの学習時間を必要としますが、実際には瞬間がありません。 – hadroque

関連する問題