use of gdsc.smlm.ij.utils.ObjectAnalyzer in project GDSC-SMLM by aherbert.
the class SplitResults method splitResults.
private void splitResults(MemoryPeakResults results, ImageProcessor ip) {
IJ.showStatus("Splitting " + Utils.pleural(results.size(), "result"));
// Create an object mask
ObjectAnalyzer objectAnalyzer = new ObjectAnalyzer(ip, false);
final int maxx = ip.getWidth();
final int maxy = ip.getHeight();
final float scaleX = (float) results.getBounds().width / maxx;
final float scaleY = (float) results.getBounds().height / maxy;
// Create a results set for each object
final int maxObject = objectAnalyzer.getMaxObject();
MemoryPeakResults[] resultsSet = new MemoryPeakResults[maxObject + 1];
for (int object = 0; object <= maxObject; object++) {
MemoryPeakResults newResults = new MemoryPeakResults();
newResults.copySettings(results);
newResults.setName(results.getName() + " " + object);
resultsSet[object] = newResults;
}
final int[] mask = objectAnalyzer.getObjectMask();
if (showObjectMask) {
ImageProcessor objectIp = (maxObject <= 255) ? new ByteProcessor(maxx, maxy) : new ShortProcessor(maxx, maxy);
for (int i = 0; i < mask.length; i++) objectIp.set(i, mask[i]);
ImagePlus imp = Utils.display(objectMask + " Objects", objectIp);
imp.setDisplayRange(0, maxObject);
imp.updateAndDraw();
}
// Process the results mapping them to their objects
int i = 0;
final int size = results.size();
final int step = Utils.getProgressInterval(size);
for (PeakResult result : results.getResults()) {
if (++i % step == 0)
IJ.showProgress(i, size);
// Map to the mask objects
final int object;
int x = (int) (result.getXPosition() / scaleX);
int y = (int) (result.getYPosition() / scaleY);
if (x < 0 || x >= maxx || y < 0 || y >= maxy) {
object = 0;
} else {
final int index = y * maxx + x;
if (index < 0 || index >= mask.length)
object = 0;
else
object = mask[index];
}
resultsSet[object].add(result);
}
IJ.showProgress(1);
// Add the new results sets to memory
i = 0;
for (int object = (nonMaskDataset) ? 0 : 1; object <= maxObject; object++) {
if (!resultsSet[object].isEmpty()) {
MemoryPeakResults.addResults(resultsSet[object]);
i++;
}
}
IJ.showStatus("Split " + Utils.pleural(results.size(), "result") + " into " + Utils.pleural(i, "set"));
}
Aggregations