diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/BackgroundSupress.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/BackgroundSupress.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ff5a30f367498dd395c6a113b805b4fb8a86a4b
--- /dev/null
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/BackgroundSupress.java
@@ -0,0 +1,121 @@
+package uy.edu.fing.chesstrack.modulovision.imgproc;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+import java.util.Vector;
+
+import org.opencv.core.Core;
+import org.opencv.core.CvType;
+import org.opencv.core.Mat;
+import org.opencv.core.MatOfPoint;
+import org.opencv.core.Point;
+import org.opencv.core.Rect;
+import org.opencv.core.Scalar;
+import org.opencv.core.Size;
+import org.opencv.video.BackgroundSubtractorMOG;
+import org.opencv.video.BackgroundSubtractorMOG2;
+import org.opencv.imgproc.*;
+
+import android.graphics.SumPathEffect;
+import android.media.AudioManager;
+import android.media.ToneGenerator;
+import android.util.Log;
+
+
+public class BackgroundSupress implements ImgProcInterface {
+
+	private static final String TAG = "CHESSTRACK::BackgroundSupress";
+	private final  Mat fgMaskMOG;
+	private final  Mat fgMaskMOG2;
+	private final Mat morphKernel;
+	private final BackgroundSubtractorMOG pMOG;
+	private final BackgroundSubtractorMOG2 pMOG2;
+	private final List<MatOfPoint> contours;
+
+	public BackgroundSupress() {
+		super();
+		morphKernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3));
+		fgMaskMOG = new Mat(4,1,CvType.CV_8UC1);
+		fgMaskMOG2 = new Mat(4,1,CvType.CV_8UC1);
+		pMOG = new BackgroundSubtractorMOG(); //MOG approach
+		pMOG2 = new BackgroundSubtractorMOG2(); //MOG approach
+		Log.i(TAG, "at background supress constructor");
+		contours = new ArrayList<MatOfPoint>();
+	}
+
+	@Override
+	public Mat procesarImagen(Mat inputFrame) {
+		Log.i(TAG, "BackgroundS ");
+
+		Mat copy = new Mat(inputFrame.size(),CvType.CV_8UC3);
+		inputFrame.convertTo(copy, CvType.CV_8UC3);
+		Imgproc.cvtColor(inputFrame, copy, Imgproc.COLOR_BGRA2BGR);
+
+		pMOG.apply(copy, fgMaskMOG);
+		pMOG2.apply(copy, fgMaskMOG2,0);
+		Log.i(TAG, "Apply pMOG");
+
+		Imgproc.erode(fgMaskMOG2, fgMaskMOG2, morphKernel);
+		Log.i(TAG, "Apply erode");
+		
+		Imgproc.threshold(fgMaskMOG2, fgMaskMOG2, 200, 255, Imgproc.THRESH_BINARY);
+		Log.i(TAG, "Apply threshold");
+
+		Imgproc.dilate(fgMaskMOG2, fgMaskMOG2, morphKernel);
+		Log.i(TAG, "Apply dilate");
+
+		Scalar suma = Core.sumElems(fgMaskMOG2);
+		Log.i(TAG, "SUMA = " + suma);
+
+		/*double maxArea = 0;
+		MatOfPoint largestContour = null;
+		Imgproc.findContours(fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_TC89_L1);
+		for (MatOfPoint contour : contours) {
+		    double area = Imgproc.contourArea(contour);
+		    if (area > maxArea) {
+		        maxArea = area;
+		        largestContour = contour;
+		    }
+		}
+		Log.i(TAG, "ESTABLE !!!" + maxArea);
+		if ((largestContour != null) && (maxArea > 10000)){
+			Log.i(TAG, "MANO !!!" + maxArea);
+			Rect boundingRect = Imgproc.boundingRect(largestContour);
+			ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
+			toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // 200 is duration in ms
+		}*/
+
+		if (suma.val[0] > 100000){
+			Log.i(TAG, "MANO !!!");
+            Core.putText(fgMaskMOG2, "MANO !!!", new Point(50, 50),Core.FONT_HERSHEY_SIMPLEX, 0.8 , new Scalar(255,255,0));
+//			ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
+//			toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // 200 is duration in ms
+        } else {
+			Log.i(TAG, "ESTABLE !!!");
+            Core.putText(fgMaskMOG2, "ESTABLE !!!", new Point(50, 50),Core.FONT_HERSHEY_SIMPLEX, 0.5 , new Scalar(255,255,0));
+        }
+
+		/*Imgproc.findContours(fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_NONE);
+
+		for(int idx = 0; idx < contours.size(); idx++)
+	    {
+	    	double area = Imgproc.contourArea(contours.get(idx));
+	    	Log.i(TAG, "CONTOUR = AREA: " + area);
+	    	if ((area > 15000) && (area < 70000)){
+	    		Log.i(TAG, "DRAW !!! : " + area);
+	        	Scalar color = new Scalar(255,127,127);
+	    		Rect r = Imgproc.boundingRect(contours.get(idx));
+	    		Log.i(TAG, "3 at backgroundS "+(fgMaskMOG2.type() == CvType.CV_8UC1));
+	    		Core.rectangle(fgMaskMOG2, r.tl(), r.br(), color, 2, 8, 0);
+	        	//Imgproc.drawContours(fgMaskMOG2, contours, idx, color);
+	    	}
+	    }
+
+		contours.clear();*/
+		Log.i(TAG, "END Background Sss");
+		return fgMaskMOG2;
+	}
+
+}
+