添加分段平滑
This commit is contained in:
parent
7af730c44f
commit
e31ec0effd
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user