2016-04-27 19 views
0

ImageJにプラグインを書きますが、何か考えが必要です。 私は、スタック内のすべてのイメージのプロットを生成するプラグインを持っています。だから私はスタックに4画像を持っている場合、ベクトルから4プロットを生成します。 しかし、私は4つの曲線で1つのプロットにする必要があります。私を助けてください。 `ImageJ(Java)の1つのプロット内のベクトル

これはコードです。

public void run(String arg){  
     openImage(); 
     if (cancel==false){ 
      options();  
     } 
     if (cancel==false){ 
      for (int k=0;k<imp.getStackSize();k++){ 
       imp.setSlice(k+1); 
       generateESFArray("ESF Plot",imp,roi); 
       generateLSFArray("LSF Plot",ESFArray); 
       calculateMax(); 

       ESFArrayF=alignArray(ESFArray); 

       if (cancel==false){ 
        LSFArrayF=alignArray(LSFArray); 

       } 
       if (cancel==false){ 
        ESFVector=averageVector(ESFArrayF); 
       } 

       if (cancel==false){ 
        LSFVector=averageVector(LSFArrayF); 
        int aura = (LSFVector.length * 2); 
        LSFDVector = new double [aura]; 
        int j = 0; 
        int aura2 = (LSFVector.length); 

        for(i=0;i<(LSFDVector.length-3); i++){ 

         if(i % 2 == 0) { 
          LSFDVector[i]= LSFVector[j]; 
          j=j+1; 
         }else { 
          LSFDVector[i]= ((0.375*LSFVector[(j-1)]) + (0.75*LSFVector[(j)]) - (0.125*LSFVector[(j+1)])); 

         } 

        } 

          LSFDVector[i] = ((LSFVector[j-1] + LSFVector[j])*0.5); 
          LSFDVector[i+1] = LSFVector[j]; 
          LSFDVector[i+2] = LSFVector[j]; 


           int indexMax = 0; 
           double valorMax = LSFDVector[0]; 
           for(int i=0;i<LSFDVector.length;i++){ 
            if(valorMax < LSFDVector[i]){ 
             indexMax = i; 
             valorMax = LSFDVector[i]; 
            } 
           } 

             i=indexMax; 
             LSFDVector[i-1]=((LSFDVector[i-2] + LSFDVector[i])*0.5); 

             MTFVector=fftConversion(LSFDVector, "MTF"); 


             Max=obtenerMax(); 
             SPPVector=fftConversion(Max,"SPP"); 
             LSFArrayF=alignArray(LSFArray); 


     if (MTFButton.isSelected()){ 
              generatePlot (MTFVector,"MTF"); 
... 
    }  

void generatePlot(double[] Vector, String plot){ 

     double[]xValues; 
     String ejeX="pixel"; 
     String ejeY=""; 
     String allTitle=""; 
     ImageProcessor imgProc; 

     xValues=calculateXValues(Vector,plot); 

     //plot titles  
     if (plot=="ESF"){ 
      ejeY="Grey Value"; 
     ... 

     allTitle=plot + "_" + title;   
     plotResult = new Plot(allTitle, ejeX, ejeY, xValues, Vector); 

     //plot limits 
     if (plot=="ESF"){ 
      plotResult.setLimits(1,Vector.length,0,yMax); 
     } 

     plotResult.draw(); 
     plotResult.show(); 

    } 
     ` 

答えて

1

ij.gui.Plot classあなたはプロットに複数のデータ系列を追加することができaddPoints方法があります。以下のスクリプトGroovyの使用方法を示します。 ImageJのscript editorにコードを貼り付け、言語> Groovyを選択し、を入力してください。を実行してみてください。 ImageJ APIの使用に関するあらゆるご質問については

import ij.gui.Plot 

plot = new Plot("Multiple Line Plot", "x values", "y values", (double[])[0,1,2,3,4], (double[])[0.1,0.3,0.5,0.6,0.7]) 
plot.addPoints((double[])[0,1,2,3,4], (double[])[0.2,0.15,0.1,0.05,0.05], Plot.LINE) 
plot.setLimits(0, 4, 0, 1) 
plot.draw() 
plot.show() 

、あなたはImageJ forumに、より良い支援を得る可能性があります。

+0

ありがとう! googのアイデアだった! – Ludanyi

+0

私は空のdouble [] []にforループを使ってjavaのいくつかのベクトル(double [])を追加したいと思います。私は2Dベクトルが必要ですが、私はdouble []値を持っています。 メソッドを追加するとできますか? 私を助けることができますか? – Ludanyi

+0

適切なサイズのdouble [] []ベクタを事前に割り当てることができ、その要素を埋めるか、単純に 'ArrayList <>'とその 'append'メソッドを使用することができます。 –

関連する問題