/** * 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; }