diff --git a/sourceCode/wheelArchHeigthMeasure.cpp b/sourceCode/wheelArchHeigthMeasure.cpp index 8c85a08..f15c5f1 100644 --- a/sourceCode/wheelArchHeigthMeasure.cpp +++ b/sourceCode/wheelArchHeigthMeasure.cpp @@ -17,7 +17,8 @@ //version 1.3.6 : 轮眉到轮心高度计算方法进行了修正,重新从由两点距离修改为Y高度差。 //version 1.4.0 : 添加了标定块凹槽长度计算API。 //version 1.4.1 : 优化了标定块凹槽长度计算方法,使用前部1/4和后部1/4点计算,跳开中间波动比较大的点。 -std::string m_strVersion = "1.4.1"; +//version 1.4.2 : 优化标定块凹槽长度计算方法,添加了噪点滤除。 +std::string m_strVersion = "1.4.2"; const char* wd_wheelArchHeigthMeasureVersion(void) { return m_strVersion.c_str(); @@ -1200,20 +1201,38 @@ double wd_getCalibrationBlockLength( //计算长度 std::vector> validLines; + for (int line = 0; line < lineNum; line++) { std::vector< SVzNL3DPosition> lineData; + std::vector< int> ptIdxCheck; for (int j = 0; j < linePtNum; j++) { if (objMask[line][j] >= 0) { int clusterPtIdx = objMask[line][j]; - if(objClusters[objIdx][clusterPtIdx].pt3D.z > 1e-4) + if (objClusters[objIdx][clusterPtIdx].pt3D.z > 1e-4) + { lineData.push_back(objClusters[objIdx][clusterPtIdx]); + ptIdxCheck.push_back(j); + } } } - if(lineData.size() > 10) - validLines.push_back(lineData); + if (lineData.size() > 10) + { + bool validLine = true; + for (int j = 1; j < (int)lineData.size(); j++) + { + if (ptIdxCheck[j] - ptIdxCheck[j - 1] > 3) + { + validLine = false; + break; + } + + } + if(true == validLine) + validLines.push_back(lineData); + } } std::vector gaugeLen; diff --git a/wheelArchHeigthMeasure_test/wheelArchHeigthMeasure_test.cpp b/wheelArchHeigthMeasure_test/wheelArchHeigthMeasure_test.cpp index e4eaa38..e747483 100644 --- a/wheelArchHeigthMeasure_test/wheelArchHeigthMeasure_test.cpp +++ b/wheelArchHeigthMeasure_test/wheelArchHeigthMeasure_test.cpp @@ -2960,7 +2960,7 @@ int main() }; SVzNLRange fileIdx[4] = { - {1,20}, {1,20}, {1,20}, {1,21} + {1,20}, {1,20}, {21,21}, {22,22} }; const char* ver = wd_wheelArchHeigthMeasureVersion(); @@ -2996,9 +2996,9 @@ int main() SSG_treeGrowParam growParam; growParam.maxLineSkipNum = 5; - growParam.yDeviation_max = 5.0; - growParam.maxSkipDistance = 5.0; - growParam.zDeviation_max = 5.0;// + growParam.yDeviation_max = 1.5; + growParam.maxSkipDistance = 1.5; + growParam.zDeviation_max = 1.5;// growParam.minLTypeTreeLen = 100; //mm growParam.minVTypeTreeLen = 100; //mm SVzNLRangeD calibratiionBlockYRange = { -1000, 500 };