Add removeDataFromArrays.

Fix dataFilter to use transparams.
This commit is contained in:
sunwen
2023-05-25 16:19:08 +08:00
parent 5bd7a15238
commit 9837c425d1
8 changed files with 84 additions and 21 deletions

View File

@@ -0,0 +1,46 @@
#include "removeDataFromArrays.h"
#include "Function.h"
#include "Function1D.h"
#include "Function2D.h"
#include "Matrix.h"
#include <cstddef>
#include <vector>
using namespace Recon;
using namespace Aurora;
Aurora::Matrix Recon::removeDataFromArrays(const Aurora::Matrix& aOutPutMatrix, const Aurora::Matrix& aRemoveList)
{
// Matrix result = aOutPutMatrix;
// int minusNum = 0;
// for(int i=0; i<aRemoveList.getDataSize(); ++i)
// {
// if(aRemoveList[i] == 0)
// {
// result = deleteColumn(result, i - minusNum);
// ++minusNum;
// }
// }
// return result;
size_t columnSize = sum(aRemoveList, FunctionDirection::All)[0];
double* resultData = Aurora::malloc(columnSize * aOutPutMatrix.getDimSize(0));
Matrix result = Matrix::New(resultData, aOutPutMatrix.getDimSize(0), columnSize);
std::vector<std::pair<int,int>> copyList;
size_t length = 0;
for(size_t i=0; i<aRemoveList.getDataSize(); ++i)
{
if(aRemoveList[i] == 1)
{
++length;
}
if(aRemoveList[i] == 0 && length != 0)
{
copyList.push_back({});
length = 0;
}
}
}

View File

@@ -0,0 +1,11 @@
#ifndef REMOVEDATAFROMARRAYS_H
#define REMOVEDATAFROMARRAYS_H
#include "Matrix.h"
namespace Recon
{
Aurora::Matrix removeDataFromArrays(const Aurora::Matrix& aOutPutMatrix, const Aurora::Matrix& aRemoveList);
}
#endif

View File

@@ -3,21 +3,22 @@
#include "Function2D.h"
#include "Function3D.h"
#include "src/config/config.h"
#define PI 3.141592653589793238462
using namespace Aurora;
namespace Recon {
Matrix filterReflectionData(const Matrix &aVReceiverPositionBlock,
const Matrix &aVSenderPositionBlock,
const Matrix &aVSenderNormalBlock,
int aConstrictReflectionAngles,
double aAngleLowerLimit, double aAngleUpperLimit) {
int aConstrictReflectionAngles) {
auto reflectData = ones(1, aVReceiverPositionBlock.getDimSize(1));
if (aConstrictReflectionAngles == 1) {
auto positionDifs = aVReceiverPositionBlock - aVSenderPositionBlock;
auto inbetweenAngle = acos(dot(aVSenderNormalBlock, positionDifs) /
vecnorm(positionDifs, Norm2, 1));
auto flags = Aurora::auroraNot((inbetweenAngle < (PI * aAngleLowerLimit / 180)) +
(inbetweenAngle > (PI * aAngleUpperLimit / 180)));
auto flags = Aurora::auroraNot((inbetweenAngle < (PI * transParams::angleLowerLimit / 180)) +
(inbetweenAngle > (PI * transParams::angleUpperLimit / 180)));
reflectData = reflectData * flags;
}
return reflectData;

View File

@@ -6,9 +6,7 @@ namespace Recon {
Aurora::Matrix filterReflectionData(const Aurora::Matrix &aVReceiverPositionBlock,
const Aurora::Matrix &aVSenderPositionBlock,
const Aurora::Matrix &aVSenderNormalBlock,
int aConstrictReflectionAngles,
double aAngleLowerLimit,
double aAngleUpperLimit);
int aConstrictReflectionAngles);
}

View File

@@ -1,4 +1,5 @@
#include "dataFilter.h"
#include "src/config/config.h"
#include <cmath>
#include <cstddef>
@@ -79,18 +80,17 @@ namespace Recon {
return sosValues;
}
Aurora::Matrix filterTransmissionData(int aFilterSensitivity, const Aurora::Matrix &aVslBlock,
Aurora::Matrix filterTransmissionData(const Aurora::Matrix &aVslBlock,
const Aurora::Matrix &aVsnBlock, const Aurora::Matrix &aVrlBlock,
const Aurora::Matrix &aVrnBlock, std::vector<Aurora::Matrix> &aMSensData,
const Aurora::Matrix &aMSenderNormalBlock,
const Aurora::Matrix &aMReceiverNormalBlock,
double* params)
const Aurora::Matrix &aMReceiverNormalBlock)
{
switch (aFilterSensitivity) {
switch (transParams::filterSensitivity) {
case 1:
return filterTransmissionSensitivityMap(params[0], aVslBlock, aVsnBlock, aVrlBlock, aVrnBlock, aMSensData);
return filterTransmissionSensitivityMap(transParams::sensFilter, aVslBlock, aVsnBlock, aVrlBlock, aVrnBlock, aMSensData);
case 2:
return filterTransmissionAngle(params[0], params[1], aMSenderNormalBlock, aMReceiverNormalBlock);
return filterTransmissionAngle(transParams::angleLowerLimit, transParams::angleUpperLimit, aMSenderNormalBlock, aMReceiverNormalBlock);
}
std::cerr<<"FilterSensitivity value error!"<<std::endl;
return Aurora::Matrix();

View File

@@ -25,7 +25,6 @@ Aurora::Matrix checkTofDetections(Aurora::Matrix &aVTofValues,
/**
* filterTransmissionData
*
* @param aFilterSensitivity
* @param aVslBlock
* @param aVsnBlock
* @param aVrlBlock
@@ -33,17 +32,15 @@ Aurora::Matrix checkTofDetections(Aurora::Matrix &aVTofValues,
* @param aMSensData
* @param aMSenderNormalBlock
* @param aMReceiverNormalBlock
* @param params
* 如果aFilterSensitivity为1单个值sensFilter如果为2双值angleLowerLimit,
* angleUpperLimit
* @return Aurora::Matrix
*/
Aurora::Matrix filterTransmissionData(
int aFilterSensitivity, const Aurora::Matrix &aVslBlock,
Aurora::Matrix filterTransmissionData( const Aurora::Matrix &aVslBlock,
const Aurora::Matrix &aVsnBlock, const Aurora::Matrix &aVrlBlock,
const Aurora::Matrix &aVrnBlock, std::vector<Aurora::Matrix> &aMSensData,
const Aurora::Matrix &aMSenderNormalBlock,
const Aurora::Matrix &aMReceiverNormalBlock, double *params);
const Aurora::Matrix &aMReceiverNormalBlock);
Aurora::Matrix findDefectTransmissionData(const Aurora::Matrix &aVSNRList,double aSNRDifference);