int main(void) { punto puntos[N]; int i,j,p1,p2; float aux, actual; /*Leemos las coordenadas de los puntos que nos da el usuario*/ for(i=0; i<N; i++) { printf("Introduce la coordenada x el %iº punto : ", i+1); scanf("%f", &puntos[i].x1); printf("Introduce la coordenada y el %iº punto : ", i+1); scanf("%f", &puntos[i].x2); } /*Mostramos la informacion */ for(i=0; i<N; i++) { printf("Pto %i : (%.2f,%.2f)\n", i+1, puntos[i].x1, puntos[i].x2); } /*A continuacion calculamos las distancias euclídeas de todos con todos y nos guardaremos las referencias de la menor*/ i = 0; j = 0; p1 = 0; p2 = 0; /*Inicializamos con el primer par de puntos*/ actual = distanciaEuclidea(puntos[0],puntos[1]); aux = 0.0; while(i<N) { j = i + 1; while(j<N) { aux = distanciaEuclidea(puntos[i],puntos[j]); printf("Distancia entre (%.2f , %.2f) con (%.2f , %.2f) = ", puntos[i].x1, puntos[i].x2, puntos[j].x1, puntos[j].x2); printf("%.2f\n", aux); if (aux<actual) { actual = aux; p1 = i; p2 = j; } j++; } i++; } printf("\n-------------------------------------------------------------------------------\n"); printf("Los puntos mas cercanos son (%.2f , %.2f) con (%.2f , %.2f)", puntos[p1].x1, puntos[p1].x2, puntos[p2].x1, puntos[p2].x2); printf("\n-------------------------------------------------------------------------------\n"); return 0; }
int main(int argc, char *argv[]) { std::ifstream fichTest, fichTraining; long aciertos = 0; Vecinos vecinosMasProximos[KVECINOS]; if (!seguridad(argc, argv, fichTest)) return 0; int hisTraining[NCLUSTERS], hisTest[NCLUSTERS]; std::string imageTest, imageTraining; long posicionTest = 0; char basura; while( !fichTest.eof() ) { long totalCoincidencias = 0; double minimo = -1; int posicionVecino = 0; std::string pertenece, perteneceEuclidea, perteneceKVecinos; for (int i = 0; i < KVECINOS; i++) vecinosMasProximos[i].distancia = 0; if (posicionTest != 0) fichTest.seekg(posicionTest, fichTest.beg); std::string tipoTest = leerHistograma(hisTest, imageTest, fichTest); fichTraining.open(argv[argc-2]); if( !fichTraining.is_open() ) { std::cerr << "No se ha podido abrir el fichero de imágenes de Training" << std::endl; return false; } //std::cout << "TEST: " << tipoTest << std::endl; std::cout << "Calculando tipo de la imagen: " << imageTest << std::endl; long posicionTraining = 0; while( !fichTraining.eof() ) { if (posicionTraining != 0) fichTraining.seekg(posicionTraining, fichTraining.beg); std::string tipoTraining = leerHistograma(hisTraining, imageTraining, fichTraining); //std::cout << "\tTRAINING: " << tipoTraining << std::endl; //compararHistogramas(hisTest, hisTraining, totalCoincidencias, pertenece, tipoTraining); //distanciaEuclidea(hisTest, hisTraining, minimo, perteneceEuclidea, tipoTraining); encuentraKVecinos(vecinosMasProximos, posicionVecino, tipoTraining, distanciaEuclidea(hisTest, hisTraining, minimo, perteneceEuclidea, tipoTraining)); //imprimeKVecinos(vecinosMasProximos); posicionTraining = fichTraining.tellg(); fichTraining >> basura; } fichTraining.close(); perteneceKVecinos = votaVecino(vecinosMasProximos); guardaResultado(imageTest.substr(imageTest.find_last_of("/"), imageTest.size()), pertenece, perteneceEuclidea, perteneceKVecinos); //if(tipoTest == pertenece) aciertos++; //if(tipoTest == perteneceEuclidea) aciertos++; if(tipoTest == perteneceKVecinos) aciertos++; posicionTest = fichTest.tellg(); fichTest >> basura; //std::cout << "El Test: " << tipoTest << ", y el resultado por Coincidencias es: " << pertenece /*<< ", y por Proximidad es: " << perteneceEuclidea*/ << std::endl; std::cout << "El Test: " << tipoTest << ", y el resultado por Coincidencias es: " << perteneceKVecinos << std::endl; } fichTest.close(); std::cout << "TOTAL DE ACIERTOS: " << aciertos << std::endl; return 1; }
int main(int argc, char *argv[]) { std::ifstream fichCandidate, fichTraining; //long aciertos = 0; Vecinos vecinosMasProximos[KVECINOS]; if (!seguridad(argc, argv, fichCandidate)) return 0; //ListHistrograms listHistCandidate; std::list<NodeCandidate> listHistCandidate; rellenaLista(listHistCandidate, fichCandidate); fichCandidate.close(); std::cout << "HAY : " << listHistCandidate.size() << " ELEMENTOS" << std::endl; std::list<NodeCandidate>::iterator it = listHistCandidate.begin(); //std::cout << "the first is the number " << it->img /*<< ", and the last is the number " << listHistCandidate.end()*/ << std::endl; int hisTraining[NCLUSTERS], hisCandidate[NCLUSTERS]; std::string /*imageCandidate,*/ imageTraining; int noMatch = 0; bool endOfWilsone = false; int positionCandidate = 0; char basura; while( !endOfWilsone ) { long totalCoincidencias = 0; double minimo = -1; int posicionVecino = 0; std::string pertenece, perteneceEuclidea, perteneceKVecinos; for (int i = 0; i < KVECINOS; i++) vecinosMasProximos[i].distancia = 0; fichTraining.open(argv[argc-1]); if( !fichTraining.is_open() ) { std::cerr << "No se ha podido abrir el fichero de imágenes de Training" << std::endl; return false; } //std::cout << "Candidate: " << tipoCandidate << std::endl; std::cout << "Calculando tipo de la imagen: " << it->img << std::endl; long posicionTraining = 0, countTraining = 0; while( !fichTraining.eof() ) { if (posicionTraining != 0) fichTraining.seekg(posicionTraining, fichTraining.beg); std::string tipoTraining = leerHistograma(hisTraining, imageTraining, fichTraining); //std::cout << "\tTRAINING: " << tipoTraining << std::endl; //compararHistogramas(hisCandidate, hisTraining, totalCoincidencias, pertenece, tipoTraining); //distanciaEuclidea(hisCandidate, hisTraining, minimo, perteneceEuclidea, tipoTraining); if (it->img.compare(imageTraining)) encuentraKVecinos(vecinosMasProximos, posicionVecino, tipoTraining, distanciaEuclidea(it->hisCandidate, hisTraining, minimo, perteneceEuclidea, tipoTraining)); //imprimeKVecinos(vecinosMasProximos); posicionTraining = fichTraining.tellg(); fichTraining >> basura; countTraining++; } fichTraining.close(); perteneceKVecinos = votaVecino(vecinosMasProximos); //guardaResultado(imageCandidate.substr(imageCandidate.find_last_of("/"), imageCandidate.size()), pertenece, perteneceEuclidea, perteneceKVecinos); if(it->tipo != perteneceKVecinos) { listHistCandidate.erase(it++); noMatch++; std::cout << " ---->>>> ELIMINADO! <<<<---- " << std::endl; } else{ positionCandidate++; //it++; if (++it == listHistCandidate.end()) { usleep(2000); if(noMatch < LIMITMATCHES) break;//endOfWilsone = true; //break; it = listHistCandidate.begin(); noMatch = positionCandidate = 0; std::cout << "|||||||||||||||||||||||||||||||||||||||||||||| OTRA VEZZZZZ! ||||||||||||||||||||||||||||||||||||||||||||||" << std::endl; } } //std::cout << "El Candidate: " << tipoCandidate << ", y el resultado por Coincidencias es: " /*<< pertenece << ", y por Proximidad es: "*/ << perteneceEuclidea << std::endl; //std::cout << "El Candidate: " << it->tipo << ", y el resultado por Coincidencias es: " << perteneceKVecinos << std::endl; } for(it = listHistCandidate.begin(); it != listHistCandidate.end(); it++) guardaHistograma(it->hisCandidate, it->img); ////////////////////ESCRIBIMOS EL HISTOGRAMA EN EL NUEVO FICHERO PARA WILSON ALGORITHM//////////////// //std::cout << "TOTAL DE ACIERTOS: " << aciertos << std::endl; std::cout << "TOTAL DE FALLOS: " << noMatch << ", y tamaño de la lista: " << listHistCandidate.size() << std::endl; return 1; }