diff --git a/Source/functions/AbstractionLayers/Layer_SURFFeatures/AbstractionLayer_SURFFeatures.cpp b/Source/functions/AbstractionLayers/Layer_SURFFeatures/AbstractionLayer_SURFFeatures.cpp index ecac2eb..fe77287 100644 --- a/Source/functions/AbstractionLayers/Layer_SURFFeatures/AbstractionLayer_SURFFeatures.cpp +++ b/Source/functions/AbstractionLayers/Layer_SURFFeatures/AbstractionLayer_SURFFeatures.cpp @@ -10,14 +10,15 @@ // k – Free parameter of Harris detector #include -#include "opencv2/highgui.hpp" -#include "opencv2/imgproc.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/imgproc/imgproc.hpp" using namespace cv; using namespace std; bool AbstractionLayer_SURFFeatures::PreProcessing(coor mySize, const vector* partArray) { + cout << "Abstraction 4 (Features) Preprocessing... " << flush; InitialiseConstraintMatrixSize(mySize.col, mySize.row); if(!PreProcessingFullImg(mySize)) return false; if(!PreProcessingPieces(mySize, partArray)) return false; @@ -32,7 +33,7 @@ bool AbstractionLayer_SURFFeatures::EvaluateQuality (coor constraintCoordinate, { float diff = abs(m_constraintMatrix[constraintCoordinate.row][constraintCoordinate.col].m_numberOfFeaturesDetected - qVector[i].second->m_a4.m_numberOfFeaturesDetected); qVector[i].first = 1 - diff; - //cout << fixed << qVector[i].first << " "; + //cout << fixed << qVector[i].first << endl; } return true; @@ -42,6 +43,7 @@ bool AbstractionLayer_SURFFeatures::SetConstraintOnPosition(const coor constrain { //TODO: Benötigen wir nicht unbedint. //TODO: Hier erhalten wir vom Dispatcher welches Teil an welche Position gesetzt wird und wir könnten hier die Features des Bilds in die m_constraintMatrix speichern + return true; } bool AbstractionLayer_SURFFeatures::RemoveConstraintOnPosition(const coor constraintCoordinate) @@ -49,6 +51,7 @@ bool AbstractionLayer_SURFFeatures::RemoveConstraintOnPosition(const coor constr //TODO: Wie auch beim SetConstraint sollte uns das hier nicht wirklich interessieren. //TODO: Außer wir setzen etwas in die Contraintmatrix. //TODO: Dann ruft uns der Dispatcher beim Backtrack hier auf und wir müssten das jeweilige PuzzlePart hier wieder rauslöschen. + return true; } bool AbstractionLayer_SURFFeatures::PreProcessingFullImg(coor mySize) @@ -56,26 +59,26 @@ bool AbstractionLayer_SURFFeatures::PreProcessingFullImg(coor mySize) std::vector< cv::Point2f > corners; // Variable to store corner-positions at // Load and resize image, so that number of parts in row and col fit in - cv::Mat image = cv::imread(PATH_FULL_PUZZLE, IMREAD_GRAYSCALE); + Mat image = imread(PATH_FULL_PUZZLE, IMREAD_GRAYSCALE); if (!image.data) { cerr << "Problem loading image of complete puzzle!" << endl; return false; } //cout << "PRE: " << image.cols << " x " << image.rows << endl; - cv::resize(image, image, Size(int(ceil(double(image.cols)/mySize.col)*mySize.col), int(ceil(double(image.rows)/mySize.row)*mySize.row))); + resize(image, image, Size(int(ceil(double(image.cols)/mySize.col)*mySize.col), int(ceil(double(image.rows)/mySize.row)*mySize.row))); //cout << "POST: " << image.cols << " x " << image.rows << endl; // PARAMETERS (for description see top of file) int maxCorners = 10000; double qualityLevel = 0.01; double minDistance = .5; - cv::Mat mask; + Mat mask; int blockSize = 3; bool useHarrisDetector = false; double k = 0.04; // Detect features - this is where the magic happens - cv::goodFeaturesToTrack( image, corners, maxCorners, qualityLevel, minDistance, mask, blockSize, useHarrisDetector, k ); + goodFeaturesToTrack( image, corners, maxCorners, qualityLevel, minDistance, mask, blockSize, useHarrisDetector, k ); // Empty the matrix for( int j = 0; j < mySize.row ; j++ ) @@ -138,7 +141,7 @@ bool AbstractionLayer_SURFFeatures::PreProcessingPieces(coor mySize, const vecto int maxCorners = 500; double qualityLevel = 0.05; double minDistance = .5; - cv::Mat mask; + Mat mask; int blockSize = 3; bool useHarrisDetector = false; double k = 0.04; @@ -148,13 +151,13 @@ bool AbstractionLayer_SURFFeatures::PreProcessingPieces(coor mySize, const vecto char name[100]; for (unsigned imgID = 0; imgID < mySize.col*mySize.row; imgID++) { - sprintf(name, PATH, imgID); - Mat src = cv::imread(name, IMREAD_GRAYSCALE); + sprintf(name, PATH1, imgID); + Mat src = imread(name, IMREAD_GRAYSCALE); if (!src.data) { cerr << "Problem loading image of puzzle piece!" << endl; return false; } else { - cv::goodFeaturesToTrack(src, corners, maxCorners, qualityLevel, minDistance, mask, blockSize, + goodFeaturesToTrack(src, corners, maxCorners, qualityLevel, minDistance, mask, blockSize, useHarrisDetector, k); if (corners.size() < minFeatures) minFeatures = corners.size(); if (corners.size() > maxFeatures) maxFeatures = corners.size(); @@ -173,8 +176,8 @@ bool AbstractionLayer_SURFFeatures::PreProcessingPieces(coor mySize, const vecto for( unsigned i = 0; i < mySize.col*mySize.row; i++ ) { partArray->at(i)->m_a4.m_numberOfFeaturesDetected = (partArray->at(i)->m_a4.m_numberOfFeaturesDetected - minFeatures) / (maxFeatures - minFeatures); - cout << fixed << partArray->at(i)->m_a4.m_numberOfFeaturesDetected << endl; + //cout << fixed << partArray->at(i)->m_a4.m_numberOfFeaturesDetected << endl; } - cout << endl; + //cout << endl; return true; } \ No newline at end of file diff --git a/Source/functions/AbstractionLayers/Layer_SURFFeatures/AbstractionLayer_SURFFeatures.h b/Source/functions/AbstractionLayers/Layer_SURFFeatures/AbstractionLayer_SURFFeatures.h index 1a1eae8..21ed9e0 100644 --- a/Source/functions/AbstractionLayers/Layer_SURFFeatures/AbstractionLayer_SURFFeatures.h +++ b/Source/functions/AbstractionLayers/Layer_SURFFeatures/AbstractionLayer_SURFFeatures.h @@ -12,11 +12,11 @@ #endif #ifdef _WIN32 //TODO: Code duplicate from AbstractionLayer_1.h -#define PATH "..\\..\\..\\pieces\\%04d.jpg" +#define PATH1 "..\\..\\..\\pieces\\%04d.jpg" #elif defined __unix__ -#define PATH "..//..//..//pieces//%04d.jpg" +#define PATH1 "..//..//..//pieces//%04d.jpg" #elif defined __APPLE__ - #define PATH "..//..//..//pieces//%04d.jpg" + #define PATH1 "..//..//..//pieces//%04d.jpg" #endif diff --git a/Source/functions/solve/structure.cpp b/Source/functions/solve/structure.cpp index 1d999e1..fad49ba 100755 --- a/Source/functions/solve/structure.cpp +++ b/Source/functions/solve/structure.cpp @@ -84,7 +84,7 @@ void solve(vector& log,Puzzle& puzzleMat) puzzleMat.a3.EvaluateQuality(log.back().myCoor,log.back().PieceCollector); break; case 4://SURFFeature - puzzleMat.a3.EvaluateQuality(log.back().myCoor,log.back().PieceCollector); + puzzleMat.a4.EvaluateQuality(log.back().myCoor,log.back().PieceCollector); break; case -1://random cout << endl; diff --git a/Source/header/solve.h b/Source/header/solve.h index 2ae1737..2e3f509 100755 --- a/Source/header/solve.h +++ b/Source/header/solve.h @@ -44,9 +44,9 @@ public: bool PreProcessing() { createBox(); createp_box(); - /*if(!dp.PreProcessing({cols,rows}, nullptr)) return false; + if(!dp.PreProcessing({cols,rows}, nullptr)) return false; if(!a1.PreProcessing({cols,rows}, &p_myBox)) return false; - if(!a3.PreProcessing({cols,rows}, &p_myBox)) return false;*/ + if(!a3.PreProcessing({cols,rows}, &p_myBox)) return false; if(!a4.PreProcessing({cols,rows}, &p_myBox)) return false; return true;