#include "preprocessTransmissionReconstructionForReflection.h" #include "Function1D.h" #include "Function3D.h" #include "Function2D.h" #include "Matrix.h" #include "reflectionReconstruction/preprocessData/resampleTransmissionVolume.h" #include "src/config/config.h" #include #include #include using namespace Aurora; using namespace Recon; PreprocessReflectionData Recon::preprocessTransmissionReconstructionForReflection(const Aurora::Matrix& aSOSMap, const Aurora::Matrix& aATTMap, const Aurora::Matrix& aDdims, const GeometryInfo& aGeometryInfo, const TempInfo& aTemp) { PreprocessReflectionData result; int soundSpeedCorrection = reflectParams::soundSpeedCorrection; int attenuationCorrection = reflectParams::attenuationCorrection; Matrix minPos; Matrix maxPos; if(!aDdims.isNull()) { minPos = Matrix::fromRawData(new double[3], 1, 3); size_t maxPosSize = aDdims.getDataSize() - 3; maxPos = Matrix::fromRawData(new double[maxPosSize], 1, maxPosSize); std::copy(aDdims.getData(), aDdims.getData() + 3, minPos.getData()); std::copy(aDdims.getData() + 3, aDdims.getData() + 3 + maxPosSize, maxPos.getData()); } if(soundSpeedCorrection == 1) { auto sosResampleVolume = resampleTransmissionVolume(aSOSMap, maxPos, minPos, aGeometryInfo); result.transRecos.deltaTransMap = sosResampleVolume.deltaTransMap; result.transRecos.beginTransMap = sosResampleVolume.beginTransMap; // TemperatureModel4D暂无 todo // try % use temp model 4D // speedmapx=transRecos.begin_TransMap(1):transRecos.delta_TransMap:(size(transRecos.SpeedMap3D,1)-1)*transRecos.delta_TransMap + transRecos.begin_TransMap(1); // speedmapy=transRecos.begin_TransMap(2):transRecos.delta_TransMap:(size(transRecos.SpeedMap3D,2)-1)*transRecos.delta_TransMap + transRecos.begin_TransMap(2); // speedmapz=transRecos.begin_TransMap(3):transRecos.delta_TransMap:(size(transRecos.SpeedMap3D,3)-1)*transRecos.delta_TransMap + transRecos.begin_TransMap(3); // tidx=abs(transRecos.SpeedMap3D(:))<1; % voxels to fill // [ix,iy,iz]=ind2sub(size(transRecos.SpeedMap3D),find(tidx)); // %fill with model // if(~isempty(ix) && ~isempty(iy) && ~isempty(iz)) // transRecos.SpeedMap3D(tidx) = temperatureToSoundSpeed(polyvaln(temp.TemperatureModel4D.p,[speedmapx(ix)',speedmapy(iy)', speedmapz(iz)', zeros(size(ix))])); %surf(xg,yg,zg,reshape(tg,size(xg))) // end // catch Matrix sppedMap3d = sosResampleVolume.transMap; for(size_t i=0; i 0 && attenuationCorrection == 0) { result.saftMode = 1; result.transRecos.attenuationMap3D = zeros(result.transRecos.speedMap3D.getDimSize(0), result.transRecos.speedMap3D.getDimSize(1), result.transRecos.speedMap3D.getDimSize(2)); } else if (soundSpeedCorrection > 0 && attenuationCorrection > 0) { if (result.transRecos.attenuationMap3D.getDimSize(0) != result.transRecos.speedMap3D.getDimSize(0) || result.transRecos.attenuationMap3D.getDimSize(1) != result.transRecos.speedMap3D.getDimSize(1) || result.transRecos.attenuationMap3D.getDimSize(2) != result.transRecos.speedMap3D.getDimSize(2)) { std::cout<<"Size of SpeedMap3D ~= Size of AttenuationMap3D."< 0) { std::cout<<"Only attenuation correction not allowed."<