package edu.stanford.rsl.tutorial.basics;
import java.util.ArrayList;
import ij.ImageJ;
import edu.stanford.rsl.conrad.data.numeric.Grid3D;
import edu.stanford.rsl.conrad.geometry.General;
import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND;
import edu.stanford.rsl.apps.gui.opengl.PointCloudViewer;
public class PointCloudMaker{
Grid3D image;
public PointCloudMaker(Grid3D image) {
this.image = image;
}
public ArrayList<PointND> getPoints(int id){
ArrayList<PointND> points = new ArrayList<PointND>();
int [] size = image.getSize();
for (int k=0; k <size[2]; k++){
for (int j=0; j <size[1]; j++){
for (int i=0; i <size[0]-1; i++){
float one = image.getAtIndex(i, j, k);
float two = image.getAtIndex(i+1, j, k);
if (one != two) {
PointND point = null;
if (one == id){
point = new PointND(General.voxelToWorld(new int [] {i,j,k}, image.getSpacing(), image.getOrigin()));
}
if (two == id){
point = new PointND(General.voxelToWorld(new int [] {i+1,j,k}, image.getSpacing(), image.getOrigin()));
}
if (point != null) points.add(point);
}
}
}
}
return points;
}
public static void main(String[] args){
new ImageJ();
MHDImageLoader loader = new MHDImageLoader();
Grid3D image = loader.loadImage(args[0]);
image.show("Loaded Data");
PointCloudMaker ptsMaker = new PointCloudMaker(image);
ArrayList<PointND> id1 = ptsMaker.getPoints(1);
ArrayList<PointND> id2 = ptsMaker.getPoints(2);
id2.addAll(id1);
PointCloudViewer pcv = new PointCloudViewer("ID 1", id2);
pcv.setVisible(true);
}
}