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.1 : 添加了一个检测轮毂是否存在的函数
//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)
{
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();
@ -61,7 +62,7 @@ void _getArcEndings(std::vector< std::vector<SVzNL3DPosition>>& scanLines, const
{
if ((i == 380) && (j > 288))
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;
}
if (lastIdx >= 0)
@ -906,7 +907,7 @@ WD_wheelArchInfo wd_wheelArchHeigthMeasure(
//寻找轮眉点
//(1)快速寻找下端点2取中间区域精确确定端点3抛物线拟合4计算轮眉点最高点
std::vector<SVzNL2DPoint> arcEndings;
_getArcEndings(scanLines, 2, arcEndings); //轮眉的ID是2
_getArcEndings(scanLines, 2, arcEndings, upWheelPt.z); //轮眉的ID是2
if (arcEndings.size() == 0)
{
*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_CALIB_PARA 0
#define TEST_GROUP 2
#define TEST_GROUP 6
int main()
{
#if TEST_CONVERT_TO_GRID
@ -2718,10 +2718,14 @@ int main()
const char* dataPath[TEST_GROUP] = {
"F:/ShangGu/项目/冠钦_轮眉高度测量/测试数据/现场数据/", //0
"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] = {
{1,2}, {1,4}
{1,2}, {1,4}, {1,7}, {1,7}, {1,7},{1,7}
};
SSG_planeCalibPara poseCalibPara;
@ -2745,14 +2749,14 @@ int main()
char _scan_file[256];
int endGroup = TEST_GROUP - 1;
for (int grp = 1; grp <= endGroup; grp++)
for (int grp = 2; 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 = 4;
//fidx = 6;
sprintf_s(_scan_file, "%sLaserData_%d.txt", dataPath[grp], fidx);
std::vector<std::vector< SVzNL3DPosition>> scanData;
vzReadLaserScanPointFromFile_XYZ_vector(_scan_file, scanData);
@ -2784,9 +2788,9 @@ int main()
SSG_treeGrowParam growParam;
growParam.maxLineSkipNum = 10;
growParam.yDeviation_max = 10.0;
growParam.yDeviation_max = 20.0;
growParam.maxSkipDistance = 10.0;
growParam.zDeviation_max = 10.0;//
growParam.zDeviation_max = 20.0;//
growParam.minLTypeTreeLen = 100; //mm
growParam.minVTypeTreeLen = 100; //mm