ImageJ(Java)中一个图中的向量

时间:2016-04-27 14:41:12

标签: java arrays plot imagej

我在ImageJ中写了一个插件,我需要一些想法。 我有一个插件,可以为堆栈中的每个图像生成绘图。因此,如果我在堆栈中有4个图像,它将从向量生成4个图。 但我需要成为一个有4条曲线的情节。请帮我。 `

这是代码。

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 个答案:

答案 0 :(得分:1)

ij.gui.Plot classaddPoints方法,可让您将多个数据系列添加到绘图中。下面的Groovy脚本说明了它的用法。只需将代码粘贴到ImageJ&#39; script editor中,然后选择语言&gt; Groovy 并按运行进行尝试。

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 API的使用有任何疑问,可以在ImageJ forum上获得更好的帮助。