添加分段平滑

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++) for (int hLine = 0; hLine < hLineNum; hLine++)
{ {
if (hLine == 116) if (hLine == 14)
int kkk = 1; int kkk = 1;
std::vector<SVzNL3DPosition> smoothData; std::vector<SVzNL3DPosition> smoothData;
//sg_lineSegSmoothing( sg_lineSegSmoothing(
// hLines[hLine], hLines[hLine],
// algoParam.cornerParam.minEndingGap, //分段的Y间隔。大于此间隔为新的分段 algoParam.cornerParam.minEndingGap, //分段的Y间隔。大于此间隔为新的分段
// algoParam.cornerParam.minEndingGap_z,//分段的Z间隔。大于此间隔为新的分段 algoParam.cornerParam.minEndingGap_z,//分段的Z间隔。大于此间隔为新的分段
// 5, 5,
// smoothData); smoothData);
sg_lineDataSmoothing(hLines[hLine], 5, smoothData); //sg_lineDataSmoothing(hLines[hLine], 5, smoothData);
SSG_lineFeature a_hLine_featrues; SSG_lineFeature a_hLine_featrues;
a_hLine_featrues.lineIdx = hLine; a_hLine_featrues.lineIdx = hLine;
#if BAG_ALGO_USE_CORNER_FEATURE #if BAG_ALGO_USE_CORNER_FEATURE

View File

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