Skip to content

Commit

Permalink
Use variance rather than difference of images
Browse files Browse the repository at this point in the history
  • Loading branch information
fducroquet committed Apr 24, 2017
1 parent e20f800 commit 8f9fbd5
Showing 1 changed file with 24 additions and 9 deletions.
33 changes: 24 additions & 9 deletions gs-cv/src/main/java/org/genericsystem/cv/MotionDetector.java
Expand Up @@ -33,7 +33,7 @@ public class MotionDetector {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}

private final static String adjustedDirectoryPath = "adjusted";
private final static String adjustedDirectoryPath = "aligned-image-3.png";

private static VideoCapture camera = new VideoCapture(0);
private static List<Mat> adjustedImages = Arrays.stream(new File(adjustedDirectoryPath).listFiles()).filter(img -> img.getName().endsWith(".png")).map(img -> Imgcodecs.imread(img.getPath())).peek(img -> Imgproc.resize(img, img, new Size(400d, 300d)))
Expand Down Expand Up @@ -64,25 +64,40 @@ public static void main(String[] args) {
Mat prevAdjustedFrame = adjust(frame);
Mat average = prevAdjustedFrame;
double n = 2;
Mat diffAverage = new Mat(prevAdjustedFrame.size(), prevAdjustedFrame.type(), new Scalar(0, 0, 0));
Mat m2 = new Mat(prevAdjustedFrame.size(), CvType.CV_32S, new Scalar(0, 0, 0));
while (read(frame)) {
Mat currentAdjustedFrame = adjust(frame);
Core.addWeighted(average, (n - 1) / n, currentAdjustedFrame, 2d / n, 0, average);
Mat diffFrame = computeDiffFrame(currentAdjustedFrame, average);

Core.addWeighted(diffAverage, (n - 1) / n, diffFrame, 3d / n, -(n - 3) / (2 * n), diffAverage);
Imgproc.threshold(diffAverage, diffAverage, 0, 255, Imgproc.THRESH_TOZERO);
updateM2AndMean(m2, average, currentAdjustedFrame, n);
System.out.println("Type m2 : " + m2.type());
Mat variance = new Mat();
Core.multiply(m2, new Scalar(1 / n), variance);
Core.convertScaleAbs(variance, variance);
Imgproc.threshold(m2, m2, 0, 255, Imgproc.THRESH_TOZERO);
n++;
// Imgproc.adaptiveThreshold(diffAverage, diffAverage, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 9, 7);
prevAdjustedFrame = currentAdjustedFrame;
detection_contours(frame, diffAverage);
Mat not = new Mat();
Core.bitwise_not(m2, not);

detection_contours(frame, not);
ImageIcon image = new ImageIcon(mat2bufferedImage(frame));

vidpanel.setIcon(image);
vidpanel.repaint();
}
}

private static void updateM2AndMean(Mat m2, Mat mean, Mat newFrame, double n) {
Mat mask = new Mat();
Mat delta = new Mat(m2.size(), CvType.CV_32S);
Core.subtract(newFrame, mean, delta, mask, CvType.CV_32S);
Core.addWeighted(mean, 1, delta, 1 / n, 0, mean, mean.type());
Mat delta2 = new Mat(m2.size(), CvType.CV_32S);
Core.subtract(newFrame, mean, delta2, mask, CvType.CV_32S);
Mat product = delta.mul(delta2);
System.out.println("Type product : " + product.type() + ", delta : " + delta.type() + ", delta2 : " + delta2.type() + ", mean : " + mean.type());
Core.add(m2, product, m2);
}

private static Mat gradient(Mat src_gray) {
Mat grad_x = new Mat();
Mat grad_y = new Mat();
Expand Down

0 comments on commit 8f9fbd5

Please sign in to comment.