HRtime - High resolution time interface plugin for ImageJ

Authors: François GANNIER (gannier at univ-tours dot fr) - Côme PASQUALIN University of Tours (France)
See also: Others productions for ImageJ from the authors
PCCV group main page
History: 2015/07/01: 0.1 - First version
Source: Link to GitHub.
Requires: Tested on ImageJ 1.51g but should works on older.
Limitations:Should works on Mac OS, Linux and Windows
Installation:Download and copy HRtime.jar in the jars folder then restart ImageJ.
Description: Using getTime() in ImageJ is problematic when you want a resolution less than 100 ms. HRtime allows to measure time with a resolution of about 1 microsecond. More you can suspend a process for a definite time with the same precision.
Usage : HRtime.gettime: no argument, return the time in microsecond
HRtime.sleep: two arguments, stop the current process during time.
Arg 1: reference time
Arg 2: time to sleep compared to reference time
Note that arguments are passed as string so you need to format numbers correctly with function d2s to avoid scientific notation. (see example 2).
Example 1 :The following code display laps time for each action and total time at end with a precision of microsecond.
	// open an image
	run("About ImageJ...");

	// store actual time
	startTime = parseInt(call("HRtime.gettime"));

	// save as lasttime
	lastTime = startTime;

	// Add actions here ex: invert
	run("Invert");

	lapsTime = parseInt(call("HRtime.gettime"));
	laps = (lapsTime - lastTime)/1000.0;
	print("laps = " + laps+"ms");
	lastTime = lapsTime;

	// Add another actions here ex:FFT
	run("FFT");

	lapsTime = parseInt(call("HRtime.gettime"));
	laps = (lapsTime - lastTime)/1000.0;
	print("laps = " + laps+"ms");

	lastTime = parseInt(call("HRtime.gettime"));
	total = (lastTime - startTime)/1000.0;
	print("total time :"+total+"ms");
Example 2 :The following code wait for an image from the IJ_IDS_cam plugin without overcharging the CPU. Acquisition is 500Hz so we sleep thread by block of 250us as we are waiting for the next image. Add a timeout of 1s if no image is coming.
	// set Time out of 1s
	HRTimeOut = 1e6;
	// set Time to sleep the thread in us
	HRwait = 250;
	
	// store actual time
	startTime = parseInt(call("HRtime.gettime"));
	newTime = startTime;

	// Init Cam.newImage
	call("ij.Prefs.set", "Cam.newImage","false");

	print("Starting..."); 
	// SPACE key to exit
	while (!isKeyDown("space")) {
		currentTime = parseInt(call("HRtime.gettime"));
		print("Waiting image...");
		// loop to wait next image		
		while (call("ij.Prefs.get", "Cam.newImage","false") == "false") {
			// but reduce CPU usage
			currentTime = parseInt(call("HRtime.sleep",d2s(currentTime,16), d2s(HRwait,16)));
			// exit at time out
			if ((currentTime - newTime) >= HRTimeOut) {
				print("time out: exit");
				exit();
			}
		}
		// Set "Cam.newImage" to false to prepare next one
		call("ij.Prefs.set", "Cam.newImage","false");
		
		// store new value
		newTime = currentTime;
		
		laps=(currentTime-startTime)/1000;
		print("New image at "+laps);
		
		// make what you want with the new image
	}	
	print("Done");  	
	

|Plugins | Home |