This commit is contained in:
杰仔 2026-04-09 17:16:23 +08:00
commit 447d7696e7
2 changed files with 15 additions and 10 deletions

View File

@ -11,7 +11,8 @@
//version 1.3.0 : 修正了寻找上下点使用固定门限的问题 //version 1.3.0 : 修正了寻找上下点使用固定门限的问题
//version 1.3.1 : 添加了一个检测轮毂是否存在的函数 //version 1.3.1 : 添加了一个检测轮毂是否存在的函数
//version 1.3.2 : 针对不理想点云改进了算法,增强鲁棒性 //version 1.3.2 : 针对不理想点云改进了算法,增强鲁棒性
std::string m_strVersion = "1.3.2"; //version 1.3.3 : 轮眉点的提取进行了改进,修正了可能的取点错误
std::string m_strVersion = "1.3.3";
const char* wd_wheelArchHeigthMeasureVersion(void) const char* wd_wheelArchHeigthMeasureVersion(void)
{ {
return m_strVersion.c_str(); return m_strVersion.c_str();
@ -49,7 +50,7 @@ bool compareByPtSize(const SWD_clustersInfo& a, const SWD_clustersInfo& b) {
} }
//提取轮眉区域的下端点 //提取轮眉区域的下端点
void _getArcEndings(std::vector< std::vector<SVzNL3DPosition>>& scanLines, const int cluster_arc_id, std::vector<SVzNL2DPoint>& contourPts) void _getArcEndings(std::vector< std::vector<SVzNL3DPosition>>& scanLines, const int cluster_arc_id, std::vector<SVzNL2DPoint>& contourPts, double maxZ)
{ {
int lineNum = (int)scanLines.size(); int lineNum = (int)scanLines.size();
@ -61,7 +62,7 @@ void _getArcEndings(std::vector< std::vector<SVzNL3DPosition>>& scanLines, const
{ {
if ((i == 380) && (j > 288)) if ((i == 380) && (j > 288))
int kkk = 1; int kkk = 1;
if ( (scanLines[i][j].nPointIdx == cluster_arc_id) && (scanLines[i][j].pt3D.z >1e-4)) if ( (scanLines[i][j].nPointIdx == cluster_arc_id) && (scanLines[i][j].pt3D.z >1e-4) && (scanLines[i][j].pt3D.z < maxZ))
lastIdx = j; lastIdx = j;
} }
if (lastIdx >= 0) if (lastIdx >= 0)
@ -906,7 +907,7 @@ WD_wheelArchInfo wd_wheelArchHeigthMeasure(
//寻找轮眉点 //寻找轮眉点
//(1)快速寻找下端点2取中间区域精确确定端点3抛物线拟合4计算轮眉点最高点 //(1)快速寻找下端点2取中间区域精确确定端点3抛物线拟合4计算轮眉点最高点
std::vector<SVzNL2DPoint> arcEndings; std::vector<SVzNL2DPoint> arcEndings;
_getArcEndings(scanLines, 2, arcEndings); //轮眉的ID是2 _getArcEndings(scanLines, 2, arcEndings, upWheelPt.z); //轮眉的ID是2
if (arcEndings.size() == 0) if (arcEndings.size() == 0)
{ {
*errCode = SX_ERR_INVALID_ARC; *errCode = SX_ERR_INVALID_ARC;

View File

@ -2639,7 +2639,7 @@ void _outputScanDataFile_removeZeros(char* fileName, SVzNL3DLaserLine * scanData
#define TEST_COMPUTE_WHEEL_ARCH 1 #define TEST_COMPUTE_WHEEL_ARCH 1
#define TEST_COMPUTE_CALIB_PARA 0 #define TEST_COMPUTE_CALIB_PARA 0
#define TEST_GROUP 2 #define TEST_GROUP 6
int main() int main()
{ {
#if TEST_CONVERT_TO_GRID #if TEST_CONVERT_TO_GRID
@ -2718,10 +2718,14 @@ int main()
const char* dataPath[TEST_GROUP] = { const char* dataPath[TEST_GROUP] = {
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/现场数据/", //0 "F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/现场数据/", //0
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场数据/", //1 "F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场数据/", //1
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场数据2/11/", //2
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场数据2/13/", //3
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场数据2/15/", //4
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/部署现场数据2/17/", //5
}; };
SVzNLRange fileIdx[TEST_GROUP] = { SVzNLRange fileIdx[TEST_GROUP] = {
{1,2}, {1,4} {1,2}, {1,4}, {1,7}, {1,7}, {1,7},{1,7}
}; };
SSG_planeCalibPara poseCalibPara; SSG_planeCalibPara poseCalibPara;
@ -2745,14 +2749,14 @@ int main()
char _scan_file[256]; char _scan_file[256];
int endGroup = TEST_GROUP - 1; int endGroup = TEST_GROUP - 1;
for (int grp = 1; grp <= endGroup; grp++) for (int grp = 2; grp <= endGroup; grp++)
{ {
char calibFile[250]; char calibFile[250];
sprintf_s(calibFile, "%sground_calib_para.txt", dataPath[grp]); sprintf_s(calibFile, "%sground_calib_para.txt", dataPath[grp]);
poseCalibPara = _readCalibPara(calibFile); poseCalibPara = _readCalibPara(calibFile);
for (int fidx = fileIdx[grp].nMin; fidx <= fileIdx[grp].nMax; fidx++) for (int fidx = fileIdx[grp].nMin; fidx <= fileIdx[grp].nMax; fidx++)
{ {
//fidx = 4; //fidx = 6;
sprintf_s(_scan_file, "%sLaserData_%d.txt", dataPath[grp], fidx); sprintf_s(_scan_file, "%sLaserData_%d.txt", dataPath[grp], fidx);
std::vector<std::vector< SVzNL3DPosition>> scanData; std::vector<std::vector< SVzNL3DPosition>> scanData;
vzReadLaserScanPointFromFile_XYZ_vector(_scan_file, scanData); vzReadLaserScanPointFromFile_XYZ_vector(_scan_file, scanData);
@ -2784,9 +2788,9 @@ int main()
SSG_treeGrowParam growParam; SSG_treeGrowParam growParam;
growParam.maxLineSkipNum = 10; growParam.maxLineSkipNum = 10;
growParam.yDeviation_max = 10.0; growParam.yDeviation_max = 20.0;
growParam.maxSkipDistance = 10.0; growParam.maxSkipDistance = 10.0;
growParam.zDeviation_max = 10.0;// growParam.zDeviation_max = 20.0;//
growParam.minLTypeTreeLen = 100; //mm growParam.minLTypeTreeLen = 100; //mm
growParam.minVTypeTreeLen = 100; //mm growParam.minVTypeTreeLen = 100; //mm