VersiLab_Plugin is early development targeted towards pre-clinical optical endo-microscopy (OEM). It runs as an ImageJ/Fiji plugin using a JavaFX GUI, can acquire images from webcam, allows the processing of images in real-time from selection of drop down processing algorithms, and control of National Instruments Digtal Module for controlling LEDS.
Demonstration on YouTube at https://goo.gl/KABxua
install JDK 1.8 from
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Ensure JAVA_HOME environment variable is set and points to your JDK installation
https://maven.apache.org/download.cgi
and follow installation instructions
https://maven.apache.org/install.html
Extract distribution archive in any directory
unzip apache-maven-3.5.0-bin.zip
Add the bin directory of the created directory apache-maven-3.5.0 to the PATH environment variable
Download and install Eclipse from http://www.eclipse.org/
Clone the Versilab project from https://github.com/sweeneyian/VersiLab_Plugin and unzip to the working directory of Eclipse.
import > existing Maven Project > (the pom.xml of the Versilab clone)
select workspace: ${workspace_loc:/Versilab_Plugin}
add Parameter: name=imagej.app.directory value={path to ImageJ or Fiji directory}
Running Maven build will have more enforcements than running Java Application and will ensure outputs are ImageJ compatible and ready for distribution to ImageJ update sites.
Select Project: Versilab_Plugin
Main class: com.Proteus.imagej.Versilab_Plugin
Running this Java application will use Maven to download the projects dependencies and store them in a .m2 folder like C:\Users\Owner\.m2\repository.
Note: Running the Java Application will bypass some Maven enforcement rules, which can be helpful for local development testing but May cause issues if trying to upload jar updates that fail Maven enforcement rules.
download and install OpenCV
http://opencv.org/opencv-3-2.html
The instalation of OpenCV 3.2 for webcam control. On startup a FileChooser popup will request opencv_java320.dll filepath. typically \opencv\build\java\x64\opencv_java320.dll for 64-bit machines.
Versilab_Plugin tested with NI-9402 C Series Digital Module for LED control.
Install NI-DAQmx 17.0.0 from
http://www.ni.com/nisearch/app/main/p/bot/no/ap/tech/lang/en/pg/1/sn/catnav:du,n8:3478.41.181.5495,ssnav:ndr/
Then using NI Max to name the Digital Module as cDAQ1
package com.Proteus.algorithms contains Image Processing algorithms.
CoreDectionOCV is during the background calibration phase
CorePopulationOCV uses the results of cores detected in CoreDetectionOCV to draw circles in the starting of camera image stream.
To implement a new image processing algorithm called NewAlgorithm that gaussian blurs the image stream create a NewAlgorithm.java file in com.Proteus.algorithms
package com.Proteus.algorithms;
import com.Proteus.gui.view.PopupController;
import com.Proteus.gui.view.VersiLabController;
import com.Proteus.imagej.Versilab_Plugin;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
import static org.opencv.core.Core.BORDER_DEFAULT;
import static org.opencv.imgproc.Imgproc.*;
public class NewAlgorithm implements VersiLabController.OpenCVImageProcess {
public void initialise(){
// this is how we initialise initialise popup sliders
VersiLabController mainController = Versilab_Plugin.getVersiLabPluginController();
mainController.addPopupSlider("Sigma", 0,20,1,0.1);
}
public Mat processImage(Mat imageIn, int counter) {
Size size = new Size(401, 401);
// get value from slider
double sigma = PopupController.getSliderValue(0);
// Do blurring based on slider value
Imgproc.GaussianBlur(imageIn, imageIn, size, sigma, sigma, BORDER_DEFAULT);
return imageIn;
}
And add the name NewAlgorithm to VersiLabRootLayout.fxml in com.Proteus.gui.view to an algorithm drop down menu
<ComboBox fx:id="AlgorithmComboBox" prefWidth="170.0" promptText="Loop Algorithm" GridPane.columnIndex="0" GridPane.rowIndex="14">
<items>
<FXCollections fx:factory="observableArrayList">
<String fx:value="NewAlgorithm"/>
<String fx:value="CorePopulationOCV"/>
<String fx:value="TestImageJ" />
<String fx:value="TestOpenCV" />
</FXCollections>
</items>
</ComboBox>
Versilab is an ImageJ plugin built from combination of ImageJ guides
https://imagej.net/Developing_Plugins_for_ImageJ_1.x
http://imagej.net/Build_ImageJ2_Plugin_With_JavaFX
https://imagej.net/Introduction_into_Developing_Plugins
https://imagej.net/Writing_plugins
https://imagej.net/Distribution
More details for Proteus and OEM Imaging can be found at:
YouTube demonstration at
Native OpenCV dll files get imported during runtime using FileChooser to specify a local directory. OpenCV can then be used to acquiring images from Webcam. It is possible that a similar method would work with Bytedeco, which shows the most promise for implementing universal hardware controls of specialised cameras, such as Grasshopper from FlyCapture2 dll files, which would be the next line of investigation and integration for having a modular approach to hardware for real-time image acquisition and processing.
http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22flycapture-platform%22
Memory management with Java and real-time image processing requires attention.
MIT. See LICENSE.txt.

