RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.opencv; 00002 00003 import java.awt.image.BufferedImage; 00004 00005 import rlpark.plugin.opencv.zephyr.OpenCVImageProvider; 00006 import zephyr.plugin.core.api.viewable.ImageProvider; 00007 00008 import com.googlecode.javacv.cpp.opencv_core; 00009 import com.googlecode.javacv.cpp.opencv_core.IplImage; 00010 00011 public class ImageTrace implements ImageProvider { 00012 public final double lambda; 00013 private double d = 0.0; 00014 private final ImageBuffer buffer01; 00015 private final ImageBuffer average; 00016 private final ImageBuffer trace; 00017 private final OpenCVImageProvider provider = new OpenCVImageProvider(); 00018 00019 public ImageTrace(double lambda, int width, int height, int depth, int channels) { 00020 this.lambda = lambda; 00021 trace = new ImageBuffer(width, height, depth, channels); 00022 buffer01 = new ImageBuffer(width, height, depth, channels); 00023 average = new ImageBuffer(width, height, depth, channels); 00024 } 00025 00026 public IplImage update(IplImage currentFrame) { 00027 opencv_core.cvScale(average.im(), average.im(), lambda, 0.0); 00028 opencv_core.cvScale(currentFrame, buffer01.im(), 1.0 - lambda, 0.0); 00029 opencv_core.cvAdd(average.im(), buffer01.im(), average.im(), null); 00030 d = lambda * d + (1 - lambda); 00031 opencv_core.cvScale(average.im(), trace.im(), 1.0 / d, 0.0); 00032 provider.update(trace.im()); 00033 return trace.im(); 00034 } 00035 00036 @Override 00037 public BufferedImage image() { 00038 return provider.image(); 00039 } 00040 00041 public IplImage im() { 00042 return trace.im(); 00043 } 00044 00045 public void dispose() { 00046 average.dispose(); 00047 buffer01.dispose(); 00048 trace.dispose(); 00049 provider.dispose(); 00050 } 00051 }