diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java
index 693c44bf1f49af54891e98c380e8a6ada3b7f414..1a45bf4d6d57f1481066eb343c3dd1a43e648cfb 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java
@@ -6,6 +6,7 @@ import org.opencv.core.Mat;
 import org.opencv.core.Point;
 import org.opencv.core.Rect;
 import org.opencv.core.Scalar;
+import org.opencv.core.Size;
 import org.opencv.imgproc.Imgproc;
 
 import uy.edu.fing.chesstrack.modulovision.Calibracion;
@@ -15,34 +16,24 @@ public class Modelador {
 	private static final String TAG = "CHESSTRACK::Modelador";
 	private final int CANT_FILAS= 8;
 	private final int CANT_SCAQUE = CANT_FILAS* CANT_FILAS;
-	private final int[][] tablero;
+	private  Mat tablero;
 	// se cuentan de arrib a abajo y de izquierda a derecha
-	private final Mat[][] escaques;
-	private static Modelador instance;
+	private final  Mat[][] escaques;
+	//private static Modelador instance;
 
 
 	private Modelador(){
-		tablero = new int[CANT_FILAS][CANT_FILAS];
+		tablero = Mat.zeros(new Size(8, 8), CvType.CV_8UC1);
 		escaques = new Mat[CANT_FILAS][CANT_FILAS];
 
-		//TODO init tablero
-	}
-
-	public static Modelador getInstance(){
-		if (instance == null){
-			instance = new Modelador();
-		}
-		return instance;
 	}
 
 	public void dividirTablero(Mat inputFrame){
-
-		Rect roi = Calibracion.getInstance().getRectROI();
-		Mat proccesFrame = inputFrame.submat(roi);
-		int largo = proccesFrame.rows();
-		int ancho = proccesFrame.cols();
+		Imgproc.cvtColor(inputFrame ,inputFrame,   Imgproc.COLOR_RGBA2GRAY,4);
+		int largo = inputFrame.rows();
+		int ancho = inputFrame.cols();
 		// obtengo cuanto mide en ancho y largo un escaque
-		int largoEscaque = (int) Math.floor(largo /(CANT_FILAS+2) );//+1 porque se toma un escaque mas de borde
+		int largoEscaque = (int) Math.floor(largo /(CANT_FILAS+2) );//+2 porque se toma un escaque mas de borde
 		int anchoEscaque = (int) Math.floor(ancho /(CANT_FILAS+2) );
 		Log.i(TAG, "largoEscaque= " + largoEscaque);
 		Log.i(TAG, "anchoEscaque= " + anchoEscaque);
@@ -57,6 +48,33 @@ public class Modelador {
 		}
 	}
 
+	private int getHayFichaEnEscaque(int i, int j){
+		int ret = 0;
+		Mat mIntermediateMat = new Mat();
+		Imgproc.Sobel(escaques[i][j], mIntermediateMat, CvType.CV_8U, 1, 1);
+		Core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 10, 0);
+		Imgproc.threshold(mIntermediateMat, mIntermediateMat, 70, 255, Imgproc.THRESH_BINARY);
+		int cant_pix = mIntermediateMat.cols()*mIntermediateMat.rows();
+		int cant_pix_white = Core.countNonZero(mIntermediateMat);
+		if (cant_pix_white > (50) ){
+			ret = 1;
+		}
+		return ret;
+	}
+
+
+	public Mat getMatrizFichas(Mat frame){
+		dividirTablero(frame);
+		tablero = Mat.zeros(new Size(8, 8), CvType.CV_8UC1);
+		for (int i = 0; i < CANT_FILAS; i++){
+			for (int j = 0; j < CANT_FILAS; j++){
+				tablero.put(i, j, getHayFichaEnEscaque(i,j));
+			}
+		}
+		return tablero;
+	}
+
+
 	public Mat dibujarEscaque(){
 		Mat tmp = Mat.ones(Calibracion.getInstance().get_sizeFrame(), CvType.CV_8UC4);
 		Mat subm ; //tmp.submat(new Rect(new Point(0,0) ,escaques[i][j].size()));
@@ -99,7 +117,7 @@ public class Modelador {
 	}
 
 	public Mat dibujarEscaquesSobel(){
-		Mat tmp = Mat.zeros(Calibracion.getInstance().get_sizeFrame(), CvType.CV_8UC4);
+		Mat tmp = Mat.zeros(Calibracion.getInstance().getRectROI().size(), CvType.CV_8UC4);
 		Mat subm ; //tmp.submat(new Rect(new Point(0,0) ,escaques[i][j].size()));
 		//escaques[i][j].copyTo(subm);
 		Mat mIntermediateMat = new Mat();
@@ -110,8 +128,8 @@ public class Modelador {
 				pos_x = (int) (escaques[i][j].size().width*i);
 				pos_y = (int) (escaques[i][j].size().height*j);
 				subm = tmp.submat(new Rect(new Point(pos_x,pos_y) ,escaques[i][j].size()));
-				Imgproc.cvtColor(escaques[i][j] ,mIntermediateMat,   Imgproc.COLOR_RGBA2GRAY,4);
-				Imgproc.Sobel(mIntermediateMat, mIntermediateMat, CvType.CV_8U, 1, 1);
+				//Imgproc.cvtColor(escaques[i][j] ,mIntermediateMat,   Imgproc.COLOR_RGBA2GRAY,4);
+				Imgproc.Sobel(escaques[i][j], mIntermediateMat, CvType.CV_8U, 1, 1);
 				Core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 10, 0);
 				Imgproc.threshold(mIntermediateMat, mIntermediateMat, 70, 255, Imgproc.THRESH_BINARY);
 				int cant_pix = mIntermediateMat.cols()*mIntermediateMat.rows();