From e475edd24343821306fb92540c1a81b5a594ed9e Mon Sep 17 00:00:00 2001 From: kradchen Date: Thu, 19 Dec 2024 10:39:49 +0800 Subject: [PATCH] feat: Remove redudent TransDetection lib --- CMakeLists.txt | 7 +- .../detection/detection.cpp | 207 +++++++++--------- .../detection/detection.h | 20 +- test/Detection_Test.cpp | 39 ---- 4 files changed, 120 insertions(+), 153 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7688154..e18a2d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,8 +33,6 @@ target_link_libraries(UR PUBLIC dcmdata) target_link_libraries(UR PUBLIC matio) target_link_libraries(UR PUBLIC Parser) -target_link_libraries(UR PUBLIC URDepends::TransDetection) -# target_link_libraries(UR PUBLIC URDepends::eikonal) target_link_libraries(UR PUBLIC URDepends::TVALGPU) target_link_libraries(UR PUBLIC URDepends::SaftTofi) target_link_libraries(UR PUBLIC dcmdata) @@ -75,11 +73,10 @@ target_link_libraries(UR_Test PUBLIC dcmdata) target_link_libraries(UR_Test PUBLIC matio) # target_link_libraries(UR_Test PUBLIC ${Parser_Libraries}) target_link_libraries(UR_Test PUBLIC Parser) -target_link_libraries(UR_Test PUBLIC URDepends::TransDetection) -# target_link_libraries(UR_Test PUBLIC URDepends::eikonal) + target_link_libraries(UR_Test PUBLIC URDepends::TVALGPU) target_link_libraries(UR_Test PUBLIC URDepends::SaftTofi) -# target_link_libraries(UR_Test PUBLIC URDepends::SaftATT) + target_include_directories(UR_Test PRIVATE ./src /usr/local/cuda/include) set_target_properties(UR_Test PROPERTIES CUDA_SEPARABLE_COMPILATION ON) diff --git a/src/transmissionReconstruction/detection/detection.cpp b/src/transmissionReconstruction/detection/detection.cpp index dedba67..5261e3a 100644 --- a/src/transmissionReconstruction/detection/detection.cpp +++ b/src/transmissionReconstruction/detection/detection.cpp @@ -12,7 +12,10 @@ #include "common/getMeasurementMetaData.h" #include "config/config.h" -#include "calculateBankDetectAndHilbertTransformation.hpp" + +//remove detectTofAndAttMex function, use detectTofAndAtt function instead of +//保留函数和函数申明备忘,以防以后再次使用,以下头文件从动态库中映入了detectTofAndAttMex的核心函数 +// #include "calculateBankDetectAndHilbertTransformation.hpp" using namespace Aurora; namespace Recon { @@ -318,101 +321,103 @@ namespace Recon { return result; } - DetectResult detectTofAndAttMex( - const Aurora::Matrix &AscanBlock, const Aurora::Matrix &AscanRefBlock, - const Aurora::Matrix &distBlock, const Aurora::Matrix &distRefBlock, - const Aurora::Matrix &sosWaterBlock, - const Aurora::Matrix &sosWaterRefBlock, - int resampleFactor,int nthreads, float expectedSOSWater, - int useTimeWindowing, int aScanReconstructionFrequency,int detectionWindowATT, - float offsetElectronic, int detectionWindowSOS, float minSpeedOfSound, - float maxSpeedOfSound, bool gaussWindow) - { + //remove detectTofAndAttMex function, use detectTofAndAtt function instead of + //保留函数和函数申明备忘,以防以后再次使用 + // DetectResult detectTofAndAttMex( + // const Aurora::Matrix &AscanBlock, const Aurora::Matrix &AscanRefBlock, + // const Aurora::Matrix &distBlock, const Aurora::Matrix &distRefBlock, + // const Aurora::Matrix &sosWaterBlock, + // const Aurora::Matrix &sosWaterRefBlock, + // int resampleFactor,int nthreads, float expectedSOSWater, + // int useTimeWindowing, int aScanReconstructionFrequency,int detectionWindowATT, + // float offsetElectronic, int detectionWindowSOS, float minSpeedOfSound, + // float maxSpeedOfSound, bool gaussWindow) + // { - auto sizeAscan = size(AscanBlock); + // auto sizeAscan = size(AscanBlock); - auto sampleRate = aScanReconstructionFrequency; - float offsetElectronicSamples = offsetElectronic * sampleRate; - Matrix diffStartSearch; - TimeWindowResult timeResult1; - timeResult1.AscanBlockProcessed = AscanBlock; - TimeWindowResult timeResult2; - timeResult2.AscanBlockProcessed = AscanRefBlock; - if (useTimeWindowing == 1) { - timeResult1 = applyTimeWindowing( - AscanBlock, sampleRate, distBlock, sosWaterBlock, - expectedSOSWater, offsetElectronicSamples, detectionWindowSOS, - minSpeedOfSound, maxSpeedOfSound, gaussWindow); - timeResult2 = applyTimeWindowing( - AscanRefBlock, sampleRate, distRefBlock, sosWaterRefBlock, - expectedSOSWater, offsetElectronicSamples, detectionWindowSOS, - minSpeedOfSound, maxSpeedOfSound, gaussWindow); + // auto sampleRate = aScanReconstructionFrequency; + // float offsetElectronicSamples = offsetElectronic * sampleRate; + // Matrix diffStartSearch; + // TimeWindowResult timeResult1; + // timeResult1.AscanBlockProcessed = AscanBlock; + // TimeWindowResult timeResult2; + // timeResult2.AscanBlockProcessed = AscanRefBlock; + // if (useTimeWindowing == 1) { + // timeResult1 = applyTimeWindowing( + // AscanBlock, sampleRate, distBlock, sosWaterBlock, + // expectedSOSWater, offsetElectronicSamples, detectionWindowSOS, + // minSpeedOfSound, maxSpeedOfSound, gaussWindow); + // timeResult2 = applyTimeWindowing( + // AscanRefBlock, sampleRate, distRefBlock, sosWaterRefBlock, + // expectedSOSWater, offsetElectronicSamples, detectionWindowSOS, + // minSpeedOfSound, maxSpeedOfSound, gaussWindow); - diffStartSearch = timeResult1.startSearch - timeResult2.startSearch; - } - auto _AscanBlock = timeResult1.AscanBlockProcessed; - auto _AscanRefBlock = timeResult2.AscanBlockProcessed; + // diffStartSearch = timeResult1.startSearch - timeResult2.startSearch; + // } + // auto _AscanBlock = timeResult1.AscanBlockProcessed; + // auto _AscanRefBlock = timeResult2.AscanBlockProcessed; - int M =std::min(AscanBlock.getDimSize(0),AscanRefBlock.getDimSize(0)); + // int M =std::min(AscanBlock.getDimSize(0),AscanRefBlock.getDimSize(0)); - Matrix resDetect; - float * resEnvelopeD = nullptr; - float * resEnvelopeRefD = nullptr; + // Matrix resDetect; + // float * resEnvelopeD = nullptr; + // float * resEnvelopeRefD = nullptr; - size_t N = _AscanBlock.getDimSize(1); - size_t totalSize = N*M; - Matrix _AscanBlock_trim = _AscanBlock.getDimSize(0)!=M?_AscanBlock.block(0, 0, M-1):_AscanBlock; - Matrix _AscanRefBlock_trim = _AscanRefBlock.getDimSize(0)!=M?_AscanRefBlock.block(0, 0, M-1):_AscanRefBlock; - resDetect = Aurora::zeros(1,N); - resEnvelopeD = Aurora::malloc(totalSize); - resEnvelopeRefD = Aurora::malloc(totalSize); - calculateBankDetectAndHilbertTransformation( - _AscanBlock_trim.getData(), _AscanRefBlock_trim.getData(), N, M, resampleFactor, nthreads, - resDetect.getData(), resEnvelopeD, resEnvelopeRefD); - auto resEnvelope =Matrix::New(resEnvelopeD,M,N); - auto resEnvelopeRef =Matrix::New(resEnvelopeRefD,M,N); - //floor(size(AscanBlock, 1)*inits.resampleFactor / 2 - 1), - int end_1 = std::floor(_AscanBlock.getDimSize(0)*resampleFactor/2-1); - //-ceil(size(AscanBlock, 1)*inits.resampleFactor / 2) - int begin_2 = -std::ceil(_AscanBlock.getDimSize(0)*resampleFactor/2); - int *lags2 = new int[_AscanBlock.getDimSize(0)]; - for (size_t i = 0; i <= end_1; i++) - { - lags2[i] = i; - lags2[i+end_1+1] = begin_2+i; - } - auto resDetectLags = zeros(1,_AscanBlock.getDimSize(1)); - for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++) - { - resDetectLags[i] = lags2[(int)resDetect[i]]; - } - delete [] lags2; - resDetectLags =resDetectLags/resampleFactor; - if (useTimeWindowing == 1) { - resDetectLags = resDetectLags - diffStartSearch; - } - auto tofRel = (resDetectLags / sampleRate); - auto tofAbs = tofRel + (distBlock / sosWaterBlock); - auto sosValue = distBlock / tofAbs; - auto tof2 = (distRefBlock / sosWaterRefBlock) * sampleRate + offsetElectronicSamples; - auto startPos = zeros(_AscanBlock.getDimSize(1), 1); - auto endPos = zeros(_AscanBlock.getDimSize(1), 1); - auto startPosRef = zeros(_AscanBlock.getDimSize(1), 1); - auto endPosRef = zeros(_AscanBlock.getDimSize(1), 1); - #pragma omp parallel for - for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++) - { - startPos[i] = std::floor(std::max(tofAbs[i]*sampleRate+offsetElectronicSamples,(float)1.0)); - endPos[i] = std::ceil(std::min(sizeAscan[0], tofAbs[i]*sampleRate+offsetElectronicSamples+detectionWindowATT)); - startPosRef[i] = std::floor(std::max( tof2[i],(float)1.0)); - endPosRef[i] = std::ceil(std::min(sizeAscan[0], tof2[i]+detectionWindowATT)); - } - DetectResult result; - result.att = calculateAttenuation(resEnvelope,startPos,endPos,resEnvelopeRef,startPosRef,endPosRef); - result.tof = tofRel; - result.sosValue = sosValue; - return result; - } + // size_t N = _AscanBlock.getDimSize(1); + // size_t totalSize = N*M; + // Matrix _AscanBlock_trim = _AscanBlock.getDimSize(0)!=M?_AscanBlock.block(0, 0, M-1):_AscanBlock; + // Matrix _AscanRefBlock_trim = _AscanRefBlock.getDimSize(0)!=M?_AscanRefBlock.block(0, 0, M-1):_AscanRefBlock; + // resDetect = Aurora::zeros(1,N); + // resEnvelopeD = Aurora::malloc(totalSize); + // resEnvelopeRefD = Aurora::malloc(totalSize); + // calculateBankDetectAndHilbertTransformation( + // _AscanBlock_trim.getData(), _AscanRefBlock_trim.getData(), N, M, resampleFactor, nthreads, + // resDetect.getData(), resEnvelopeD, resEnvelopeRefD); + // auto resEnvelope =Matrix::New(resEnvelopeD,M,N); + // auto resEnvelopeRef =Matrix::New(resEnvelopeRefD,M,N); + // //floor(size(AscanBlock, 1)*inits.resampleFactor / 2 - 1), + // int end_1 = std::floor(_AscanBlock.getDimSize(0)*resampleFactor/2-1); + // //-ceil(size(AscanBlock, 1)*inits.resampleFactor / 2) + // int begin_2 = -std::ceil(_AscanBlock.getDimSize(0)*resampleFactor/2); + // int *lags2 = new int[_AscanBlock.getDimSize(0)]; + // for (size_t i = 0; i <= end_1; i++) + // { + // lags2[i] = i; + // lags2[i+end_1+1] = begin_2+i; + // } + // auto resDetectLags = zeros(1,_AscanBlock.getDimSize(1)); + // for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++) + // { + // resDetectLags[i] = lags2[(int)resDetect[i]]; + // } + // delete [] lags2; + // resDetectLags =resDetectLags/resampleFactor; + // if (useTimeWindowing == 1) { + // resDetectLags = resDetectLags - diffStartSearch; + // } + // auto tofRel = (resDetectLags / sampleRate); + // auto tofAbs = tofRel + (distBlock / sosWaterBlock); + // auto sosValue = distBlock / tofAbs; + // auto tof2 = (distRefBlock / sosWaterRefBlock) * sampleRate + offsetElectronicSamples; + // auto startPos = zeros(_AscanBlock.getDimSize(1), 1); + // auto endPos = zeros(_AscanBlock.getDimSize(1), 1); + // auto startPosRef = zeros(_AscanBlock.getDimSize(1), 1); + // auto endPosRef = zeros(_AscanBlock.getDimSize(1), 1); + // #pragma omp parallel for + // for (size_t i = 0; i < _AscanBlock.getDimSize(1); i++) + // { + // startPos[i] = std::floor(std::max(tofAbs[i]*sampleRate+offsetElectronicSamples,(float)1.0)); + // endPos[i] = std::ceil(std::min(sizeAscan[0], tofAbs[i]*sampleRate+offsetElectronicSamples+detectionWindowATT)); + // startPosRef[i] = std::floor(std::max( tof2[i],(float)1.0)); + // endPosRef[i] = std::ceil(std::min(sizeAscan[0], tof2[i]+detectionWindowATT)); + // } + // DetectResult result; + // result.att = calculateAttenuation(resEnvelope,startPos,endPos,resEnvelopeRef,startPosRef,endPosRef); + // result.tof = tofRel; + // result.sosValue = sosValue; + // return result; + // } DetectResult transmissionDetection(const Aurora::Matrix &AscanBlock, const Aurora::Matrix &AscanRefBlock, @@ -424,16 +429,18 @@ namespace Recon { auto _sosWaterBlock = temperatureToSoundSpeed(sosWaterBlock, "marczak"); auto _sosWaterRefBlock = temperatureToSoundSpeed(sosWaterRefBlock, "marczak"); switch (Recon::transParams::version) { - case 1: { - return detectTofAndAttMex( - AscanBlock, AscanRefBlock, distBlock, distRefBlock, - _sosWaterBlock, _sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads, - expectedSOSWater, Recon::transParams::useTimeWindowing, - Recon::transParams::aScanReconstructionFrequency, Recon::transParams::detectionWindowATT, - Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound, - Recon::transParams::maxSpeedOfSound, Recon::transParams::gaussWindow); - } - case 2: + //remove detectTofAndAttMex function, use detectTofAndAtt function instead of + //保留函数和函数申明备忘,以防以后再次使用 + // case 1: { + // return detectTofAndAttMex( + // AscanBlock, AscanRefBlock, distBlock, distRefBlock, + // _sosWaterBlock, _sosWaterRefBlock, Recon::transParams::resampleFactor, Recon::transParams::nThreads, + // expectedSOSWater, Recon::transParams::useTimeWindowing, + // Recon::transParams::aScanReconstructionFrequency, Recon::transParams::detectionWindowATT, + // Recon::transParams::offsetElectronic, Recon::transParams::detectionWindowSOS, Recon::transParams::minSpeedOfSound, + // Recon::transParams::maxSpeedOfSound, Recon::transParams::gaussWindow); + // } + // case 2: default: return detectTofAndAtt( AscanBlock, AscanRefBlock, distBlock, distRefBlock, diff --git a/src/transmissionReconstruction/detection/detection.h b/src/transmissionReconstruction/detection/detection.h index b30a360..6fd5b2e 100644 --- a/src/transmissionReconstruction/detection/detection.h +++ b/src/transmissionReconstruction/detection/detection.h @@ -63,15 +63,17 @@ detectTofAndAtt( int detectionWindowATT, float offsetElectronic, int detectionWindowSOS, float minSpeedOfSound, float maxSpeedOfSound, bool gaussWindow); -DetectResult -detectTofAndAttMex( - const Aurora::Matrix &AscanBlock, const Aurora::Matrix &AscanRefBlock, - const Aurora::Matrix &distBlock, const Aurora::Matrix &distBlockRef, - const Aurora::Matrix &sosWaterBlock, const Aurora::Matrix &sosWaterRefBlock, - int resampleFactor, int nthreads, float expectedSOSWater, - int useTimeWindowing, int aScanReconstructionFrequency, - int detectionWindowATT, float offsetElectronic, int detectionWindowSOS, - float minSpeedOfSound, float maxSpeedOfSound, bool gaussWindow); +//remove detectTofAndAttMex function, use detectTofAndAtt function instead of +//保留函数和函数申明备忘,以防以后再次使用 +// DetectResult +// detectTofAndAttMex( +// const Aurora::Matrix &AscanBlock, const Aurora::Matrix &AscanRefBlock, +// const Aurora::Matrix &distBlock, const Aurora::Matrix &distBlockRef, +// const Aurora::Matrix &sosWaterBlock, const Aurora::Matrix &sosWaterRefBlock, +// int resampleFactor, int nthreads, float expectedSOSWater, +// int useTimeWindowing, int aScanReconstructionFrequency, +// int detectionWindowATT, float offsetElectronic, int detectionWindowSOS, +// float minSpeedOfSound, float maxSpeedOfSound, bool gaussWindow); DetectResult transmissionDetection( diff --git a/test/Detection_Test.cpp b/test/Detection_Test.cpp index 2218a2f..e6246bf 100644 --- a/test/Detection_Test.cpp +++ b/test/Detection_Test.cpp @@ -38,45 +38,6 @@ protected: } }; -TEST_F(Detection_Test, detectTofAndAttMex) { - - MatlabReader m("/home/sun/testData/transmissionDetection.mat"); - - auto AscanBlock = m.read("AscanBlock"); - auto AscanRefBlock = m.read("AscanRefBlock"); - auto distBlock = m.read("dists"); - auto distBlockRef = m.read("distRefBlock"); - auto sosWaterBlock = Recon::temperatureToSoundSpeed(m.read("waterTempBlock"),"marczak"); - auto sosWaterRefBlock = Recon::temperatureToSoundSpeed(m.read("waterTempRefBlock"),"marczak"); - float expectedSOSWater = 1.512677498767504e+03; - - auto result = Recon::detectTofAndAttMex( - AscanBlock, AscanRefBlock, distBlock, distBlockRef, sosWaterBlock, - sosWaterRefBlock, Recon::transParams::resampleFactor, - Recon::transParams::nThreads, expectedSOSWater, - Recon::transParams::useTimeWindowing, - Recon::transParams::aScanReconstructionFrequency, - Recon::transParams::detectionWindowATT,Recon::transParams::offsetElectronic, - Recon::transParams::detectionWindowSOS, - Recon::transParams::minSpeedOfSound, - Recon::transParams::maxSpeedOfSound, Recon::transParams::gaussWindow); - - MatlabReader m3("/home/krad/TestData/sosResult.mat"); - auto sosvalue = m3.read("sosValue"); - auto tof = m3.read("tofRel"); - ASSERT_EQ(sosvalue.getDataSize(), result.tof.getDataSize()); - ASSERT_EQ(sosvalue.getDataSize(), result.sosValue.getDataSize()); - ASSERT_EQ(sosvalue.getDataSize(), result.att.getDataSize()); - #pragma omp parallel for - for (size_t i = 0; i < result.tof.getDataSize(); i++) - { - EXPECT_DOUBLE_AE(tof[i],result.tof[i])<<",index:"<