Пример #1
0
  /**
   * Calculates the Laplacian image and replaces the source image with the new image.
   *
   * @param buffer DOCUMENT ME!
   * @param extents DOCUMENT ME!
   * @return resultBuffer
   */
  @SuppressWarnings("unused")
  private float[] calcInPlace3DBuffer(float[] buffer, int[] extents) {

    int i, s;
    int length;
    float[] resultBuffer;
    float lap;

    try {

      if (buffer == null) {
        length = srcImage.getSliceSize() * srcImage.getExtents()[2];
        buffer = new float[length];
      } else {
        length = buffer.length;
      }

      resultBuffer = new float[length];
      sBuffer = new byte[length];

      if (srcImage != null) {
        fireProgressStateChanged(srcImage.getImageName(), "Calculating the Laplacian ...");
      } else {
        fireProgressStateChanged("Medialness", "Calculating the Laplacian ...");
      }
    } catch (OutOfMemoryError e) {
      buffer = null;
      resultBuffer = null;
      sBuffer = null;
      errorCleanUp("Algorithm Laplacian exportData: Out of memory", true);

      return null;
    }

    try {

      if (srcImage != null) {
        srcImage.exportData(0, length, buffer); // locks and releases lock
      }
    } catch (IOException error) {
      buffer = null;
      resultBuffer = null;
      System.gc();
      errorCleanUp("Algorithm Laplacian: " + error, false);

      return null;
    }

    float[] sigs = new float[3];

    for (s = 1; (s <= 8) && !threadStopped; s++) {
      sigs[0] = s;
      sigs[1] = s;
      sigs[2] = s;
      makeKernels3D(sigs);

      fireProgressStateChanged(Math.round((float) (s) / 8 * 100));

      for (i = 0; (i < length) && !threadStopped; i++) {

        // if (entireImage == true || mask.get(i)) {

        lap = AlgorithmConvolver.convolve3DPtMed(i, extents, buffer, kExtents, GxxData);

        if (lap > resultBuffer[i]) {
          resultBuffer[i] = lap;
        }

        sBuffer[i] = (byte) s;
        // }
        // else {
        // resultBuffer[i] = 0;
        // }
      }
    }

    return resultBuffer;
  }