Beispiel #1
0
 byte[] getJar(String address) {
   // System.out.println("getJar: "+address);
   byte[] data;
   try {
     URL url = new URL(address);
     IJ.showStatus("Connecting to " + IJ.URL);
     URLConnection uc = url.openConnection();
     int len = uc.getContentLength();
     if (IJ.debugMode) IJ.log("Updater (url): " + address + " " + len);
     if (len <= 0) return null;
     String name = address.contains("wsr") ? "daily build (" : "ij.jar (";
     IJ.showStatus("Downloading " + name + IJ.d2s((double) len / 1048576, 1) + "MB)");
     InputStream in = uc.getInputStream();
     data = new byte[len];
     int n = 0;
     while (n < len) {
       int count = in.read(data, n, len - n);
       if (count < 0) throw new EOFException();
       n += count;
       IJ.showProgress(n, len);
     }
     in.close();
   } catch (IOException e) {
     if (IJ.debugMode) IJ.log("" + e);
     return null;
   }
   if (IJ.debugMode) IJ.wait(6000);
   return data;
 }
  public void run(ImageProcessor ip) {

    dimz = stack.getSize();
    dimy = stack.getWidth();
    dimx = stack.getHeight();

    SaveDialog sd = new SaveDialog("Save Measurements as Text...", "res", ".dat");
    String name = sd.getFileName();
    if (name == null) return;

    String directory = sd.getDirectory();

    nb = calculnb(stack); // -1;
    IJ.showStatus("Measure parameters for the " + nb + " objects ...");
    if (nb < 1) {
      IJ.showMessage("volume must be labeled");
    } else {
      double[] volume_m = new double[nb];
      int[] volume_p = new int[nb];
      double[] surface = new double[nb];
      double[] surfacenb = new double[nb];
      double[][][] I = new double[3][3][nb];
      double[][] J = new double[3][nb];
      double[][][] dir = new double[3][3][nb];
      double[] xg = new double[nb];
      double[] yg = new double[nb];
      double[] zg = new double[nb];
      byte[] bord = new byte[nb];
      //       		double[] a = new double[nb];
      //       		double[] b = new double[nb];
      //       		double[] c = new double[nb];
      //       		double[] Fab = new double[nb];
      //       		double[] Fac = new double[nb];
      //       		double[] Fbc = new double[nb];
      //       		double[] sp = new double[nb];
      double[][] lmin = new double[nb][3];
      double[][] lmax = new double[nb][3];
      IJ.showStatus("Measure surfaces ...");
      calculmarchsurfstack(stack, nb, surface, volume_m);
      calculmarchsurfstacknb(stack, nb, surfacenb);
      // calculvolumestack(stack,nb,volume_p);
      IJ.showStatus("Measure volumes and inertia ...");
      calculcgstack(stack, nb, volume_p, xg, yg, zg);
      calculinertiestack(stack, nb, xg, yg, zg, I);
      inertie(nb, I, J, dir);
      IJ.showStatus("Measure bounding boxes ...");
      boitestack(stack, nb, xg, yg, zg, dir, lmin, lmax);
      borderstack(stack, nb, bord);
      IJ.showStatus("Save results ...");
      sauvegarde(
          volume_p, volume_m, surface, surfacenb, xg, yg, zg, J, dir, nb, bord, lmin, lmax,
          directory, name);
      volume_m = null;
      volume_p = null;
      surface = null;
      xg = null;
      yg = null;
      zg = null;
    }
  }
Beispiel #3
0
 public void dragOver(DropTargetDragEvent e) {
   if (IJ.debugMode) IJ.log("DragOver: " + e.getLocation());
   Point loc = e.getLocation();
   int buttonSize = Toolbar.getButtonSize();
   int width = IJ.getInstance().getSize().width;
   openAsVirtualStack = width - loc.x <= buttonSize;
   if (openAsVirtualStack) IJ.showStatus("<<Open as Virtual Stack>>");
   else IJ.showStatus("<<Drag and Drop>>");
 }
Beispiel #4
0
 void loadParticleResults(String filename, ResultsTable res) {
   try {
     String line;
     FileReader fr = new FileReader(filename);
     BufferedReader br = new BufferedReader(fr);
     java.lang.String header =
         " 	Intensity	X (px)	Y (px)	X (nm)	Y (nm)	Z (nm)	Left-Width(px)	Right-Width (px)	Up-Height (px)	Down-Height (px)	X Symmetry (%)	Y Symmetry (%)	Width minus Height (px)	Frame Number";
     java.lang.String firstline = br.readLine();
     if (!firstline.contains("X (px)	Y (px)	X (nm)	Y (nm)	Z (nm)")) {
       IJ.error("File does not seam to be a Particles Table file");
       IJ.log("Found header: " + firstline);
       IJ.log("Expecting: " + header);
       return;
     }
     res.reset();
     int counter = 1;
     java.util.concurrent.locks.Lock lock = new java.util.concurrent.locks.ReentrantLock();
     ThreadedLoader tloader = new ThreadedLoader();
     // java.lang.String txt = fr.read();
     while ((line = br.readLine()) != null) {
       tloader = new ThreadedLoader();
       tloader.mysetup(res, lock, line);
       tloader.start();
       IJ.showStatus("Loading particle " + counter + "... sit back and relax.");
       counter++;
     }
     try {
       tloader.join();
     } catch (Exception e) {
       IJ.error("" + e);
     }
     if (res.getCounter() < 5000000) {
       IJ.showStatus("Creating particle table, this should take a few seconds...");
       res.show("Results");
     } else
       IJ.showMessage(
           "Warning",
           "Results table has too many particles, they will not be shown but the data still exists within it\nyou can still use all the plugin functionality or save table changes though the 'Save Particle Table' command.");
     fr.close();
     IJ.showStatus("Done loading table...");
   } catch (FileNotFoundException e) {
     IJ.error("File not found exception" + e);
     return;
   } catch (IOException e) {
     IJ.error("IOException exception" + e);
     return;
   } catch (NumberFormatException e) {
     IJ.error("Number format exception" + e);
     return;
   }
 }
Beispiel #5
0
  private ImagePlus findSurfaceVoxels(final ImagePlus imp) {
    final int w = imp.getWidth();
    final int h = imp.getHeight();
    final int d = imp.getImageStackSize();
    final ImageStack stack = imp.getImageStack();
    final ImageStack surfaceStack = new ImageStack(w, h, d);

    for (int z = 0; z < d; z++) {
      IJ.showStatus("Finding surface voxels");
      final byte[] pixels = (byte[]) stack.getPixels(z + 1);
      surfaceStack.setPixels(pixels.clone(), z + 1);
      final ImageProcessor surfaceIP = surfaceStack.getProcessor(z + 1);
      for (int y = 0; y < h; y++) {
        checkNeighbours:
        for (int x = 0; x < w; x++) {
          if (getPixel(stack, x, y, z, w, h, d) == (byte) 0) continue;
          for (int nz = -1; nz < 2; nz++) {
            final int znz = z + nz;
            for (int ny = -1; ny < 2; ny++) {
              final int yny = y + ny;
              for (int nx = -1; nx < 2; nx++) {
                final int xnx = x + nx;
                final byte pixel = getPixel(stack, xnx, yny, znz, w, h, d);
                if (pixel == (byte) 0) continue checkNeighbours;
              }
            }
          }
          // we checked all the neighbours for a 0
          // but didn't find one, so this is not a surface voxel
          surfaceIP.set(x, y, (byte) 1);
        }
      }
    }
    // turn all the 1's into 0's
    final int wh = w * h;
    for (int z = 0; z < d; z++) {
      IJ.showStatus("Finding surface voxels");
      final ImageProcessor ip = surfaceStack.getProcessor(z + 1);
      for (int i = 0; i < wh; i++) {
        if (ip.get(i) == (byte) 1) ip.set(i, (byte) 0);
      }
    }

    final ImagePlus surfaceImp = new ImagePlus("Surface");
    surfaceImp.setStack(surfaceStack);
    surfaceImp.setCalibration(imp.getCalibration());
    return surfaceImp;
  }
Beispiel #6
0
 void loadTransformation(String filename, ResultsTable res) {
   try {
     String line;
     FileReader fr = new FileReader(filename);
     BufferedReader br = new BufferedReader(fr);
     if (!br.readLine().equals(" 	Z-Step	Raw Width minus Heigh	Calibration Width minus Height")) {
       IJ.error("File does not seam to be an Astigmatism calibration file");
       return;
     }
     // java.lang.String [] elements = new java.lang.String [3];
     java.lang.String[] elements;
     int counter = 1;
     res.reset();
     while ((line = br.readLine()) != null) {
       IJ.showStatus("Loading element " + counter + "... sit back and relax.");
       counter++;
       line.trim();
       elements = line.split("\t");
       res.incrementCounter();
       res.addValue("Z-Step", Double.parseDouble(elements[1]));
       res.addValue("Raw Width minus Heigh", Double.parseDouble(elements[2]));
       res.addValue("Calibration Width minus Height", Double.parseDouble(elements[3]));
     }
     fr.close();
   } catch (FileNotFoundException e) {
     IJ.error("File not found exception" + e);
     return;
   } catch (IOException e) {
     IJ.error("IOException exception" + e);
     return;
   } catch (NumberFormatException e) {
     IJ.error("Number format exception" + e);
     return;
   }
 }
Beispiel #7
0
 /** Overrides ImagePlus.show(). * */
 public void show() {
   if (img == null && ip != null) img = ip.createImage();
   ImageWindow.centerNextImage();
   win = new ImageWindow(this, new ColorCanvas(this));
   draw();
   IJ.showStatus("");
 }
        public void actionPerformed(ActionEvent e) {

          if ((e.getSource() instanceof JMenuItem)) {
            JMenuItem item = (JMenuItem) e.getSource();
            int lineNumber = Math.round(item.getAlignmentX() * 1000000);
            TextArea ta = OJ.editor.getTextArea();
            String txt = ta.getText();
            int lines = 0;
            int selBegin = 0;
            int selEnd = 0;
            for (int charPos = 0; charPos < txt.length(); charPos++) {
              if (txt.charAt(charPos) == '\n') {
                lines++;
                if (lines == (lineNumber + 1)) {
                  selEnd = charPos;
                  break;
                }
                selBegin = charPos;
              }
            }
            ij.IJ.showStatus("" + lineNumber);
            ta.select(selBegin + 1, selEnd + 1);
            IJ.wait(500);
            ta.setCaretPosition(selBegin + 1);
            ta.setVisible(true);
            ta.requestFocus();
            OJ.editor.setIsMacroWindow(true);
          }
        }
 /**
  * Splits the specified RGB stack into three 8-bit grayscale stacks. Deletes the source stack if
  * keepSource is false.
  */
 public static ImageStack[] splitRGB(ImageStack rgb, boolean keepSource) {
   int w = rgb.getWidth();
   int h = rgb.getHeight();
   ImageStack[] channels = new ImageStack[3];
   for (int i = 0; i < 3; i++) channels[i] = new ImageStack(w, h);
   byte[] r, g, b;
   ColorProcessor cp;
   int slice = 1;
   int inc = keepSource ? 1 : 0;
   int n = rgb.getSize();
   for (int i = 1; i <= n; i++) {
     IJ.showStatus(i + "/" + n);
     r = new byte[w * h];
     g = new byte[w * h];
     b = new byte[w * h];
     cp = (ColorProcessor) rgb.getProcessor(slice);
     slice += inc;
     cp.getRGB(r, g, b);
     if (!keepSource) rgb.deleteSlice(1);
     channels[0].addSlice(null, r);
     channels[1].addSlice(null, g);
     channels[2].addSlice(null, b);
     IJ.showProgress((double) i / n);
   }
   return channels;
 }
    public synchronized void adjustmentValueChanged(AdjustmentEvent e) {

      if (!checkImage()) {
        IJ.beep();
        IJ.showStatus("No Image");
        return;
      }

      if (e.getSource() == minSlider) {
        adjustMinHue((int) minSlider.getValue());
      } else if (e.getSource() == maxSlider) {
        adjustMaxHue((int) maxSlider.getValue());
      } else if (e.getSource() == minSlider2) {
        adjustMinSat((int) minSlider2.getValue());
      } else if (e.getSource() == maxSlider2) {
        adjustMaxSat((int) maxSlider2.getValue());
      } else if (e.getSource() == minSlider3) {
        adjustMinBri((int) minSlider3.getValue());
      } else if (e.getSource() == maxSlider3) {
        adjustMaxBri((int) maxSlider3.getValue());
      }
      originalB.setEnabled(true);
      updateLabels();
      updatePlot();
      notify();
    }
 public void mouseMoved(MouseEvent e) {
   // if (ij==null) return;
   int sx = e.getX();
   int sy = e.getY();
   int ox = offScreenX(sx);
   int oy = offScreenY(sy);
   flags = e.getModifiers();
   setCursor(sx, sy, ox, oy);
   IJ.setInputEvent(e);
   Roi roi = imp.getRoi();
   if (roi != null
       && (roi.getType() == Roi.POLYGON
           || roi.getType() == Roi.POLYLINE
           || roi.getType() == Roi.ANGLE)
       && roi.getState() == roi.CONSTRUCTING) {
     PolygonRoi pRoi = (PolygonRoi) roi;
     pRoi.handleMouseMove(ox, oy);
   } else {
     if (ox < imageWidth && oy < imageHeight) {
       ImageWindow win = imp.getWindow();
       // Cursor must move at least 12 pixels before text
       // displayed using IJ.showStatus() is overwritten.
       if ((sx - sx2) * (sx - sx2) + (sy - sy2) * (sy - sy2) > 144) showCursorStatus = true;
       if (win != null && showCursorStatus) win.mouseMoved(ox, oy);
     } else IJ.showStatus("");
   }
 }
 public void mouseExited(MouseEvent e) {
   // autoScroll(e);
   ImageWindow win = imp.getWindow();
   if (win != null) setCursor(defaultCursor);
   IJ.showStatus("");
   mouseExited = true;
 }
Beispiel #13
0
 /** Converts the specified RGB image to 8-bits if the 3 channels are identical. */
 public static void convertGrayJpegTo8Bits(ImagePlus imp) {
   ImageProcessor ip = imp.getProcessor();
   if (ip.getBitDepth() == 24 && ip.isGrayscale()) {
     IJ.showStatus("Converting to 8-bit grayscale");
     new ImageConverter(imp).convertToGray8();
   }
 }
Beispiel #14
0
 void createEllipse(ImagePlus imp) {
   IJ.showStatus("Fitting ellipse");
   Roi roi = imp.getRoi();
   if (roi == null) {
     noRoi("Fit Ellipse");
     return;
   }
   if (roi.isLine()) {
     IJ.error("Fit Ellipse", "\"Fit Ellipse\" does not work with line selections");
     return;
   }
   ImageProcessor ip = imp.getProcessor();
   ip.setRoi(roi);
   int options = Measurements.CENTROID + Measurements.ELLIPSE;
   ImageStatistics stats = ImageStatistics.getStatistics(ip, options, null);
   double dx = stats.major * Math.cos(stats.angle / 180.0 * Math.PI) / 2.0;
   double dy = -stats.major * Math.sin(stats.angle / 180.0 * Math.PI) / 2.0;
   double x1 = stats.xCentroid - dx;
   double x2 = stats.xCentroid + dx;
   double y1 = stats.yCentroid - dy;
   double y2 = stats.yCentroid + dy;
   double aspectRatio = stats.minor / stats.major;
   imp.killRoi();
   imp.setRoi(new EllipseRoi(x1, y1, x2, y2, aspectRatio));
 }
  /** Called from io/Opener.java. */
  public void run(String path) {
    if (path.equals("")) return;
    File theFile = new File(path);
    String directory = theFile.getParent();
    String fileName = theFile.getName();
    if (directory == null) directory = "";

    // Try and recognise file type and load the file if recognised
    ImagePlus imp = openImage(directory, fileName, path);
    if (imp == null) {
      IJ.showStatus("");
      return; // failed to load file or plugin has opened and displayed it
    }
    ImageStack stack = imp.getStack();
    // get the title from the stack (falling back to the fileName)
    String title = imp.getTitle().equals("") ? fileName : imp.getTitle();
    // set the stack of this HandleExtraFileTypes object
    // to that attached to the ImagePlus object returned by openImage()
    setStack(title, stack);
    // copy over the calibration info since it doesn't come with the ImageProcessor
    setCalibration(imp.getCalibration());
    // also copy the Show Info field over if it exists
    if (imp.getProperty("Info") != null) setProperty("Info", imp.getProperty("Info"));
    // copy the FileInfo
    setFileInfo(imp.getOriginalFileInfo());
    // copy dimensions
    if (IJ.getVersion().compareTo("1.38s") >= 0)
      setDimensions(imp.getNChannels(), imp.getNSlices(), imp.getNFrames());
    if (IJ.getVersion().compareTo("1.41o") >= 0) setOpenAsHyperStack(imp.getOpenAsHyperStack());
  }
Beispiel #16
0
 protected void moveHandle(int sx, int sy) {
   if (clipboard != null) return;
   int ox = ic.offScreenX(sx);
   int oy = ic.offScreenY(sy);
   if (xpf != null) {
     double offset = getOffset(-0.5);
     xpf[activeHandle] = (float) (ic.offScreenXD(sx) - x + offset);
     ypf[activeHandle] = (float) (ic.offScreenYD(sy) - y + offset);
   } else {
     xp[activeHandle] = ox - x;
     yp[activeHandle] = oy - y;
   }
   if (xSpline != null) {
     fitSpline(splinePoints);
     updateClipRect();
     imp.draw(clipX, clipY, clipWidth, clipHeight);
     oldX = x;
     oldY = y;
     oldWidth = width;
     oldHeight = height;
   } else {
     resetBoundingRect();
     if (type == POINT && width == 0 && height == 0) {
       width = 1;
       height = 1;
     }
     updateClipRectAndDraw();
   }
   String angle = type == ANGLE ? getAngleAsString() : "";
   IJ.showStatus(imp.getLocationAsString(ox, oy) + angle);
 }
  public void calAutoCorrelation_RingMean(
      int
          nRefType) { // crosscorrelation coefficients between pixel valuse and the means and
                      // medians of the pixels located on the cocentric rings with radius up to
                      // m_nRMax
    m_nRefType = nRefType;
    int numRings = m_cvRings.size();
    calRefPixels();
    int r, c;
    int len = m_cIMSC.m_nTotalSteps + 1;
    double[] pixels0 = new double[len];
    double[] meanr = new double[len];
    double[] medianr = new double[len];

    int index = 0;

    Point p;
    index = 0;
    while (true) {
      p = m_cIMSC.getPosition();
      pixels0[index] = m_pnPixelsLR[p.y][p.x];
      index++;
      if (m_cIMSC.done()) break;
      m_cIMSC.move();
    }

    ImageShape shape;
    Histogram hist = CommonMethods.getDefaultHistogram(m_pnPixelsLR);

    int y, y0 = 0;
    int nRef;
    for (c = 0; c < numRings - 1; c++) {
      index = 0;
      m_cIMSC.reset();
      y0 = m_cIMSC.getPosition().y;
      shape = m_cvRings.get(c);
      while (true) {
        p = m_cIMSC.getPosition();
        nRef = getRefPixel(p);
        y = p.y;
        if (y > y0) {
          IJ.showStatus(
              "calAutoCorrelation_RingMean: r="
                  + PrintAssist.ToString(c + 1)
                  + "   y="
                  + PrintAssist.ToString(y));
          y0 = y;
        }
        CommonMethods.fillHistogram(m_pnPixels, nRef, shape, p, hist);
        meanr[index] = hist.getMean();
        medianr[index] = hist.getPercentileValue();
        index++;
        if (m_cIMSC.done()) break;
        m_cIMSC.move();
      }
      m_pdAutoCorr_mean[c] = CommonStatisticsMethods.crossCorrelationCoefficient(pixels0, meanr, 0);
      m_pdAutoCorr_median[c] =
          CommonStatisticsMethods.crossCorrelationCoefficient(pixels0, medianr, 0);
    }
  }
Beispiel #18
0
 void write16BitStack(OutputStream out, Object[] stack) throws IOException {
   showProgressBar = false;
   for (int i = 0; i < fi.nImages; i++) {
     IJ.showStatus("Writing: " + (i + 1) + "/" + fi.nImages);
     write16BitImage(out, (short[]) stack[i]);
     IJ.showProgress((double) (i + 1) / fi.nImages);
   }
 }
  /**
   * Execute the plugin functionality: duplicate and scale the given image.
   *
   * @return an Object[] array with the name and the scaled ImagePlus. Does NOT show the new, image;
   *     just returns it.
   */
  public Object[] exec(
      ImagePlus imp, String myMethod, int radius, double par1, double par2, boolean doIwhite) {

    // 0 - Check validity of parameters
    if (null == imp) return null;
    ImageProcessor ip = imp.getProcessor();
    int xe = ip.getWidth();
    int ye = ip.getHeight();

    // int [] data = (ip.getHistogram());

    IJ.showStatus("Thresholding...");
    long startTime = System.currentTimeMillis();
    // 1 Do it
    if (imp.getStackSize() == 1) {
      ip.snapshot();
      Undo.setup(Undo.FILTER, imp);
    }
    // Apply the selected algorithm
    if (myMethod.equals("Bernsen")) {
      Bernsen(imp, radius, par1, par2, doIwhite);
    } else if (myMethod.equals("Contrast")) {
      Contrast(imp, radius, par1, par2, doIwhite);
    } else if (myMethod.equals("Mean")) {
      Mean(imp, radius, par1, par2, doIwhite);
    } else if (myMethod.equals("Median")) {
      Median(imp, radius, par1, par2, doIwhite);
    } else if (myMethod.equals("MidGrey")) {
      MidGrey(imp, radius, par1, par2, doIwhite);
    } else if (myMethod.equals("Niblack")) {
      Niblack(imp, radius, par1, par2, doIwhite);
    } else if (myMethod.equals("Otsu")) {
      Otsu(imp, radius, par1, par2, doIwhite);
    } else if (myMethod.equals("Phansalkar")) {
      Phansalkar(imp, radius, par1, par2, doIwhite);
    } else if (myMethod.equals("Sauvola")) {
      Sauvola(imp, radius, par1, par2, doIwhite);
    }
    // IJ.showProgress((double)(255-i)/255);
    imp.updateAndDraw();
    imp.getProcessor().setThreshold(255, 255, ImageProcessor.NO_LUT_UPDATE);
    // 2 - Return the threshold and the image
    IJ.showStatus("\nDone " + (System.currentTimeMillis() - startTime) / 1000.0);
    return new Object[] {imp};
  }
 public static byte[] download(String urlString, String name) {
   int maxLength = 52428800; // 50MB
   URL url = null;
   boolean unknownLength = false;
   byte[] data = null;
   ;
   int n = 0;
   try {
     url = new URL(urlString);
     if (IJ.debugMode) IJ.log("PluginInstaller: " + urlString + "  " + url);
     if (url == null) return null;
     URLConnection uc = url.openConnection();
     int len = uc.getContentLength();
     unknownLength = len < 0;
     if (unknownLength) len = maxLength;
     if (name != null) IJ.showStatus("Downloading " + url.getFile());
     InputStream in = uc.getInputStream();
     data = new byte[len];
     int lenk = len / 1024;
     while (n < len) {
       int count = in.read(data, n, len - n);
       if (count < 0) break;
       n += count;
       if (name != null)
         IJ.showStatus("Downloading " + name + " (" + (n / 1024) + "/" + lenk + "k)");
       IJ.showProgress(n, len);
     }
     in.close();
   } catch (Exception e) {
     String msg = "" + e;
     if (!msg.contains("://")) msg += "\n   " + urlString;
     IJ.error("Plugin Installer", msg);
     return null;
   } finally {
     IJ.showProgress(1.0);
   }
   if (name != null) IJ.showStatus("");
   if (unknownLength) {
     byte[] data2 = data;
     data = new byte[n];
     for (int i = 0; i < n; i++) data[i] = data2[i];
   }
   return data;
 }
Beispiel #21
0
 void handleMouseMove(int sx, int sy) {
   // Do rubber banding
   int tool = Toolbar.getToolId();
   if (!(tool == Toolbar.POLYGON || tool == Toolbar.POLYLINE || tool == Toolbar.ANGLE)) {
     imp.deleteRoi();
     imp.draw();
     return;
   }
   drawRubberBand(sx, sy);
   degrees = Double.NaN;
   double len = -1;
   if (nPoints > 1) {
     double x1, y1, x2, y2;
     if (xpf != null) {
       x1 = xpf[nPoints - 2];
       y1 = ypf[nPoints - 2];
       x2 = xpf[nPoints - 1];
       y2 = ypf[nPoints - 1];
     } else {
       x1 = xp[nPoints - 2];
       y1 = yp[nPoints - 2];
       x2 = xp[nPoints - 1];
       y2 = yp[nPoints - 1];
     }
     degrees =
         getAngle(
             (int) Math.round(x1),
             (int) Math.round(y1),
             (int) Math.round(x2),
             (int) Math.round(y2));
     if (tool != Toolbar.ANGLE) {
       Calibration cal = imp.getCalibration();
       double pw = cal.pixelWidth, ph = cal.pixelHeight;
       if (IJ.altKeyDown()) {
         pw = 1.0;
         ph = 1.0;
       }
       len = Math.sqrt((x2 - x1) * pw * (x2 - x1) * pw + (y2 - y1) * ph * (y2 - y1) * ph);
     }
   }
   if (tool == Toolbar.ANGLE) {
     if (nPoints == 2) angle1 = degrees;
     else if (nPoints == 3) {
       double angle2 = getAngle(xp[1], yp[1], xp[2], yp[2]);
       degrees = Math.abs(180 - Math.abs(angle1 - angle2));
       if (degrees > 180.0) degrees = 360.0 - degrees;
     }
   }
   String length = len != -1 ? ", length=" + IJ.d2s(len) : "";
   double degrees2 =
       tool == Toolbar.ANGLE && nPoints == 3 && Prefs.reflexAngle ? 360.0 - degrees : degrees;
   String angle = !Double.isNaN(degrees) ? ", angle=" + IJ.d2s(degrees2) : "";
   int ox = ic != null ? ic.offScreenX(sx) : sx;
   int oy = ic != null ? ic.offScreenY(sy) : sy;
   IJ.showStatus(imp.getLocationAsString(ox, oy) + length + angle);
 }
 private boolean checkImage() {
   imp = WindowManager.getCurrentImage();
   if (imp == null) {
     IJ.beep();
     IJ.showStatus("No image");
     return false;
   }
   ip = setup(imp);
   if (ip == null) return false;
   return true;
 }
Beispiel #23
0
  /** Performs actual projection using specified method. */
  public void doProjection() {
    if (imp == null) return;
    sliceCount = 0;
    if (method < AVG_METHOD || method > MEDIAN_METHOD) method = AVG_METHOD;
    for (int slice = startSlice; slice <= stopSlice; slice += increment) sliceCount++;
    if (method == MEDIAN_METHOD) {
      projImage = doMedianProjection();
      return;
    }

    // Create new float processor for projected pixels.
    FloatProcessor fp = new FloatProcessor(imp.getWidth(), imp.getHeight());
    ImageStack stack = imp.getStack();
    RayFunction rayFunc = getRayFunction(method, fp);
    if (IJ.debugMode == true) {
      IJ.log("\nProjecting stack from: " + startSlice + " to: " + stopSlice);
    }

    // Determine type of input image. Explicit determination of
    // processor type is required for subsequent pixel
    // manipulation.  This approach is more efficient than the
    // more general use of ImageProcessor's getPixelValue and
    // putPixel methods.
    int ptype;
    if (stack.getProcessor(1) instanceof ByteProcessor) ptype = BYTE_TYPE;
    else if (stack.getProcessor(1) instanceof ShortProcessor) ptype = SHORT_TYPE;
    else if (stack.getProcessor(1) instanceof FloatProcessor) ptype = FLOAT_TYPE;
    else {
      IJ.error("Z Project", "Non-RGB stack required");
      return;
    }

    // Do the projection.
    for (int n = startSlice; n <= stopSlice; n += increment) {
      IJ.showStatus("ZProjection " + color + ": " + n + "/" + stopSlice);
      IJ.showProgress(n - startSlice, stopSlice - startSlice);
      projectSlice(stack.getPixels(n), rayFunc, ptype);
    }

    // Finish up projection.
    if (method == SUM_METHOD) {
      fp.resetMinAndMax();
      projImage = new ImagePlus(makeTitle(), fp);
    } else if (method == SD_METHOD) {
      rayFunc.postProcess();
      fp.resetMinAndMax();
      projImage = new ImagePlus(makeTitle(), fp);
    } else {
      rayFunc.postProcess();
      projImage = makeOutputImage(imp, fp, ptype);
    }

    if (projImage == null) IJ.error("Z Project", "Error computing projection.");
  }
Beispiel #24
0
 void enlargeCanvas() {
   imp.unlock();
   if (imp.getStackSize() == 1) Undo.setup(Undo.COMPOUND_FILTER, imp);
   IJ.run("Select All");
   IJ.run("Rotate...", "angle=" + angle);
   Roi roi = imp.getRoi();
   Rectangle r = roi.getBounds();
   if (r.width < imp.getWidth()) r.width = imp.getWidth();
   if (r.height < imp.getHeight()) r.height = imp.getHeight();
   IJ.showStatus("Rotate: Enlarging...");
   IJ.run(
       "Canvas Size...",
       "width="
           + r.width
           + " height="
           + r.height
           + " position=Center "
           + (fillWithBackground ? "" : "zero"));
   IJ.showStatus("Rotating...");
 }
Beispiel #25
0
  private final void renderCubeFaces(final double hfov, final double vfov) {
    /* fragile, but that's not public API and we know what we're doing... */
    final double cubeSize = frontSource.getWidth() - 1;

    /* prepare extended image */
    ipSource =
        ip.createProcessor(
            hfov == 2.0 * Math.PI ? imp.getWidth() + 1 : imp.getWidth(),
            vfov == Math.PI ? imp.getHeight() + 1 : imp.getHeight());
    prepareExtendedImage(imp.getProcessor(), ipSource);

    /* render cube faces */
    final EquirectangularProjection q = p.clone();
    q.resetOrientation();
    q.setTargetWidth(cubeSize);
    q.setTargetHeight(cubeSize);
    q.setF(0.5f);

    final InverseTransformMapping<EquirectangularProjection> qMapping =
        new InverseTransformMapping<EquirectangularProjection>(q);

    IJ.showStatus("Rendering cube faces...");
    IJ.showProgress(0, 6);
    qMapping.mapInterpolated(ipSource, frontSource);
    IJ.showProgress(1, 6);
    q.pan(Math.PI);
    qMapping.mapInterpolated(ipSource, backSource);
    IJ.showProgress(2, 6);
    q.resetOrientation();
    q.pan(Math.PI / 2);
    qMapping.mapInterpolated(ipSource, leftSource);
    IJ.showProgress(3, 6);
    q.resetOrientation();
    q.pan(-Math.PI / 2);
    qMapping.mapInterpolated(ipSource, rightSource);
    IJ.showProgress(4, 6);
    q.resetOrientation();
    q.tilt(-Math.PI / 2);
    qMapping.mapInterpolated(ipSource, topSource);
    IJ.showProgress(5, 6);
    q.resetOrientation();
    q.tilt(Math.PI / 2);
    qMapping.mapInterpolated(ipSource, bottomSource);
    IJ.showProgress(6, 6);

    if (showCubefaces) {
      new ImagePlus("front", frontSource).show();
      new ImagePlus("back", backSource).show();
      new ImagePlus("left", leftSource).show();
      new ImagePlus("right", rightSource).show();
      new ImagePlus("top", topSource).show();
      new ImagePlus("bottom", bottomSource).show();
    }
  }
Beispiel #26
0
  public void run(String arg) {
    int[] wList = WindowManager.getIDList();
    if (wList == null) {
      IJ.error("No images are open.");
      return;
    }

    double thalf = 0.5;
    boolean keep;

    GenericDialog gd = new GenericDialog("Bleach correction");

    gd.addNumericField("t½:", thalf, 1);
    gd.addCheckbox("Keep source stack:", true);
    gd.showDialog();
    if (gd.wasCanceled()) return;

    long start = System.currentTimeMillis();
    thalf = gd.getNextNumber();
    keep = gd.getNextBoolean();
    if (keep) IJ.run("Duplicate...", "title='Bleach corrected' duplicate");
    ImagePlus imp1 = WindowManager.getCurrentImage();
    int d1 = imp1.getStackSize();
    double v1, v2;
    int width = imp1.getWidth();
    int height = imp1.getHeight();
    ImageProcessor ip1, ip2, ip3;

    int slices = imp1.getStackSize();
    ImageStack stack1 = imp1.getStack();
    ImageStack stack2 = imp1.getStack();
    int currentSlice = imp1.getCurrentSlice();

    for (int n = 1; n <= slices; n++) {
      ip1 = stack1.getProcessor(n);
      ip3 = stack1.getProcessor(1);
      ip2 = stack2.getProcessor(n);
      for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
          v1 = ip1.getPixelValue(x, y);
          v2 = ip3.getPixelValue(x, y);

          // =B8/(EXP(-C$7*A8))
          v1 = (v1 / Math.exp(-n * thalf));
          ip2.putPixelValue(x, y, v1);
        }
      }
      IJ.showProgress((double) n / slices);
      IJ.showStatus(n + "/" + slices);
    }

    // stack2.show();
    imp1.updateAndDraw();
  }
  public void runLipschitz(ImageProcessor ip) {
    if (IJ.escapePressed()) return;
    breaked = false;
    Date d1, d2;
    d1 = new Date();

    IJ.showStatus("Initializing...");
    m_stack_out = m_imp.createEmptyStack();
    ImagePlus imp2 = null;

    for (int i = 0; ((i < m_scount) && (!breaked)); i++) {
      if (m_scount > 1) {
        ip = m_stack.getProcessor(i + 1);
      }
      iptmp = ip.createProcessor(ImageWidth, ImageHeight);
      iptmp.copyBits(ip, 0, 0, Blitter.COPY);

      IJ.showStatus("Filtering " + (i + 1) + "/" + m_scount + " slice.");

      Lipschitz2D(iptmp);

      m_stack_out.addSlice(m_imp.getShortTitle() + " " + (i + 1) + "/" + m_scount, iptmp);

      if (breaked = IJ.escapePressed()) IJ.beep();
    }

    imp2 =
        new ImagePlus(
            m_imp.getShortTitle()
                + " Filtered (Lipschitz) Slope:"
                + m_Slope
                + " "
                + ((m_Down) ? " -Down" : " ")
                + " "
                + ((m_TopHat) ? " -TopHat" : " ")
                + ((breaked) ? " -INTERUPTED" : ""),
            m_stack_out);
    imp2.show();
    imp2.updateAndDraw();
    IJ.showProgress(1.0);
  } // end of 'runLipschitz' method
Beispiel #28
0
 String[] openUrlAsList(String address) {
   IJ.showStatus("Connecting to " + IJ.URL);
   Vector v = new Vector();
   try {
     URL url = new URL(address);
     InputStream in = url.openStream();
     BufferedReader br = new BufferedReader(new InputStreamReader(in));
     String line;
     while (true) {
       line = br.readLine();
       if (line == null) break;
       if (!line.equals("")) v.addElement(line);
     }
     br.close();
   } catch (Exception e) {
   }
   String[] lines = new String[v.size()];
   v.copyInto((String[]) lines);
   IJ.showStatus("");
   return lines;
 }
Beispiel #29
0
 void write16BitVirtualStack(OutputStream out, VirtualStack virtualStack) throws IOException {
   showProgressBar = false;
   boolean flip = "FlipTheseImages".equals(fi.fileName);
   for (int i = 1; i <= fi.nImages; i++) {
     IJ.showStatus("Writing: " + i + "/" + fi.nImages);
     ImageProcessor ip = virtualStack.getProcessor(i);
     if (flip) ip.flipVertical();
     short[] pixels = (short[]) ip.getPixels();
     write16BitImage(out, pixels);
     IJ.showProgress((double) i / fi.nImages);
   }
 }
Beispiel #30
0
 /**
  * Attempts to open the specified url as a tiff, zip compressed tiff, dicom, gif or jpeg. Tiff
  * file names must end in ".tif", ZIP file names must end in ".zip" and dicom file names must end
  * in ".dcm". Returns an ImagePlus object if successful.
  *
  * @see ij.IJ#openImage(String)
  */
 public ImagePlus openURL(String url) {
   ImagePlus imp = openCachedImage(url);
   if (imp != null) return imp;
   try {
     String name = "";
     int index = url.lastIndexOf('/');
     if (index == -1) index = url.lastIndexOf('\\');
     if (index > 0) name = url.substring(index + 1);
     else throw new MalformedURLException("Invalid URL: " + url);
     if (url.indexOf(" ") != -1) url = url.replaceAll(" ", "%20");
     URL u = new URL(url);
     IJ.showStatus("" + url);
     String lurl = url.toLowerCase(Locale.US);
     if (lurl.endsWith(".tif")) {
       this.url = url;
       imp = openTiff(u.openStream(), name);
     } else if (lurl.endsWith(".zip")) imp = openZipUsingUrl(u);
     else if (lurl.endsWith(".jpg") || lurl.endsWith(".gif")) imp = openJpegOrGifUsingURL(name, u);
     else if (lurl.endsWith(".dcm") || lurl.endsWith(".ima")) {
       imp = (ImagePlus) IJ.runPlugIn("ij.plugin.DICOM", url);
       if (imp != null && imp.getWidth() == 0) imp = null;
     } else if (lurl.endsWith(".png")) imp = openPngUsingURL(name, u);
     else {
       URLConnection uc = u.openConnection();
       String type = uc.getContentType();
       if (type != null && (type.equals("image/jpeg") || type.equals("image/gif")))
         imp = openJpegOrGifUsingURL(name, u);
       else if (type != null && type.equals("image/png")) imp = openPngUsingURL(name, u);
       else imp = openWithHandleExtraFileTypes(url, new int[] {0});
     }
     IJ.showStatus("");
     return imp;
   } catch (Exception e) {
     String msg = e.getMessage();
     if (msg == null || msg.equals("")) msg = "" + e;
     IJ.error("Open URL", msg);
     return null;
   }
 }