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