feat: Add resample transmission image function.
This commit is contained in:
@@ -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<aTransVol.getDimSize(2);++i)
|
||||
{
|
||||
auto slice = transpose(aTransVol.block(2,i,i));
|
||||
auto startPoint = newTransVol.getData() + i * sliceDataSize;
|
||||
std::copy(slice.getData(),slice.getData() + sliceDataSize,startPoint);
|
||||
}
|
||||
|
||||
CudaMatrix result = interp3(startX, dx, endX, startY, dy, endY,
|
||||
startZ, dz, endZ, newTransVol.toDeviceMatrix(),
|
||||
XREF.toDeviceMatrix(),YREF.toDeviceMatrix(), ZREF.toDeviceMatrix(), aTransVol[0]);
|
||||
|
||||
return result.toHostMatrix();
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
#ifndef __SAVETRANSMISSIONIMAGEREFLCOORDS_H__
|
||||
#define __SAVETRANSMISSIONIMAGEREFLCOORDS_H__
|
||||
|
||||
#include "Matrix.h"
|
||||
|
||||
namespace Recon
|
||||
{
|
||||
Aurora::Matrix saveTransmissionImagesInReflCoords(const Aurora::Matrix& aTransVol, const Aurora::Matrix& aMinPos, const Aurora::Matrix& aMaxPos);
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user