wheelArchHeigthMeasure version 1.4.3 : 根据5.18数据进行轮毂检测算法优化,修改了参数。
This commit is contained in:
parent
7a372b05a7
commit
5378038e3b
@ -18,7 +18,8 @@
|
||||
//version 1.4.0 : 添加了标定块凹槽长度计算API。
|
||||
//version 1.4.1 : 优化了标定块凹槽长度计算方法,使用前部1/4和后部1/4点计算,跳开中间波动比较大的点。
|
||||
//version 1.4.2 : 优化标定块凹槽长度计算方法,添加了噪点滤除。
|
||||
std::string m_strVersion = "1.4.2";
|
||||
//version 1.4.3 : 根据5.18数据进行轮毂检测算法优化,修改了参数。
|
||||
std::string m_strVersion = "1.4.3";
|
||||
const char* wd_wheelArchHeigthMeasureVersion(void)
|
||||
{
|
||||
return m_strVersion.c_str();
|
||||
@ -590,7 +591,10 @@ WD_wheelArchInfo wd_wheelArchHeigthMeasure(
|
||||
{
|
||||
std::vector<SVzNL3DPosition>& lineData = scanLines[line];
|
||||
if (linePtNum != (int)lineData.size())
|
||||
{
|
||||
isGridData = false;
|
||||
break;
|
||||
}
|
||||
//滤波,滤除异常点
|
||||
sg_lineDataRemoveOutlier_changeOriginData(&lineData[0], linePtNum, filterParam);
|
||||
}
|
||||
@ -732,14 +736,16 @@ WD_wheelArchInfo wd_wheelArchHeigthMeasure(
|
||||
std::vector<std::vector<SWDIndexingVzPoint>> downEndings;
|
||||
for (int line = 0; line < lineNum; line++)
|
||||
{
|
||||
if (line == 319)
|
||||
if (line == 281)
|
||||
int kkk = 1;
|
||||
std::vector<SWDIndexingVzPoint> line_upEnding;
|
||||
std::vector<SWDIndexingVzPoint> line_downEnding;
|
||||
_lineProc_getWheelEnding(scanLines[line], line, line_upEnding, line_downEnding);
|
||||
_lineProc_getWheelEnding(scanLines[line], line, line_upEnding, line_downEnding,
|
||||
scale_segGap, scale_endingAngleLen, wheel_endingAngleTh);
|
||||
upEndings.push_back(line_upEnding);
|
||||
downEndings.push_back(line_downEnding);
|
||||
}
|
||||
|
||||
//生长聚类
|
||||
std::vector<SSG_endingTree> upEndingTrees;
|
||||
_getWheelEndingGrowingTrees(upEndings, upEndingTrees, growParam);
|
||||
@ -769,11 +775,43 @@ WD_wheelArchInfo wd_wheelArchHeigthMeasure(
|
||||
}
|
||||
}
|
||||
|
||||
double downEnding_maxBtmY = -DBL_MAX;
|
||||
int minBtmIdx = -1;
|
||||
for (int i = 0; i < (int)downEndingTrees.size(); i++)
|
||||
{
|
||||
double btmY_0 = _getBtmY(downEndingTrees[i]);
|
||||
if (downEnding_maxBtmY < btmY_0)
|
||||
{
|
||||
downEnding_maxBtmY = btmY_0;
|
||||
minBtmIdx = i;
|
||||
}
|
||||
}
|
||||
if(minBtmIdx < 0)
|
||||
{
|
||||
*errCode = SX_ERR_INVALID_WHEEL_EDGE;
|
||||
return result;
|
||||
}
|
||||
|
||||
double downEnding_maxYopY = _getTopY(downEndingTrees[minBtmIdx]);
|
||||
int downEnding_maxLeft = downEndingTrees[minBtmIdx].treeNodes[0].lineIdx;
|
||||
int downEnding_maxRight = downEndingTrees[minBtmIdx].treeNodes.back().lineIdx;
|
||||
for (int i = 0; i < (int)downEndingTrees.size(); i++)
|
||||
{
|
||||
if (i == minBtmIdx)
|
||||
continue;
|
||||
|
||||
double topY_0 = _getTopY(downEndingTrees[i]);
|
||||
double btmY_0 = _getBtmY(downEndingTrees[i]);
|
||||
int left_0 = downEndingTrees[i].treeNodes[0].lineIdx;
|
||||
int right_0 = downEndingTrees[i].treeNodes.back().lineIdx;
|
||||
if((downEnding_maxRight > left_0) && (right_0 > downEnding_maxLeft)) //与最下方交叠
|
||||
downEndingTrees[i].treeType = -1;
|
||||
else
|
||||
{
|
||||
if(btmY_0 < downEnding_maxYopY )
|
||||
downEndingTrees[i].treeType = -1;
|
||||
}
|
||||
#if 0
|
||||
for (int j = i + 1; j < (int)downEndingTrees.size(); j++)
|
||||
{
|
||||
if (downEndingTrees[j].treeType < 0)
|
||||
@ -790,7 +828,9 @@ WD_wheelArchInfo wd_wheelArchHeigthMeasure(
|
||||
downEndingTrees[j].treeType = -1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
std::vector<SSG_endingTree> validDownEndingTrees;
|
||||
for (int i = 0; i < (int)downEndingTrees.size(); i++)
|
||||
{
|
||||
|
||||
@ -2730,11 +2730,11 @@ void _outputScanDataFile_removeZeros(char* fileName, SVzNL3DLaserLine * scanData
|
||||
}
|
||||
|
||||
#define TEST_CONVERT_TO_GRID 0
|
||||
#define TEST_COMPUTE_WHEEL_ARCH 0
|
||||
#define TEST_CAMERA_ADJUSTING 1
|
||||
#define TEST_COMPUTE_WHEEL_ARCH 1
|
||||
#define TEST_CAMERA_ADJUSTING 0
|
||||
#define TEST_COMPUTE_CALIB_PARA 0
|
||||
|
||||
#define TEST_GROUP 7
|
||||
#define TEST_GROUP 11
|
||||
int main()
|
||||
{
|
||||
#if TEST_CONVERT_TO_GRID
|
||||
@ -2819,11 +2819,15 @@ int main()
|
||||
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场数据2/15_C552/", //4
|
||||
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场数据2/17_C586/", //5
|
||||
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场2数据/", //6
|
||||
|
||||
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场2数据2/右后轮/", //7
|
||||
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场2数据2/右前轮/", //8
|
||||
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场2数据2/左后轮/", //9
|
||||
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场2数据2/左前轮/", //10
|
||||
};
|
||||
|
||||
SVzNLRange fileIdx[TEST_GROUP] = {
|
||||
{1,2}, {1,4}, {27,41}, {27,41}, {27,41},{27,41}, {7,7}
|
||||
{1,2}, {1,4}, {27,41}, {27,41}, {27,41},{27,41}, {7,7},
|
||||
{1,37}, {1,37},{1,36},{1,38}
|
||||
};
|
||||
|
||||
SSG_planeCalibPara poseCalibPara;
|
||||
@ -2847,16 +2851,24 @@ int main()
|
||||
char _scan_file[256];
|
||||
|
||||
int endGroup = TEST_GROUP - 1;
|
||||
for (int grp = 6; grp <= endGroup; grp++)
|
||||
for (int grp = 7; grp <= endGroup; grp++)
|
||||
{
|
||||
char calibFile[250];
|
||||
sprintf_s(calibFile, "%sground_calib_para.txt", dataPath[grp]);
|
||||
poseCalibPara = _readCalibPara(calibFile);
|
||||
for (int fidx = fileIdx[grp].nMin; fidx <= fileIdx[grp].nMax; fidx++)
|
||||
{
|
||||
//fidx = 2;
|
||||
//fidx = 38;
|
||||
if(6 == grp)
|
||||
sprintf_s(_scan_file, "%s%d_LaserData_Jl26C575.txt", dataPath[grp], fidx);
|
||||
else if(7 == grp)
|
||||
sprintf_s(_scan_file, "%s%d_右后轮.txt", dataPath[grp], fidx);
|
||||
else if (8 == grp)
|
||||
sprintf_s(_scan_file, "%s%d_右前轮.txt", dataPath[grp], fidx);
|
||||
else if (9 == grp)
|
||||
sprintf_s(_scan_file, "%s%d_左后轮.txt", dataPath[grp], fidx);
|
||||
else if (10 == grp)
|
||||
sprintf_s(_scan_file, "%s%d_左前轮.txt", dataPath[grp], fidx);
|
||||
else
|
||||
sprintf_s(_scan_file, "%sLaserData_%d.txt", dataPath[grp], fidx);
|
||||
std::vector<std::vector< SVzNL3DPosition>> scanData;
|
||||
@ -2892,7 +2904,7 @@ int main()
|
||||
growParam.maxLineSkipNum = 10;
|
||||
growParam.yDeviation_max = 20.0;
|
||||
growParam.maxSkipDistance = 10.0;
|
||||
growParam.zDeviation_max = 20.0;//
|
||||
growParam.zDeviation_max = 40.0;//
|
||||
growParam.minLTypeTreeLen = 100; //mm
|
||||
growParam.minVTypeTreeLen = 100; //mm
|
||||
|
||||
@ -2936,7 +2948,16 @@ int main()
|
||||
sprintf_s(_dbg_file, "%sresult\\LaserLine%d_result.txt", dataPath[grp], fidx);
|
||||
_outputScanDataFile_RGBD_obj(_dbg_file, scanData, 0, 0, 0, wheelArcHeight);
|
||||
#endif
|
||||
printf("%s: arcY=%f, upPtY=%f, height=%f, arcToGrund=%f, time=%d(ms)!\n", _scan_file, wheelArcHeight.wheelArchPos.y, wheelArcHeight.wheelUpPos.y, wheelArcHeight.archToCenterHeigth, wheelArcHeight.archToGroundHeigth, (int)(t2 - t1));
|
||||
if(SG_ERR_NOT_GRID_FORMAT == errCode)
|
||||
printf("%s: arcY=%f, upPtY=%f, height=%f, arcToGrund=%f, time=%d(ms), errCode=不是栅格数据\n", _scan_file,
|
||||
wheelArcHeight.wheelArchPos.y, wheelArcHeight.wheelUpPos.y,
|
||||
wheelArcHeight.archToCenterHeigth, wheelArcHeight.archToGroundHeigth,
|
||||
(int)(t2 - t1));
|
||||
else
|
||||
printf("%s: arcY=%f, upPtY=%f, height=%f, arcToGrund=%f, time=%d(ms), errCode=%d\n", _scan_file,
|
||||
wheelArcHeight.wheelArchPos.y, wheelArcHeight.wheelUpPos.y,
|
||||
wheelArcHeight.archToCenterHeigth, wheelArcHeight.archToGroundHeigth,
|
||||
(int)(t2 - t1), errCode);
|
||||
double len = sqrt(pow(wheelArcHeight.wheelUpPos.x - wheelArcHeight.wheelDownPos.x, 2) +
|
||||
pow(wheelArcHeight.wheelUpPos.y - wheelArcHeight.wheelDownPos.y, 2) +
|
||||
pow(wheelArcHeight.wheelUpPos.z - wheelArcHeight.wheelDownPos.z, 2));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user