beltTearingDetection
version 1.0.1 : 皮带撕裂: 添加撕裂Y方向最小和最大宽度, 以及非贯穿撕裂最小深度,用于滤除点云波动和雨刷运动时产生的虚拟Gap(中信重工)
This commit is contained in:
parent
1883633fac
commit
68e7bb9839
@ -1051,13 +1051,16 @@ int main()
|
||||
};
|
||||
|
||||
SVzNLRange fileIdx[TEST_GROUP] = {
|
||||
{10,24}, {2, 18}, {16,16}, {1,2}, {1,3} };
|
||||
{10,24}, {2, 18}, {16,16}, {1,2}, {2,3} };
|
||||
|
||||
double camPoseR[9] = {
|
||||
1.0, 0.0, 0.0,
|
||||
0.0, 1.0, 0.0,
|
||||
0.0, 0.0, 1.0 };
|
||||
|
||||
const char* ver = sg_beltTearingVersion();
|
||||
printf("ver:%s\n", ver);
|
||||
|
||||
SSG_beltTearingParam algoParam;
|
||||
algoParam.differnceBinTh = 2.0; // 1.0;
|
||||
algoParam.extractPara.gapChkWin = 7;
|
||||
@ -1067,6 +1070,10 @@ int main()
|
||||
algoParam.tearingMinGap = 100.0; //两个同位置的纵撕的最小间隔。大于此门限视为两个撕裂
|
||||
algoParam.tearingMinLen = 30.0;
|
||||
|
||||
algoParam.tearingMinDepth = 2.0; //对于非穿透型撕裂的检测最小深度,用于滤除点云波动形成的虚假撕裂
|
||||
algoParam.tearingMinYWidth = 2.0; //撕裂在Y方向的最大宽度, 用于滤除雨刷运行产生的虚假Gap
|
||||
algoParam.tearingMaxYWidth = 150; //撕裂在Y方向的最大宽度, 用于滤除雨刷运行产生的虚假Gap
|
||||
|
||||
char _scan_file[256];
|
||||
int endGroup = TEST_GROUP - 1;
|
||||
for (int grp = 4; grp <= endGroup; grp++)
|
||||
@ -1120,7 +1127,7 @@ int main()
|
||||
|
||||
for (int lineIdx = 0; lineIdx < lineNum; lineIdx++)
|
||||
{
|
||||
if ((lineIdx == 56) || (lineIdx == 857))
|
||||
if ((lineIdx == 56) || (lineIdx == 435))
|
||||
int kkk = 1;
|
||||
SVzNL3DLaserLine* a_line = &laser3DPoints[lineIdx];
|
||||
sg_detectBeltTearing(
|
||||
|
||||
@ -6,7 +6,8 @@
|
||||
#include "SG_errCode.h"
|
||||
|
||||
//version 1.0.0 : 皮带撕裂版本添加版本号后的基础版本
|
||||
std::string m_strVersion = "BeltTearing 1.0.0";
|
||||
//version 1.0.1 : 添加撕裂Y方向最小和最大宽度, 以及非贯穿撕裂最小深度,用于滤除点云波动和雨刷运动时产生的虚拟Gap(中信重工)
|
||||
std::string m_strVersion = "BeltTearing 1.0.1";
|
||||
const char* sg_beltTearingVersion(void)
|
||||
{
|
||||
return m_strVersion.c_str();
|
||||
@ -226,7 +227,7 @@ void sg_bearTearing_vLineProc(
|
||||
}
|
||||
}
|
||||
}
|
||||
if (end > start) //gap必须大于0
|
||||
if (end > start+1) //gap必须大于1
|
||||
{
|
||||
//生成特征
|
||||
SSG_basicFeatureGap a_feature;
|
||||
@ -324,9 +325,19 @@ void sg_bearTearing_vLineProc(
|
||||
}
|
||||
}
|
||||
//排序
|
||||
gapFeatureNum = (int)vLineFeatures.size();
|
||||
if (gapFeatureNum > 0)
|
||||
{
|
||||
//
|
||||
//检查宽度
|
||||
for (int i = gapFeatureNum - 1; i >= 0; i--)
|
||||
{
|
||||
if ( (vLineFeatures[i].gap_width > measureParam.tearingMaxYWidth) ||
|
||||
(vLineFeatures[i].gap_width < measureParam.tearingMinYWidth) ||
|
||||
((vLineFeatures[i].gap_depth >= 0) && (vLineFeatures[i].gap_depth < measureParam.tearingMinDepth)))
|
||||
vLineFeatures.erase(vLineFeatures.begin() + i);
|
||||
}
|
||||
gapFeatureNum = (int)vLineFeatures.size();
|
||||
if(gapFeatureNum > 0)
|
||||
std::sort(vLineFeatures.begin(), vLineFeatures.end(), compareByStartY);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
#define ENABLE_CROSS_WISE_TEAR 0
|
||||
#define OUTPUT_TEARING_POINTS 1
|
||||
#define KEEP_GAP_AS_FEATURE 1
|
||||
#define SCAN_BUFF_SIZE 21 //缓存区大小,缓存21条扫描线,处理中间扫描线
|
||||
#define SCAN_BUFF_SIZE 3 //缓存区大小,缓存21条扫描线,处理中间扫描线
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -16,6 +16,10 @@ typedef struct
|
||||
SSG_tearFeatureExtactPara extractPara;
|
||||
double tearingMinLen; //最小撕裂长度,达到此长度时输出撕裂
|
||||
double tearingMinGap; //两个同位置的撕裂的间隔。小于此间隔时,视为同一个撕裂。
|
||||
|
||||
double tearingMinDepth; //对于非穿透型撕裂的检测最小深度,用于滤除点云波动形成的虚假撕裂
|
||||
double tearingMinYWidth; //撕裂在Y方向的最小宽度, 用于滤除点云波动形成的虚假撕裂
|
||||
double tearingMaxYWidth; //撕裂在Y方向的最大宽度
|
||||
}SSG_beltTearingParam;
|
||||
|
||||
typedef enum
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user