https://github.com/ElsevierSoftwareX/SOFTX_2019_219
Revision 4f10946b10bb8caa05af252a9017b2a3e7b4cffa authored by Konrad Werys on 08 August 2018, 19:12:18 UTC, committed by Konrad Werys on 08 August 2018, 19:12:18 UTC
1 parent 0b3c382
Raw File
Tip revision: 4f10946b10bb8caa05af252a9017b2a3e7b4cffa authored by Konrad Werys on 08 August 2018, 19:12:18 UTC
working on image calculation.
Tip revision: 4f10946
OxImageCalculator_test.cpp
/*!
 * \file OxImageCalculator_test.cpp
 * \author Konrad Werys
 * \date 2018/08/07
 */

#include "gtest/gtest.h"
#include "OxTestImage.h"

#include "OxFunctionsT1Basic.h"
#include "OxFitterAmoebaVnl.h"
#include "OxSignCalculatorRealImag.h"
#include "OxCalculatorT1Molli.h"

#include "OxImageCalculator.h"

TEST(OxImageCalculator, calculate_no_multithread) {

    typedef double TYPE;

    std::vector< std::string > filePaths;
    filePaths.push_back("testData/blood.yaml");
    filePaths.push_back("testData/myocardium.yaml");

    int nCols = 2;
    int nRows = 1;
    Ox::TestImage<TYPE> *testImage = new Ox::TestImage<TYPE>(nCols, nRows, filePaths);

//    int nSamples = testImage->getNSamples();
//
//    std::cout << std::endl;
//    std::cout << std::endl;
//    for (int i = 0; i < nRows*nCols*nSamples; ++i){
//        std::cout << " " << testImage->getImageMag()[i];
//    }
//    std::cout << std::endl;
//
//
//    std::cout << std::endl;
//    std::cout << std::endl;
//    for (int iSample = 0; iSample < nSamples; ++iSample) {
//        for (int iRow = 0; iRow < nRows; ++iRow) {
//            for (int iCol = 0; iCol < nCols; ++iCol) {
//                int i = iSample * (nCols * nRows) + iRow * nCols + iCol;
//                std::cout << " " << testImage->getImageMag()[i];
//            }
//            std::cout << std::endl;
//        }
//        std::cout << std::endl;
//        std::cout << std::endl;
//    }

    // init the necessary objects
    Ox::FunctionsT1Basic<TYPE> functionsObject;
    Ox::FitterAmoebaVnl<TYPE> fitterAmoebaVnl;
    Ox::SignCalculator<TYPE> signCalculator;
    Ox::StartPointCalculator<TYPE> startPointCalculator;
    Ox::CalculatorT1Molli<TYPE> calculatorT1Molli;

    // configure
    calculatorT1Molli.setFunctionsT1(&functionsObject);
    calculatorT1Molli.setFitter(&fitterAmoebaVnl);
    calculatorT1Molli.setSignCalculator(&signCalculator);
    calculatorT1Molli.setStartPointCalculator(&startPointCalculator);

    // image calculator
    Ox::ImageCalculator<TYPE> imageCalculator;
    imageCalculator.setCalculatorT1(&calculatorT1Molli);
    imageCalculator.setInvTimes(testImage->getInvTimesPtr());
    imageCalculator.setImageMag(testImage->getImageMagPtr());
    imageCalculator.setImagePha(testImage->getImagePhaPtr());
    imageCalculator.setNCols(nCols);
    imageCalculator.setNRows(nRows);
    imageCalculator.setNSamples(testImage->getNSamples());
    imageCalculator.setUseThreads(false);

    // alloc results
    TYPE *imageResults = new TYPE[nCols*nRows*3];
    imageCalculator.setImageResults(imageResults);

    // calculate
    imageCalculator.calculate();

//    int nDims = 3;
//    std::cout << std::endl;
//    std::cout << std::endl;
//    for (int iDim = 0; iDim < nDims; ++iDim) {
//        for (int iRow = 0; iRow < nRows; ++iRow) {
//            for (int iCol = 0; iCol < nCols; ++iCol) {
//                int i = iDim * (nCols * nRows) + iRow * nCols + iCol;
//                std::cout << " " << imageCalculator.getImageResults()[i];
//            }
//            std::cout << std::endl;
//        }
//        std::cout << std::endl;
//        std::cout << std::endl;
//    }

    TYPE *groundTruthResults = testImage->getImageResultsMolliPtr();
    std::vector<TYPE> groundTruthResultsVec (groundTruthResults, groundTruthResults + nCols*nRows*3 );
    TYPE *calculaterResults = imageCalculator.getImageResults();
    std::vector<TYPE> calculaterResultsVec (calculaterResults, calculaterResults + nCols*nRows*3 );

    for (int i = 0; i < nCols*nRows*3; ++i) {
        EXPECT_NEAR(groundTruthResultsVec[i], calculaterResultsVec[i], 1e-2);
    }

    delete testImage;
}
back to top