public void dummySegmentation() { List<Dataset> predictDataset = new ArrayList<>(imgDatasets.size()); INDArray predict = dummyClassification(); int currIdx = 0; for (int ds = 0; ds < imgDatasets.size(); ds++) { List<List<int[]>> profilesSet = testData.get(ds).getProfiles(); predictDataset.add(imagePlaneService.createEmptyPlaneDataset(imgDatasets.get(ds))); Dataset currDataset = predictDataset.get(ds); RandomAccess<RealType<?>> randomAccess = currDataset.randomAccess(); for (List<int[]> p : profilesSet) { for (int i = 0; i < p.size(); i++) { randomAccess.setPosition(p.get(i)[0], 0); randomAccess.setPosition(p.get(i)[1], 1); double value = predict.getRow(currIdx).getDouble(i); if (value != 0) randomAccess.get().setReal(value); } } Overlay[] overlays = BinaryToOverlay.transform(context, currDataset, true); // List<Overlay> overlayList = Arrays.asList(BinaryToOverlay.transform(context, // currDataset, true)); overlayStatService.setRandomColor(Arrays.asList(overlays)); ImageDisplay display = new DefaultImageDisplay(); context.inject(display); display.display(currDataset); for (Overlay o : overlays) { display.display(o); } uis.show(display); } }
/** * Generate the corresponding sequences of labels (0, 1) for a set of profiles, depending on if * the pixel belongs to the membrane or not * * @param trainingSet Set of intensity profiles extracted from an image, for the training of the * neural network and for that we need to label. * @param labeledDs Dataset where pixels belonging to membranes have been drawn. */ public void generateConfirmationSet(ProfilesSet trainingSet, Dataset labeledDs) { RandomAccess<RealType<?>> randomAccess = labeledDs.randomAccess(); List<int[]> labeledProfiles = new ArrayList<>(trainingSet.getProfiles().size()); for (int i = 0; i < trainingSet.getProfiles().size(); i++) { List<int[]> profile = trainingSet.getProfiles().get(i); int[] labels = new int[trainingSet.getMaxLenght()]; Arrays.fill(labels, 0); for (int j = 0; j < profile.size(); j++) { int[] point = profile.get(j); randomAccess.setPosition(point[0], 0); randomAccess.setPosition(point[1], 1); double pixelValue = randomAccess.get().getRealDouble(); if (pixelValue == COLOR) { for (int k = j - membraneWidth.getValue() / 2; k <= j + membraneWidth.getValue() / 2; k++) { if (k < 0 || k > labels.length) continue; else labels[k] = 1; } break; } labeledProfiles.add(labels); } confirmationSet.add(labeledProfiles); } }