Skip to content
Snippets Groups Projects
Commit 65200ec2 authored by Aylen Ricca's avatar Aylen Ricca
Browse files

clear code

parent 3b45ecb4
No related branches found
No related tags found
No related merge requests found
......@@ -12,19 +12,19 @@ public class Client {
private static final String TAG = "CLIENT";
private static Client _clientInstance;
private Socket serverSocket;
private Socket _serverSocket;
private int _serverPort;
private String _serverIp;
//private BufferedReader input;
private DataOutputStream output;
// private BufferedReader _input;
private DataOutputStream _output;
protected Client(){
protected Client() {
}
public static Client getInstance(){
if(_clientInstance == null){
public static Client getInstance() {
if (_clientInstance == null) {
_clientInstance = new Client();
}
return _clientInstance;
......@@ -37,46 +37,44 @@ public class Client {
try {
InetAddress serverAddr = InetAddress.getByName(this._serverIp);
serverSocket = new Socket(serverAddr, _serverPort);
_serverSocket = new Socket(serverAddr, _serverPort);
Log.i(TAG, "Server on " + this._serverIp + ":" + _serverPort);
// get stream to send data
this.output = new DataOutputStream(this.serverSocket.getOutputStream());
if (_serverSocket != null) {
// get stream to send data
this._output = new DataOutputStream(
this._serverSocket.getOutputStream());
}
// get stream to receive data
//this.input = new BufferedReader(new InputStreamReader(this.serverSocket.getInputStream()));
// this._input = new BufferedReader(new
// InputStreamReader(this._serverSocket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
public void SendData(String msg) {
try {
Log.i(TAG, "sending="+ msg);
this.output.writeBytes(msg);
} catch (IOException e) {
e.printStackTrace();
if (this._serverSocket != null && this._output != null) {
try {
Log.i(TAG, "sending=" + msg);
this._output.writeBytes(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
public String ReceiveData() {
try {
String read = input.readLine();
Log.i(TAG, "received="+ read);
return read;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
*/
* public String ReceiveData() { try { String read = _input.readLine();
* Log.i(TAG, "received="+ read); return read; } catch (IOException e) {
* e.printStackTrace(); return null; } }
*/
public void Stop() {
try {
//input.close();
output.close();
serverSocket.close();
// _input.close();
_output.close();
_serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
......
......@@ -8,6 +8,7 @@ import java.util.List;
import org.opencv.core.Mat;
import uy.edu.fing.chesstrack.modulovision.imgproc.BackgroundSupress;
import uy.edu.fing.chesstrack.modulovision.imgproc.EcualizarImagen;
import uy.edu.fing.chesstrack.modulovision.imgproc.Homografia;
import uy.edu.fing.chesstrack.modulovision.imgproc.ImgProcInterface;
import android.util.Log;
......@@ -15,21 +16,18 @@ import android.util.Log;
public class Adquisicion {
List<ImgProcInterface> listProc;
private static final String TAG = "CHESSTRACK::Adquisicion";
List<ImgProcInterface> _listProc;
public Adquisicion() throws Exception {
super();
Log.i(TAG, "Cargado....");
listProc = new ArrayList<ImgProcInterface>();
listProc.add( new Homografia());
//listProc.add( new EcualizarImagen());
//listProc.add( new SustraccionDeFondo());
//listProc.add( new BackgroundSupress());
_listProc = new ArrayList<ImgProcInterface>();
_listProc.add(new Homografia());
//_listProc.add(new EcualizarImagen());
_listProc.add(new BackgroundSupress());
}
/**
......@@ -41,12 +39,10 @@ public class Adquisicion {
*/
public synchronized Mat processFrame(Mat inputPicture) {
Log.i(TAG, "processFrame inicia");
Mat salida = inputPicture;
Mat prevImg = inputPicture;
for (ImgProcInterface proc: listProc){
prevImg = proc.procesarImagen(prevImg);
Mat tempImg = inputPicture;
for (ImgProcInterface proc: _listProc){
tempImg = proc.procesarImagen(tempImg);
}
return prevImg;
return tempImg;
}
}
......@@ -14,104 +14,98 @@ import android.util.Log;
public class Homografia implements ImgProcInterface {
private static final String TAG = "CHESSTRACK::Homografia";
private final Mat matrizTransformada;
private final Rect rectPOI;
private int media;
private int offset;
private final Mat _matrizTransformada;
private final Rect _rectPOI;
private int _media;
private int _offset;
public Homografia() throws Exception {
super();
MatOfPoint2f vertices = Calibracion.getInstance().getVertices();
if (vertices != null){
Mat src = new Mat(4,1,CvType.CV_32FC2);
Mat dst = new Mat(4,1,CvType.CV_32FC2);
Point p1, p2, p3, p4;
Point[] ret = getBestPoints(vertices, Calibracion.getInstance().getImagenCalibrada().size());
Log.i(TAG, "coso= " + ret);
Log.i(TAG, "Best Points= " + ret);
p1 = ret[0];
p2 = ret[1];
p3 = ret[2];
p4 = ret[3];
double d17 = Math.sqrt(Math.pow((p1.x- p2.x),2) + Math.pow((p1.y- p2.y),2));
double d749 = Math.sqrt(Math.pow((p2.x- p3.x),2) + Math.pow((p2.y- p3.y),2));
double d143 = Math.sqrt(Math.pow((p3.x- p4.x),2) + Math.pow((p3.y- p4.y),2));
double d4349 = Math.sqrt(Math.pow((p4.x- p1.x),2) + Math.pow((p4.y- p1.y),2));
media = (int) Math.floor( Math.round((d17+d749+d143+d4349)/4));
offset = 2*(media/6);
src.put(0,0 ,(int)p1.x,(int)p1.y, (int)p2.x,(int)p2.y, (int)p3.x,(int)p3.y, (int)p4.x,(int)p4.y);
dst.put(0,0, offset,offset ,offset+media,offset , offset+media,offset+media, offset,offset+media );
// EL offset es casi el tamaño de una celda
rectPOI = new Rect(new Point(0,0), new Point(2*offset+media,2*offset+media) );
Calibracion.getInstance().setRectPOI(rectPOI);
matrizTransformada = Imgproc.getPerspectiveTransform(src,dst);
}else{
// se obtienen las distancias de cada una de las aristas que determinan los vertices
// internos mas externos y se determina el promedio de esa medida
double d12 = Math.sqrt(Math.pow((p1.x- p2.x),2) + Math.pow((p1.y- p2.y),2));
double d23 = Math.sqrt(Math.pow((p2.x- p3.x),2) + Math.pow((p2.y- p3.y),2));
double d34 = Math.sqrt(Math.pow((p3.x- p4.x),2) + Math.pow((p3.y- p4.y),2));
double d14 = Math.sqrt(Math.pow((p4.x- p1.x),2) + Math.pow((p4.y- p1.y),2));
_media = (int) Math.floor( Math.round((d12+d23+d34+d14)/4));
// El offset es el tamaño de dos celdas (para abarcar el primer casillero y dejar un borde al tablero
_offset = (_media/6);
Log.i(TAG, "media= " + _media);
Log.i(TAG, "offset= " + _offset);
src.put(0,0, (int)p1.x,(int)p1.y, (int)p2.x,(int)p2.y, (int)p3.x,(int)p3.y, (int)p4.x,(int)p4.y);
dst.put(0,0, _offset,_offset, _offset+_media,_offset, _offset+_media,_offset+_media, _offset,_offset+_media );
_rectPOI = new Rect(new Point(0,0), new Point(2*_offset+_media,2*_offset+_media));
Calibracion.getInstance();
Calibracion.setRectPOI(_rectPOI);
Log.i(TAG, "rectPOI size= " + _rectPOI.size());
_matrizTransformada = Imgproc.getPerspectiveTransform(src,dst);
} else {
throw new Exception(TAG + "No se han calculado los vertices");
}
}
/**
* Hace homografia y recorta la imagen
*/
@Override
public Mat procesarImagen(Mat inputFrame) {
Log.i(TAG, "processing Frame - INI");
Log.i(TAG, "before");
Imgproc.warpPerspective(inputFrame,inputFrame, matrizTransformada, inputFrame.size());
Mat subMat = inputFrame.submat(rectPOI);
// hace la homografia con la matriz calculada en un ppio
Imgproc.warpPerspective(inputFrame,inputFrame, _matrizTransformada, inputFrame.size());
Mat subMat = inputFrame.submat(_rectPOI);
Mat tmp = Mat.zeros(inputFrame.size(), CvType.CV_8UC4);
Mat matTMP = tmp.submat(rectPOI);
Mat matTMP = tmp.submat(_rectPOI);
subMat.copyTo(matTMP);
Log.i(TAG, "after");
Log.i(TAG, "processing Frame - FIN");
return tmp;
}
private Point[] getBestPoints(MatOfPoint2f vertices, Size tamanio){
double d, best_dist;
Point[] ret = new Point[4];
Point[] vect = new Point[4];
double d, dx ,dy;
double betst_dist = Double.MAX_VALUE;
Point aux = new Point(0,0);
for(Point pt : vertices.toList()){
d = Math.sqrt(Math.pow((pt.x- aux.x),2) + Math.pow((pt.y- aux.y),2));
if (d < betst_dist){
betst_dist = d;
ret[0] = pt;
}
}
vect[0] = new Point(0,0);
vect[1] = new Point(tamanio.width,0);
vect[2] = new Point(tamanio.width,tamanio.height);
vect[3] = new Point(0,tamanio.height);
betst_dist = Double.MAX_VALUE;
aux = new Point(tamanio.width,0);
for(Point pt : vertices.toList()){
d = Math.sqrt(Math.pow((pt.x- aux.x),2) + Math.pow((pt.y- aux.y),2));
if (d < betst_dist){
betst_dist = d;
ret[1] = pt;
}
for (int i = 0; i < 4; i++){
Point aux = vect[i];
best_dist = Double.MAX_VALUE;
for(Point pt : vertices.toList()){
d = Math.sqrt(Math.pow((pt.x- aux.x),2) + Math.pow((pt.y- aux.y),2));
if (d < best_dist){
best_dist = d;
ret[i] = pt;
}
}
}
betst_dist = Double.MAX_VALUE;
aux = new Point(tamanio.width,tamanio.height);
for(Point pt : vertices.toList()){
d = Math.sqrt(Math.pow((pt.x- aux.x),2) + Math.pow((pt.y- aux.y),2));
if (d < betst_dist){
betst_dist = d;
ret[2] = pt;
}
}
betst_dist = Double.MAX_VALUE;
aux = new Point(0,tamanio.height);
for(Point pt : vertices.toList()){
d = Math.sqrt(Math.pow((pt.x- aux.x),2) + Math.pow((pt.y- aux.y),2));
if (d < betst_dist){
betst_dist = d;
ret[3] = pt;
}
}
return ret;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment