From fc521aa43ded99bfb716e7e57b233be45216fabb Mon Sep 17 00:00:00 2001 From: nfurquez <nfurquez@fing.edu.uy> Date: Thu, 24 Jul 2014 23:04:50 -0300 Subject: [PATCH] mejoras en modelador --- .../chesstrack/modulomodelador/Modelador.java | 60 ++++++++++++------- 1 file changed, 39 insertions(+), 21 deletions(-) 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 693c44b..1a45bf4 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(); -- GitLab