/** * Creates new dialog for distances within a cell from the geometric center using a plugin. * * @param theParentFrame Parent frame. * @param im Source image. */ public PlugInDialogCenterDistance2(Frame theParentFrame, ModelImage im) { super(theParentFrame, false); if (!im.isColorImage()) { MipavUtil.displayError("Source Image must be Color"); dispose(); return; } image = im; init(); }
/** {@inheritDoc} */ protected void setGUIFromParams() { image = scriptParameters.retrieveInputImage(); parentFrame = image.getParentFrame(); if (!image.isColorImage()) { throw new ParameterException( AlgorithmParameters.getInputImageLabel(1), "Source Image must be Color"); } setBlueMin(scriptParameters.getParams().getInt("blue_min")); setRedMin(scriptParameters.getParams().getInt("red_min")); setRedFraction(scriptParameters.getParams().getFloat("red_fraction")); setMergingDistance(scriptParameters.getParams().getFloat("merging_distance")); setGreenMin(scriptParameters.getParams().getInt("green_min")); setGreenFraction(scriptParameters.getParams().getFloat("green_fraction")); setGreenRegionNumber(scriptParameters.getParams().getInt("green_region_number")); setTwoGreenLevels(scriptParameters.getParams().getBoolean("two_green_levels")); setBlueBoundaryFraction(scriptParameters.getParams().getFloat("blue_boundary_fraction")); setBlueSmooth(scriptParameters.getParams().getBoolean("blue_smooth")); setInterpolationDivisor(scriptParameters.getParams().getFloat("interpolation_divisor")); }
/** * Once all the necessary variables are set, call the Nonlocal Means filter algorithm based on * what type of image this is and whether or not there is a separate destination image. */ protected void callAlgorithm() { String name = makeImageName(image.getImageName(), "_NonlocalMeans"); int[] destExtents; if (image.getNDims() == 2) { // source image is 2D destExtents = new int[2]; destExtents[0] = image.getExtents()[0]; // X dim destExtents[1] = image.getExtents()[1]; // Y dim } else { destExtents = new int[3]; destExtents[0] = image.getExtents()[0]; destExtents[1] = image.getExtents()[1]; destExtents[2] = image.getExtents()[2]; } if (displayLoc == NEW) { try { // Make result image of float type if (image.isColorImage()) { resultImage = new ModelImage(ModelImage.ARGB, destExtents, name); } else { resultImage = new ModelImage(ModelImage.FLOAT, destExtents, name); } // resultImage = (ModelImage)image.clone(); // resultImage.setImageName(name); // Make algorithm nlMeansFilterAlgo = new AlgorithmNonlocalMeansFilter( resultImage, image, searchWindowSide, similarityWindowSide, noiseStandardDeviation, degreeOfFiltering, doRician, image25D); // This is very important. Adding this object as a listener allows the algorithm to // notify this object when it has completed of failed. See algorithm performed event. // This is made possible by implementing AlgorithmedPerformed interface nlMeansFilterAlgo.addListener(this); createProgressBar(image.getImageName(), nlMeansFilterAlgo); // Hide dialog setVisible(false); if (isRunInSeparateThread()) { // Start the thread as a low priority because we wish to still have user interface work // fast if (nlMeansFilterAlgo.startMethod(Thread.MIN_PRIORITY) == false) { MipavUtil.displayError("A thread is already running on this object"); } } else { nlMeansFilterAlgo.run(); } } catch (OutOfMemoryError x) { MipavUtil.displayError("Dialog Nonlocal Means Filter: unable to allocate enough memory"); if (resultImage != null) { resultImage.disposeLocal(); // Clean up memory of result image resultImage = null; } return; } } else { try { // No need to make new image space because the user has choosen to replace the source image // Make the algorithm class nlMeansFilterAlgo = new AlgorithmNonlocalMeansFilter( null, image, searchWindowSide, similarityWindowSide, noiseStandardDeviation, degreeOfFiltering, doRician, image25D); // This is very important. Adding this object as a listener allows the algorithm to // notify this object when it has completed of failed. See algorithm performed event. // This is made possible by implementing AlgorithmedPerformed interface nlMeansFilterAlgo.addListener(this); createProgressBar(image.getImageName(), nlMeansFilterAlgo); // Hide the dialog since the algorithm is about to run. setVisible(false); // These next lines set the titles in all frames where the source image is displayed to // "locked - " image name so as to indicate that the image is now read/write locked! // The image frames are disabled and then unregisted from the userinterface until the // algorithm has completed. Vector<ViewImageUpdateInterface> imageFrames = image.getImageFrameVector(); titles = new String[imageFrames.size()]; for (int i = 0; i < imageFrames.size(); i++) { titles[i] = ((Frame) (imageFrames.elementAt(i))).getTitle(); ((Frame) (imageFrames.elementAt(i))).setTitle("Locked: " + titles[i]); ((Frame) (imageFrames.elementAt(i))).setEnabled(false); userInterface.unregisterFrame((Frame) (imageFrames.elementAt(i))); } if (isRunInSeparateThread()) { // Start the thread as a low priority because we wish to still have user interface work // fast if (nlMeansFilterAlgo.startMethod(Thread.MIN_PRIORITY) == false) { MipavUtil.displayError("A thread is already running on this object"); } } else { nlMeansFilterAlgo.run(); } } catch (OutOfMemoryError x) { MipavUtil.displayError("Dialog Nonlocal Means Filter: unable to allocate enough memory"); return; } } }
/** cat. */ private void cat3D_4D_4D() { int length; int xDim, yDim; float[] buffer; int cFactor = 1; int i, j; float[] resols = new float[3]; float[] origins = new float[3]; FileInfoBase[] fileInfo = null; FileInfoDicom[] fileInfoDicom = null; int srcALength, srcBLength; try { fireProgressStateChanged(srcImage1.getImageName(), "Concatenating images ..."); resols = new float[4]; origins = new float[4]; xDim = srcImage1.getExtents()[0]; yDim = srcImage1.getExtents()[1]; if (srcImage1.isColorImage()) { cFactor = 4; } length = cFactor * xDim * yDim; buffer = new float[length]; int nImages; if (srcImage1.getNDims() > srcImage2.getNDims()) { nImages = (srcImage1.getExtents()[2] * srcImage1.getExtents()[3]) + srcImage2.getExtents()[2]; for (i = 0; (i < (srcImage1.getExtents()[2] * srcImage1.getExtents()[3])) && !threadStopped; i++) { fireProgressStateChanged(Math.round((float) (i) / (nImages - 1) * 100)); srcImage1.exportData(i * length, length, buffer); destImage.importData(i * length, buffer, false); } if (threadStopped) { buffer = null; finalize(); return; } for (j = 0; (j < srcImage2.getExtents()[2]) && !threadStopped; j++) { fireProgressStateChanged(Math.round((float) (i + j) / (nImages - 1) * 100)); srcImage2.exportData(j * length, length, buffer); destImage.importData((i + j) * length, buffer, false); } if (threadStopped) { buffer = null; finalize(); return; } destImage.calcMinMax(); } else { nImages = (srcImage2.getExtents()[2] * srcImage2.getExtents()[3]) + srcImage1.getExtents()[2]; for (j = 0; (j < srcImage1.getExtents()[2]) && !threadStopped; j++) { fireProgressStateChanged(Math.round((float) (j) / (nImages - 1) * 100)); srcImage1.exportData(j * length, length, buffer); destImage.importData(j * length, buffer, false); } if (threadStopped) { buffer = null; finalize(); return; } for (i = 0; (i < (srcImage2.getExtents()[2] * srcImage2.getExtents()[3])) && !threadStopped; i++) { fireProgressStateChanged(Math.round((float) (i + j) / (nImages - 1) * 100)); srcImage2.exportData(i * buffer.length, length, buffer); destImage.importData((i + j) * buffer.length, buffer, false); } if (threadStopped) { buffer = null; finalize(); return; } destImage.calcMinMax(); } } catch (IOException error) { buffer = null; destImage.disposeLocal(); // Clean up memory of result image destImage = null; errorCleanUp("Algorithm Concat. Images: Image(s) locked", true); return; } catch (OutOfMemoryError e) { buffer = null; destImage.disposeLocal(); // Clean up memory of result image destImage = null; errorCleanUp("Algorithm Concat. Images: Out of memory", true); return; } resols[0] = srcImage1.getFileInfo()[0].getResolutions()[0]; resols[1] = srcImage1.getFileInfo()[0].getResolutions()[1]; resols[2] = srcImage1.getFileInfo()[0].getResolutions()[2]; resols[3] = srcImage1.getFileInfo()[0].getResolutions()[3]; origins[0] = srcImage1.getFileInfo()[0].getOrigin()[0]; origins[1] = srcImage1.getFileInfo()[0].getOrigin()[1]; origins[2] = srcImage1.getFileInfo()[0].getOrigin()[2]; origins[3] = srcImage1.getFileInfo()[0].getOrigin()[3]; if ((srcImage1.getFileInfo()[0] instanceof FileInfoDicom) && (srcImage2.getFileInfo()[0] instanceof FileInfoDicom)) { fileInfoDicom = new FileInfoDicom[destImage.getExtents()[2] * destImage.getExtents()[3]]; if (srcImage1.getNDims() > srcImage2.getNDims()) { srcALength = srcImage1.getExtents()[2] * srcImage1.getExtents()[3]; for (i = 0; (i < srcALength) && !threadStopped; i++) { fileInfoDicom[i] = (FileInfoDicom) (((FileInfoDicom) srcImage1.getFileInfo()[i]).clone()); fileInfoDicom[i].setOrigin(origins); } for (i = 0; (i < srcImage2.getExtents()[2]) && !threadStopped; i++) { fileInfoDicom[srcALength + i] = (FileInfoDicom) (((FileInfoDicom) srcImage2.getFileInfo()[i]).clone()); fileInfoDicom[srcALength + i].setOrigin(origins); } } else { srcBLength = srcImage2.getExtents()[2] * srcImage2.getExtents()[3]; for (i = 0; (i < srcImage1.getExtents()[2]) && !threadStopped; i++) { fileInfoDicom[i] = (FileInfoDicom) (((FileInfoDicom) srcImage1.getFileInfo()[i]).clone()); fileInfoDicom[i].setOrigin(origins); } for (i = 0; (i < srcBLength) && !threadStopped; i++) { fileInfoDicom[srcImage1.getExtents()[2] + i] = (FileInfoDicom) (((FileInfoDicom) srcImage2.getFileInfo()[i]).clone()); fileInfoDicom[srcImage1.getExtents()[2] + i].setOrigin(origins); } } destImage.setFileInfo(fileInfoDicom); } else { fileInfo = destImage.getFileInfo(); for (i = 0; (i < (destImage.getExtents()[2] * destImage.getExtents()[3])) && !threadStopped; i++) { fileInfo[i].setModality(srcImage1.getFileInfo()[0].getModality()); fileInfo[i].setFileDirectory(srcImage1.getFileInfo()[0].getFileDirectory()); fileInfo[i].setEndianess(srcImage1.getFileInfo()[0].getEndianess()); fileInfo[i].setUnitsOfMeasure(srcImage1.getFileInfo()[0].getUnitsOfMeasure()); fileInfo[i].setResolutions(resols); fileInfo[i].setExtents(destImage.getExtents()); fileInfo[i].setMax(destImage.getMax()); fileInfo[i].setMin(destImage.getMin()); fileInfo[i].setImageOrientation(srcImage1.getImageOrientation()); fileInfo[i].setPixelPadValue(srcImage1.getFileInfo()[0].getPixelPadValue()); fileInfo[i].setPhotometric(srcImage1.getFileInfo()[0].getPhotometric()); fileInfo[i].setAxisOrientation(srcImage1.getAxisOrientation()); } if (srcImage1.getFileInfo()[0] instanceof FileInfoImageXML) { if (srcImage1.getNDims() > srcImage2.getNDims()) { srcALength = srcImage1.getExtents()[2] * srcImage1.getExtents()[3]; for (i = 0; (i < srcALength) && !threadStopped; i++) { if (((FileInfoImageXML) srcImage1.getFileInfo()[i]).getPSetHashtable() != null) { ((FileInfoImageXML) fileInfo[i]) .setPSetHashtable( ((FileInfoImageXML) srcImage1.getFileInfo()[i]).getPSetHashtable()); } } } else { for (i = 0; (i < srcImage1.getExtents()[2]) && !threadStopped; i++) { if (((FileInfoImageXML) srcImage1.getFileInfo()[i]).getPSetHashtable() != null) { ((FileInfoImageXML) fileInfo[i]) .setPSetHashtable( ((FileInfoImageXML) srcImage1.getFileInfo()[i]).getPSetHashtable()); } } } } if (srcImage2.getFileInfo()[0] instanceof FileInfoImageXML) { if (srcImage1.getNDims() > srcImage2.getNDims()) { srcALength = srcImage1.getExtents()[2] * srcImage1.getExtents()[3]; for (i = 0; (i < srcImage2.getExtents()[2]) && !threadStopped; i++) { if (((FileInfoImageXML) srcImage2.getFileInfo()[i]).getPSetHashtable() != null) { ((FileInfoImageXML) fileInfo[srcALength + i]) .setPSetHashtable( ((FileInfoImageXML) srcImage2.getFileInfo()[i]).getPSetHashtable()); } } } else { srcBLength = srcImage2.getExtents()[2] * srcImage2.getExtents()[3]; for (i = 0; (i < srcBLength) && !threadStopped; i++) { if (((FileInfoImageXML) srcImage2.getFileInfo()[i]).getPSetHashtable() != null) { ((FileInfoImageXML) fileInfo[srcImage1.getExtents()[2] + i]) .setPSetHashtable( ((FileInfoImageXML) srcImage2.getFileInfo()[i]).getPSetHashtable()); } } } } } if (threadStopped) { buffer = null; finalize(); return; } setCompleted(true); fileInfo = null; fileInfoDicom = null; }
/** * This function produces a new image that has been concatenated. Two 2D-images become one 3D * image. */ private void cat2D_2D_3D() { int length; int xDim, yDim; int i; float[] buffer; int cFactor = 1; float[] resols = new float[3]; FileInfoBase[] fileInfo = null; FileInfoDicom[] fileInfoDicom = null; try { resols = new float[3]; xDim = srcImage1.getExtents()[0]; yDim = srcImage1.getExtents()[1]; if (srcImage1.isColorImage()) { cFactor = 4; } length = cFactor * xDim * yDim; buffer = new float[length]; srcImage1.exportData(0, length, buffer); destImage.importData(0, buffer, false); srcImage2.exportData(0, length, buffer); destImage.importData(buffer.length, buffer, true); } catch (IOException error) { buffer = null; destImage.disposeLocal(); // Clean up memory of result image destImage = null; errorCleanUp("Algorithm Concat. Images: Image(s) locked", true); return; } catch (OutOfMemoryError e) { buffer = null; destImage.disposeLocal(); // Clean up memory of result image destImage = null; errorCleanUp("Algorithm Concat. Images: Out of memory", true); return; } resols[0] = srcImage1.getFileInfo()[0].getResolutions()[0]; resols[1] = srcImage1.getFileInfo()[0].getResolutions()[1]; resols[2] = 1; if ((srcImage1.getFileInfo()[0] instanceof FileInfoDicom) && (srcImage2.getFileInfo()[0] instanceof FileInfoDicom)) { fileInfoDicom = new FileInfoDicom[destImage.getExtents()[2]]; fileInfoDicom[0] = (FileInfoDicom) (((FileInfoDicom) srcImage1.getFileInfo()[0]).clone()); fileInfoDicom[1] = (FileInfoDicom) (((FileInfoDicom) srcImage2.getFileInfo()[0]).clone()); destImage.setFileInfo(fileInfoDicom); } else { fileInfo = destImage.getFileInfo(); for (i = 0; (i < destImage.getExtents()[2]) && !threadStopped; i++) { fileInfo[i].setModality(srcImage1.getFileInfo()[0].getModality()); fileInfo[i].setFileDirectory(srcImage1.getFileInfo()[0].getFileDirectory()); fileInfo[i].setEndianess(srcImage1.getFileInfo()[0].getEndianess()); fileInfo[i].setUnitsOfMeasure(srcImage1.getFileInfo()[0].getUnitsOfMeasure()); fileInfo[i].setResolutions(resols); fileInfo[i].setExtents(destImage.getExtents()); fileInfo[i].setMax(destImage.getMax()); fileInfo[i].setMin(destImage.getMin()); fileInfo[i].setImageOrientation(srcImage1.getImageOrientation()); fileInfo[i].setPixelPadValue(srcImage1.getFileInfo()[0].getPixelPadValue()); fileInfo[i].setPhotometric(srcImage1.getFileInfo()[0].getPhotometric()); fileInfo[i].setAxisOrientation(srcImage1.getAxisOrientation()); } if (srcImage1.getFileInfo()[0] instanceof FileInfoImageXML) { if (((FileInfoImageXML) srcImage1.getFileInfo()[0]).getPSetHashtable() != null) { ((FileInfoImageXML) fileInfo[0]) .setPSetHashtable(((FileInfoImageXML) srcImage1.getFileInfo()[0]).getPSetHashtable()); } } if (srcImage2.getFileInfo()[0] instanceof FileInfoImageXML) { if (((FileInfoImageXML) srcImage2.getFileInfo()[0]).getPSetHashtable() != null) { ((FileInfoImageXML) fileInfo[1]) .setPSetHashtable(((FileInfoImageXML) srcImage2.getFileInfo()[0]).getPSetHashtable()); } } } if (threadStopped) { buffer = null; finalize(); return; } setCompleted(true); fileInfo = null; fileInfoDicom = null; }