63 lines
1.5 KiB
C++
63 lines
1.5 KiB
C++
|
|
#include "SG_baseDataType.h"
|
|||
|
|
#include "SG_baseAlgo_Export.h"
|
|||
|
|
#include <vector>
|
|||
|
|
|
|||
|
|
void wd_noiseFilter(
|
|||
|
|
std::vector< std::vector<SVzNL3DPosition>>& scanLines,
|
|||
|
|
const SSG_outlierFilterParam filterParam,
|
|||
|
|
int* errCode)
|
|||
|
|
{
|
|||
|
|
*errCode = 0;
|
|||
|
|
int lineNum = (int)scanLines.size();
|
|||
|
|
int nPointCnt = (int)scanLines[0].size();
|
|||
|
|
bool vldGrid = true;
|
|||
|
|
//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (int i = 0; i < lineNum; i++)
|
|||
|
|
{
|
|||
|
|
if (nPointCnt != (int)scanLines[i].size())
|
|||
|
|
vldGrid = false;
|
|||
|
|
wd_vectorDataRemoveOutlier_overwrite(
|
|||
|
|
scanLines[i],
|
|||
|
|
filterParam);
|
|||
|
|
}
|
|||
|
|
if (false == vldGrid)
|
|||
|
|
{
|
|||
|
|
*errCode = SG_ERR_3D_DATA_INVLD;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int hLineNum = nPointCnt; //Grid<69><64>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ߵĵ<DFB5><C4B5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ˮƽɨ<C6BD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
std::vector<std::vector<SVzNL3DPosition>> filterHLines;
|
|||
|
|
filterHLines.resize(hLineNum);
|
|||
|
|
for (int i = 0; i < hLineNum; i++)
|
|||
|
|
filterHLines[i].resize(lineNum);
|
|||
|
|
for (int line = 0; line < lineNum; line++)
|
|||
|
|
{
|
|||
|
|
for (int j = 0; j < hLineNum; j++)
|
|||
|
|
{
|
|||
|
|
filterHLines[j][line] = scanLines[line][j];
|
|||
|
|
filterHLines[j][line].pt3D.x = scanLines[line][j].pt3D.y;
|
|||
|
|
filterHLines[j][line].pt3D.y = scanLines[line][j].pt3D.x;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
for (int hLine = 0; hLine < hLineNum; hLine++)
|
|||
|
|
{
|
|||
|
|
//<2F>˲<EFBFBD><CBB2><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>쳣<EFBFBD><ECB3A3>
|
|||
|
|
std::vector<SVzNL3DPosition> filterData;
|
|||
|
|
std::vector<int> lineNoise;
|
|||
|
|
sg_lineDataRemoveOutlier(
|
|||
|
|
(SVzNL3DPosition*)filterHLines[hLine].data(),
|
|||
|
|
(int)filterHLines[hLine].size(),
|
|||
|
|
filterParam,
|
|||
|
|
filterData,
|
|||
|
|
lineNoise);
|
|||
|
|
for (int j = 0; j < lineNoise.size(); j++)
|
|||
|
|
{
|
|||
|
|
int lineIdx = lineNoise[j];
|
|||
|
|
scanLines[lineIdx][hLine].pt3D.z = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return;
|
|||
|
|
}
|