importClass(Packages.plugins.tprovoost.scripteditor.uitools.filedialogs.FileDialog) importClass(Packages.icy.roi.ROIUtil) importClass(Packages.icy.util.XLSUtil) importClass(Packages.plugins.adufour.roi.LabelExtractor) importClass(Packages.plugins.adufour.thresholder.KMeans) importClass(Packages.plugins.adufour.thresholder.Thresholder) importClass(Packages.icy.sequence.SequenceUtil) importClass(Packages.plugins.adufour.filtering.Convolution1D) importClass(Packages.plugins.adufour.filtering.Kernels1D) importClass(java.lang.Double) // get current active sequence seq = getSequence() // get channel of interest ch0 = SequenceUtil.extractChannel(seq, 0) // gaussian filter sigma = 3 kernelX = Kernels1D.CUSTOM_GAUSSIAN.createGaussianKernel1D(sigma).getData() kernelY = Kernels1D.CUSTOM_GAUSSIAN.createGaussianKernel1D(sigma).getData() Convolution1D.convolve(ch0, kernelX, kernelY, null); // computes the kmeans thresholds for automatic thresholding kmeans = KMeans.computeKMeansThresholds(ch0, 2) // performs the threshold and put the result (a sequence) inside a variable result = Thresholder.threshold(ch0, 0, kmeans, false) // get connected components as ROIs rois = LabelExtractor.extractLabels(result, LabelExtractor.ExtractionType.ALL_LABELS_VS_BACKGROUND, 0) // create excel file (ask user for output file) workbook = XLSUtil.createWorkbook(FileDialog.open()) // create excel page page = XLSUtil.createNewPage( workbook, "my result page") // create table header col = 0 for(c = 0; c < seq.getSizeC(); c++) { XLSUtil.setCellString(page, col++, 0, "min intensity ch" + c) XLSUtil.setCellString(page, col++, 0, "mean intensity ch" + c) XLSUtil.setCellString(page, col++, 0, "max intensity ch" + c) } seq.beginUpdate() // remove all ROIS from the active sequence seq.removeAllROI() for(i = 0; i < rois.size(); i++) { roi = rois.get(i) // change C position to -1 (all channel) in order to retrieve stats for all channels pos = roi.getPosition5D() pos.setC(-1) roi.setPosition5D(pos) // add result ROI to original sequence seq.addROI(roi) col = 0 for(c = 0; c < seq.getSizeC(); c++) { // compute min, mean and max intensity minIntensity = ROIUtil.getMinIntensity(seq, roi, -1, -1, c) meanIntensity = ROIUtil.getMeanIntensity(seq, roi, -1, -1, c) maxIntensity = ROIUtil.getMaxIntensity(seq, roi, -1, -1, c) XLSUtil.setCellNumber(page, col++, i+1, minIntensity) XLSUtil.setCellNumber(page, col++, i+1, meanIntensity) XLSUtil.setCellNumber(page, col++, i+1, maxIntensity) } } seq.endUpdate() XLSUtil.saveAndClose(workbook)