package fr.unistra.pelican.demos.applied.video;
import java.awt.Point;
import fr.unistra.pelican.Image;
import fr.unistra.pelican.PelicanException;
import fr.unistra.pelican.algorithms.applied.video.tracking.SnakeMultipleTracking;
import fr.unistra.pelican.algorithms.applied.video.tracking.SnakeTracking;
import fr.unistra.pelican.algorithms.io.MultipleImageLoad;
import fr.unistra.pelican.algorithms.io.MultipleImageSave;
import fr.unistra.pelican.algorithms.visualisation.Viewer2D;
public class SnakeTrackingDemo {
public static boolean multiple=true;
public static boolean background=false;
public static void main (String args[]) throws PelicanException {
String path="/home/lefevre/data/snake1";
Image image=MultipleImageLoad.exec(path+"/",Image.T);
image.setColor(true);
if (background) {
Image average=image.newInstance(image.getXDim(),image.getYDim(),image.getZDim(),1,image.getBDim());
double sum;
for (int b=0;b<image.getBDim();b++)
for (int z=0;z<image.getZDim();z++)
for (int y=0;y<image.getYDim();y++)
for (int x=0;x<image.getXDim();x++) {
sum=0;
for (int t=0;t<image.getTDim();t++)
sum+=image.getPixelDouble(x,y,z,t,b);
sum/=image.getTDim();
average.setPixelDouble(x,y,z,0,b,sum);
}
fr.unistra.pelican.algorithms.io.ImageSave.exec(average,"/home/lefevre/data/bgmodel.bmp");
/*
snake.setReference(ImageLoader.exec("/home/lefevre/data/bgmodel.bmp"));
snake.setBackgroundModel(Snake.BACKGROUND_REFERENCE);
*/
}
if(args.length>1) {
//FIXME: take into account the parameters
int splitStrategy=Integer.parseInt(args[0]);//Snake.SPLIT_EXTERN;
int mergeStrategy=Integer.parseInt(args[1]);//Snake.MERGE_CENTERS;
double mergeParameter=Double.parseDouble(args[2]);//10;
int checkSizeMin=Integer.parseInt(args[3]);//3;
int checkWidthMin=Integer.parseInt(args[4]);//3;
int checkHeightMin=Integer.parseInt(args[5]);//3;
int checkAreaMin=Integer.parseInt(args[6]);//5;
}
else {
System.out.println("splitStrategy mergeStrategy mergeParameter checkSizeMin checkWidthMin checkHeightMin checkAreaMin");
System.out.println("splitStrategy : SPLIT_EXTERN=1, SPLIT_INTERN=2");
System.out.println("mergeStrategy : MERGE_CENTERS=0, MERGE_EXTREMA=1, MERGE_BOTH=2");
}
Point p1=new Point(image.getXDim()*8/10,image.getYDim()*4/10);
Point p2=new Point(image.getXDim()*95/100,image.getYDim()*7/10);
Image output;
if (multiple==false)
output=SnakeTracking.exec(image,p1,p2);
else {
Point[] t1={p1};
Point[] t2={p2};
output=SnakeMultipleTracking.exec(image,t1,t2);
}
if(args.length==0)
Viewer2D.exec(output,"snake");
else
MultipleImageSave.exec(output,args[args.length-1],".png");
}
}