添加分段平滑

This commit is contained in:
jerryzeng 2025-07-20 22:54:30 +08:00
parent 7af730c44f
commit e31ec0effd
2 changed files with 20 additions and 12 deletions

View File

@ -2383,16 +2383,16 @@ void sg_getBagPosition(
//逐行提取特征
for (int hLine = 0; hLine < hLineNum; hLine++)
{
if (hLine == 116)
if (hLine == 14)
int kkk = 1;
std::vector<SVzNL3DPosition> smoothData;
//sg_lineSegSmoothing(
// hLines[hLine],
// algoParam.cornerParam.minEndingGap, //分段的Y间隔。大于此间隔为新的分段
// algoParam.cornerParam.minEndingGap_z,//分段的Z间隔。大于此间隔为新的分段
// 5,
// smoothData);
sg_lineDataSmoothing(hLines[hLine], 5, smoothData);
sg_lineSegSmoothing(
hLines[hLine],
algoParam.cornerParam.minEndingGap, //分段的Y间隔。大于此间隔为新的分段
algoParam.cornerParam.minEndingGap_z,//分段的Z间隔。大于此间隔为新的分段
5,
smoothData);
//sg_lineDataSmoothing(hLines[hLine], 5, smoothData);
SSG_lineFeature a_hLine_featrues;
a_hLine_featrues.lineIdx = hLine;
#if BAG_ALGO_USE_CORNER_FEATURE

View File

@ -94,7 +94,7 @@ void sg_lineDataSmoothing(
return;
}
//对扫描线按分段进行平滑
//对扫描线按分段进行平滑
void sg_lineSegSmoothing(
std::vector<SVzNL3DPosition>& input,
double seg_y_deltaTh, //分段的Y间隔。大于此间隔为新的分段
@ -102,21 +102,25 @@ void sg_lineSegSmoothing(
int smoothWin,
std::vector<SVzNL3DPosition>& output)
{
output.resize(input.size()); // 预分配足够的空间
std::copy(input.begin(), input.end(), output.begin());
//output.resize(input.size()); // 预分配足够的空间
//std::copy(input.begin(), input.end(), output.begin());
int dataSize = input.size();
//计算分段
std::vector<std::vector<SVzNL3DPosition>> segs;
std::vector<SVzNL3DPosition> a_seg;
int segStart = -1;
for (int i = 0; i < dataSize; i++)
{
SVzNL3DPosition a_pt = input[i];
//seg判断
if (a_pt.pt3D.z > 1e-4)
{
if (a_seg.size() == 0)
if (segStart < 0)
{
a_seg.push_back(a_pt);
segStart = 1;
}
else //检查两点距离
{
SVzNL3DPosition pre_pt = a_seg.back();
@ -128,8 +132,12 @@ void sg_lineSegSmoothing(
a_seg.clear();
a_seg.push_back(a_pt);
}
else
a_seg.push_back(a_pt);
}
}
else
a_seg.push_back(a_pt);
}
//last
if (a_seg.size() > 0)