diff --git a/src/transmissionReconstruction/saveTransmissionImagesInReflCoords.cpp b/src/transmissionReconstruction/saveTransmissionImagesInReflCoords.cpp new file mode 100644 index 0000000..1590781 --- /dev/null +++ b/src/transmissionReconstruction/saveTransmissionImagesInReflCoords.cpp @@ -0,0 +1,56 @@ +#include "saveTransmissionImagesInReflCoords.h" + +#include "Function1D.h" +#include "Function2D.h" +#include "Function3D.cuh" + +#include "common/meshgrid.h" +#include "config/config.h" + +using namespace Aurora; +using namespace Recon; + +Aurora::Matrix Recon::saveTransmissionImagesInReflCoords(const Aurora::Matrix& aTransVol, const Aurora::Matrix& aMinPos, const Aurora::Matrix& aMaxPos) +{ + float resSOSX = (aMaxPos[0] - aMinPos[0]) / (aTransVol.getDimSize(0) - 1); + float resSOSY = (aMaxPos[1] - aMinPos[1]) / (aTransVol.getDimSize(1) - 1); + float resSOSZ = (aMaxPos[2] - aMinPos[2]) / (aTransVol.getDimSize(2) - 1); + + Matrix XREF = createVectorMatrix(reflectParams::imageStartpoint[0] + 0.5*reflectParams::imageResolution, reflectParams::imageResolution + , reflectParams::imageEndpoint[0] + 0.5*reflectParams::imageResolution); + Matrix YREF = createVectorMatrix(reflectParams::imageStartpoint[1] + 0.5*reflectParams::imageResolution, reflectParams::imageResolution + , reflectParams::imageEndpoint[1] + 0.5*reflectParams::imageResolution); + Matrix ZREF = createVectorMatrix(reflectParams::imageStartpoint[2] + 0.5*reflectParams::imageResolution, reflectParams::imageResolution + , reflectParams::imageEndpoint[2] + 0.5*reflectParams::imageResolution); + + MeshgridResult meshgridResult = meshgrid(YREF, XREF, ZREF); + XREF = meshgridResult.xx; + YREF = meshgridResult.yy; + ZREF = meshgridResult.zz; + + float startX = aMinPos[0] + 0.5*resSOSX; + float dx = resSOSX; + float endX = aMaxPos[0] + 0.5*resSOSX; + float startY = aMinPos[1] + 0.5*resSOSY; + float dy = resSOSY; + float endY = aMaxPos[1] + 0.5*resSOSY; + float startZ = aMinPos[2] + 0.5*resSOSZ; + float dz = resSOSZ; + float endZ = aMaxPos[2] + 0.5*resSOSZ; + + size_t dataSize = aTransVol.getDataSize(); + auto newTransVol = Aurora::Matrix::fromRawData(new float[dataSize], aTransVol.getDimSize(1), aTransVol.getDimSize(0), aTransVol.getDimSize(2)); + size_t sliceDataSize = aTransVol.getDimSize(0) * aTransVol.getDimSize(1); + for(int i=0;i