diff --git a/SieveNodeDetection/SieveNodeDetection.vcxproj b/SieveNodeDetection/SieveNodeDetection.vcxproj
index 9ce8fee..bcc71d6 100644
--- a/SieveNodeDetection/SieveNodeDetection.vcxproj
+++ b/SieveNodeDetection/SieveNodeDetection.vcxproj
@@ -79,12 +79,12 @@
true
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
false
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
@@ -128,13 +128,13 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
true
false
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
opencv_world480d.lib;baseAlgorithm.lib;%(AdditionalDependencies)
@@ -148,7 +148,7 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
@@ -156,7 +156,7 @@
true
true
false
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
opencv_world480.lib;baseAlgorithm.lib;%(AdditionalDependencies)
diff --git a/SieveNodeDetection_test/SieveNodeDetection_test.cpp b/SieveNodeDetection_test/SieveNodeDetection_test.cpp
index 38a4994..29704d4 100644
--- a/SieveNodeDetection_test/SieveNodeDetection_test.cpp
+++ b/SieveNodeDetection_test/SieveNodeDetection_test.cpp
@@ -541,18 +541,18 @@ void _outputScanDataFile_RGBD_obj_XYZ(char* fileName, SVzNL3DLaserLine* scanData
}
else if (LINE_FEATURE_L_SLOPE_H2L == vType)
{
- rgb = { 160, 82, 45 };
- size = 3;
+ rgb = { 0, 0, 255 };
+ size = 20;
}
else if ((LINE_FEATURE_LINE_ENDING_0 == vType) || (LINE_FEATURE_LINE_ENDING_1 == vType))
{
rgb = { 255, 0, 0 };
size = 3;
}
- else if (LINE_FEATURE_L_SLOPE_L2H == vType)
+ else if (LINE_FEATURE_L_SLOPE_L2H == vType) //已经焊接过
{
- rgb = { 233, 150, 122 };
- size = 3;
+ rgb = { 255, 255, 0 };
+ size = 20;
}
else if (LINE_FEATURE_L_JUMP_H2L == hType)
{
@@ -1037,8 +1037,8 @@ int main()
#if TEST_COMPUTE_SIEVE_NODES
const char* dataPath[TEST_GROUP] = {
- "F:\\上古\\项目\\筛孔节点检测\\20250304 筛网\\", //0
- "F:\\上古\\项目\\筛孔节点检测\\20250303 筛网数据\\", //1
+ "F:\\ShangGu\\项目\\筛孔节点检测\\20250304 筛网\\", //0
+ "F:\\ShangGu\\项目\\筛孔节点检测\\20250303 筛网数据\\", //1
};
SVzNLRange fileIdx[TEST_GROUP] = {
@@ -1069,11 +1069,11 @@ int main()
algoParam.slopeParam.validSlopeH = 4;
algoParam.growParam.maxLineSkipNum = 5;
- algoParam.growParam.yDeviation_max = 20.0;
- algoParam.growParam.maxSkipDistance = 20.0;
- algoParam.growParam.zDeviation_max = 80.0; //袋子高度1/2
- algoParam.growParam.minLTypeTreeLen = 50.0; //mm
- algoParam.growParam.minVTypeTreeLen = 50.0; //mm
+ algoParam.growParam.yDeviation_max = algoParam.sieveDiameter * 1.5;
+ algoParam.growParam.maxSkipDistance = algoParam.sieveDiameter / 2;
+ algoParam.growParam.zDeviation_max = algoParam.sieveDiameter * 1.5; //袋子高度1/2
+ algoParam.growParam.minLTypeTreeLen = algoParam.sieveDiameter * 1.5; //mm
+ algoParam.growParam.minVTypeTreeLen = algoParam.sieveDiameter * 1.5; //mm
char _scan_file[256];
diff --git a/SieveNodeDetection_test/SieveNodeDetection_test.vcxproj b/SieveNodeDetection_test/SieveNodeDetection_test.vcxproj
index 92c9566..58ef67a 100644
--- a/SieveNodeDetection_test/SieveNodeDetection_test.vcxproj
+++ b/SieveNodeDetection_test/SieveNodeDetection_test.vcxproj
@@ -79,12 +79,12 @@
true
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
false
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
@@ -120,12 +120,12 @@
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;
+ ..\..\thirdParty\opencv\build\include;
Console
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
opencv_world480d.lib;SieveNodeDetection.lib;%(AdditionalDependencies)
@@ -137,14 +137,14 @@
true
NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;
+ ..\..\thirdParty\opencv\build\include;
Console
true
true
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
opencv_world480.lib;SieveNodeDetection.lib;%(AdditionalDependencies)
diff --git a/bagPositioning/bagPositioning.vcxproj b/bagPositioning/bagPositioning.vcxproj
index 1befe93..a19196a 100644
--- a/bagPositioning/bagPositioning.vcxproj
+++ b/bagPositioning/bagPositioning.vcxproj
@@ -78,12 +78,12 @@
true
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
$(SolutionDir)build\$(Platform)\$(Configuration)\
false
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
$(SolutionDir)build\$(Platform)\$(Configuration)\
@@ -128,13 +128,13 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
true
false
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
opencv_world480d.lib;baseAlgorithm.lib;%(AdditionalDependencies)
@@ -148,7 +148,7 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
@@ -156,7 +156,7 @@
true
true
false
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
opencv_world480.lib;baseAlgorithm.lib;%(AdditionalDependencies)
diff --git a/bagPositioning_test/bagPositioning_test.cpp b/bagPositioning_test/bagPositioning_test.cpp
index 8561b35..89ed7a7 100644
--- a/bagPositioning_test/bagPositioning_test.cpp
+++ b/bagPositioning_test/bagPositioning_test.cpp
@@ -1718,22 +1718,22 @@ int main()
#if TEST_COMPUTE_GRASP_POINT
const char* dataPath[TEST_GROUP] = {
- "F:\\上古\\编织袋数据\\点云1\\", //0
- "F:\\上古\\编织袋数据\\点云2\\", //1
- "F:\\上古\\编织袋数据\\点云3\\", //2
- "F:\\上古\\编织袋数据\\点云4_广东\\", //3
- "F:\\上古\\编织袋数据\\点云5_广东\\", //4
- "F:\\上古\\编织袋数据\\点云6_河南平顶山\\", //5
- "F:\\上古\\编织袋数据\\点云7_广东1214\\", //6
- "F:\\上古\\编织袋数据\\点云8_广东1213-1215数据\\", //7
- "F:\\上古\\编织袋数据\\点云9_广东1219数据\\", //8
- "F:\\上古\\编织袋数据\\点云10\\", //9
- "F:\\上古\\编织袋数据\\侧抓数据\\", //10
- "F:\\上古\\编织袋数据\\侧抓数据_现场\\20250419\\", //11
- "F:\\上古\\编织袋数据\\侧抓数据_现场\\20250420-1\\", //12
- "F:\\上古\\编织袋数据\\侧抓数据_现场\\20250420-2\\", //13
- "F:\\上古\\编织袋数据\\侧抓数据_现场\\20250420-3\\", //14
- "F:\\上古\\编织袋数据\\侧抓数据_现场\\20250420-4\\", //15
+ "F:\\ShangGu\\编织袋数据\\点云1\\", //0
+ "F:\\ShangGu\\编织袋数据\\点云2\\", //1
+ "F:\\ShangGu\\编织袋数据\\点云3\\", //2
+ "F:\\ShangGu\\编织袋数据\\点云4_广东\\", //3
+ "F:\\ShangGu\\编织袋数据\\点云5_广东\\", //4
+ "F:\\ShangGu\\编织袋数据\\点云6_河南平顶山\\", //5
+ "F:\\ShangGu\\编织袋数据\\点云7_广东1214\\", //6
+ "F:\\ShangGu\\编织袋数据\\点云8_广东1213-1215数据\\", //7
+ "F:\\ShangGu\\编织袋数据\\点云9_广东1219数据\\", //8
+ "F:\\ShangGu\\编织袋数据\\点云10\\", //9
+ "F:\\ShangGu\\编织袋数据\\侧抓数据\\", //10
+ "F:\\ShangGu\\编织袋数据\\侧抓数据_现场\\20250419\\", //11
+ "F:\\ShangGu\\编织袋数据\\侧抓数据_现场\\20250420-1\\", //12
+ "F:\\ShangGu\\编织袋数据\\侧抓数据_现场\\20250420-2\\", //13
+ "F:\\ShangGu\\编织袋数据\\侧抓数据_现场\\20250420-3\\", //14
+ "F:\\ShangGu\\编织袋数据\\侧抓数据_现场\\20250420-4\\", //15
};
SVzNLRange fileIdx[TEST_GROUP] = {
diff --git a/bagPositioning_test/bagPositioning_test.vcxproj b/bagPositioning_test/bagPositioning_test.vcxproj
index e04a52d..ee0b3f3 100644
--- a/bagPositioning_test/bagPositioning_test.vcxproj
+++ b/bagPositioning_test/bagPositioning_test.vcxproj
@@ -78,12 +78,12 @@
true
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
$(SolutionDir)build\$(Platform)\$(Configuration)\
false
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
$(SolutionDir)build\$(Platform)\$(Configuration)\
@@ -120,12 +120,12 @@
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;
+ ..\..\thirdParty\opencv\build\include;
Console
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
opencv_world480d.lib;bagPositioning.lib;%(AdditionalDependencies)
@@ -137,14 +137,14 @@
true
NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;
+ ..\..\thirdParty\opencv\build\include;
Console
true
true
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
opencv_world480.lib;bagPositioning.lib;%(AdditionalDependencies)
diff --git a/baseAlgorithm/baseAlgorithm.vcxproj b/baseAlgorithm/baseAlgorithm.vcxproj
index 4676aa0..42437db 100644
--- a/baseAlgorithm/baseAlgorithm.vcxproj
+++ b/baseAlgorithm/baseAlgorithm.vcxproj
@@ -78,12 +78,12 @@
true
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
$(SolutionDir)build\$(Platform)\$(Configuration)\
false
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
$(SolutionDir)build\$(Platform)\$(Configuration)\
@@ -128,13 +128,13 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
true
false
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
opencv_world480d.lib;%(AdditionalDependencies)
@@ -148,7 +148,7 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
@@ -156,7 +156,7 @@
true
true
false
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
opencv_world480.lib;%(AdditionalDependencies)
diff --git a/beltTearingDetection/beltTearingDetection.vcxproj b/beltTearingDetection/beltTearingDetection.vcxproj
index 134e399..7f4d0c7 100644
--- a/beltTearingDetection/beltTearingDetection.vcxproj
+++ b/beltTearingDetection/beltTearingDetection.vcxproj
@@ -85,12 +85,12 @@
true
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
false
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
@@ -134,13 +134,13 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
true
false
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
opencv_world480d.lib;baseAlgorithm.lib;%(AdditionalDependencies)
@@ -154,7 +154,7 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
@@ -162,7 +162,7 @@
true
true
false
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
opencv_world480.lib;baseAlgorithm.lib;%(AdditionalDependencies)
diff --git a/beltTearingDetection_test/beltTearingDetection_test.vcxproj b/beltTearingDetection_test/beltTearingDetection_test.vcxproj
index 3bdbb55..aaa99d0 100644
--- a/beltTearingDetection_test/beltTearingDetection_test.vcxproj
+++ b/beltTearingDetection_test/beltTearingDetection_test.vcxproj
@@ -79,12 +79,12 @@
true
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
false
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
@@ -120,12 +120,12 @@
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;
+ ..\..\thirdParty\opencv\build\include;
Console
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
opencv_world480d.lib;beltTearingDetection.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
@@ -137,14 +137,14 @@
true
NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;
+ ..\..\thirdParty\opencv\build\include;
Console
true
true
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
opencv_world480.lib;beltTearingDetection.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
diff --git a/boxCarMeasure/boxCarMeasureDll.vcxproj b/boxCarMeasure/boxCarMeasureDll.vcxproj
index 8d90cfa..7c6b2c5 100644
--- a/boxCarMeasure/boxCarMeasureDll.vcxproj
+++ b/boxCarMeasure/boxCarMeasureDll.vcxproj
@@ -85,12 +85,12 @@
true
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
$(SolutionDir)build\$(Platform)\$(Configuration)\
false
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
$(SolutionDir)build\$(Platform)\$(Configuration)\
@@ -135,14 +135,14 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
true
false
opencv_world480d.lib;baseAlgorithm.lib;%(AdditionalDependencies)
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
@@ -155,7 +155,7 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
@@ -164,7 +164,7 @@
true
false
opencv_world480.lib;baseAlgorithm.lib;%(AdditionalDependencies)
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
diff --git a/boxCarMeasure_test/boxCarMeasure.vcxproj b/boxCarMeasure_test/boxCarMeasure.vcxproj
index 5b0a835..c67fd2b 100644
--- a/boxCarMeasure_test/boxCarMeasure.vcxproj
+++ b/boxCarMeasure_test/boxCarMeasure.vcxproj
@@ -80,12 +80,12 @@
true
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
false
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
@@ -121,12 +121,12 @@
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;
+ ..\..\thirdParty\opencv\build\include;
Console
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
opencv_world480d.lib;boxCarMeasure.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
@@ -138,14 +138,14 @@
true
NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;
+ ..\..\thirdParty\opencv\build\include;
Console
true
true
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
opencv_world480.lib;boxCarMeasure.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
diff --git a/boxCarMeasure_test/boxCarMeasureTest.cpp b/boxCarMeasure_test/boxCarMeasureTest.cpp
index 088d8a6..9285568 100644
--- a/boxCarMeasure_test/boxCarMeasureTest.cpp
+++ b/boxCarMeasure_test/boxCarMeasureTest.cpp
@@ -892,8 +892,8 @@ int main()
0.0, 0.0, 1.0 };
SG_boxCarMeasureParam algoParam;
- algoParam.filterParam.zJumpTh = 20.0; //噪声滤除。当相邻点的z跳变大于此门限时,检查是否为噪声。若长度小于outlierLen, 视为噪声
- algoParam.filterParam.outlierLen = 5;
+ //algoParam.filterParam.zJumpTh = 20.0; //噪声滤除。当相邻点的z跳变大于此门限时,检查是否为噪声。若长度小于outlierLen, 视为噪声
+ //algoParam.filterParam.outlierLen = 5;
algoParam.templatePara_HF.H_len = 25.0; //mm
algoParam.templatePara_HF.V_len = 100.0; //mm
diff --git a/fireBrickPositioning/fireBrickPositioning.vcxproj b/fireBrickPositioning/fireBrickPositioning.vcxproj
index c0cc837..241989e 100644
--- a/fireBrickPositioning/fireBrickPositioning.vcxproj
+++ b/fireBrickPositioning/fireBrickPositioning.vcxproj
@@ -88,11 +88,11 @@
true
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;..\..\..\..\codeHub\opencv\build\include;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;..\..\..\..\codeHub\opencv\build\include;$(IncludePath)
false
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;..\..\..\..\codeHub\opencv\build\include;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;..\..\..\..\codeHub\opencv\build\include;$(IncludePath)
@@ -128,12 +128,12 @@
true
VZ_API_LIBRARY;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Console
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
opencv_world480d.lib;%(AdditionalDependencies)
@@ -145,14 +145,14 @@
true
VZ_API_LIBRARY;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Console
true
true
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
opencv_world480.lib;%(AdditionalDependencies)
diff --git a/fireBrickPositioning_test/fireBrickPositioning_test.vcxproj b/fireBrickPositioning_test/fireBrickPositioning_test.vcxproj
index 064097c..2c93d09 100644
--- a/fireBrickPositioning_test/fireBrickPositioning_test.vcxproj
+++ b/fireBrickPositioning_test/fireBrickPositioning_test.vcxproj
@@ -78,11 +78,11 @@
true
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
false
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
@@ -118,12 +118,12 @@
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Console
true
- ..\..\..\上古\耐火砖\fireBrickPositioning\x64\Debug;..\..\..\..\codeHub\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
+ ..\..\build\x64\Debug;..\..\thirdParty\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
fireBrickPositioning.lib;opencv_world480d.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
@@ -135,14 +135,14 @@
true
NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Console
true
true
true
- ..\..\..\上古\耐火砖\fireBrickPositioning\x64\Release;..\..\..\..\codeHub\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
+ ..\..\build\x64\Release;..\..\thirdParty\opencv\build\x64\vc16\lib;%(AdditionalLibraryDirectories)
opencv_world480.lib;fireBrickPositioning.lib;%(AdditionalDependencies)
diff --git a/motorStatorPosition/motorStatorPosition.vcxproj b/motorStatorPosition/motorStatorPosition.vcxproj
index de4dccc..e5c72b7 100644
--- a/motorStatorPosition/motorStatorPosition.vcxproj
+++ b/motorStatorPosition/motorStatorPosition.vcxproj
@@ -79,12 +79,12 @@
true
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
false
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\..\..\..\codeHub\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\..\thirdParty\opencv\build\include;..\sourceCode;..\sourceCode\inc;$(IncludePath)
@@ -128,13 +128,13 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
true
false
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
opencv_world480d.lib;baseAlgorithm.lib;%(AdditionalDependencies)
@@ -148,7 +148,7 @@
true
NotUsing
pch.h
- ..\..\..\codeHub\opencv\build\include;%(AdditionalIncludeDirectories)
+ ..\..\thirdParty\opencv\build\include;%(AdditionalIncludeDirectories)
Windows
@@ -156,7 +156,7 @@
true
true
false
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
opencv_world480.lib;baseAlgorithm.lib;%(AdditionalDependencies)
diff --git a/motorStatorPosition_test/motorStatorPosition_test.vcxproj b/motorStatorPosition_test/motorStatorPosition_test.vcxproj
index 7c2e24a..c1b5dc6 100644
--- a/motorStatorPosition_test/motorStatorPosition_test.vcxproj
+++ b/motorStatorPosition_test/motorStatorPosition_test.vcxproj
@@ -79,12 +79,12 @@
true
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
false
$(SolutionDir)build\$(Platform)\$(Configuration)\
- ..\..\..\codeHub\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
+ ..\..\thirdParty\VzNLSDK\Inc;..\sourceCode;..\sourceCode\inc;$(IncludePath)
@@ -120,12 +120,12 @@
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;
+ ..\..\thirdParty\opencv\build\include;
Console
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Debug;%(AdditionalLibraryDirectories)
opencv_world480d.lib; motorStatorPosition.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
@@ -137,14 +137,14 @@
true
NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
- ..\..\..\codeHub\opencv\build\include;
+ ..\..\thirdParty\opencv\build\include;
Console
true
true
true
- ..\..\..\codeHub\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
+ ..\..\thirdParty\opencv\build\x64\vc16\lib;..\build\x64\Release;%(AdditionalLibraryDirectories)
opencv_world480.lib; motorStatorPosition.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
diff --git a/sourceCode/SG_baseAlgo_Export.h b/sourceCode/SG_baseAlgo_Export.h
index 14b47fa..552b2ec 100644
--- a/sourceCode/SG_baseAlgo_Export.h
+++ b/sourceCode/SG_baseAlgo_Export.h
@@ -60,7 +60,8 @@ SG_APISHARED_EXPORT void sg_getLineUpperSemiCircleFeature(
int lineIdx,
const double sieveDiameter,
const SSG_slopeParam slopePara,
- std::vector< SSG_featureSemiCircle>& line_features);
+ std::vector< SSG_featureSemiCircle>& line_features,
+ cv::Mat& holeMask);
///
/// ȡϵļֵ㣨ֵͼСֵ㣩
@@ -110,6 +111,16 @@ SG_APISHARED_EXPORT void sg_peakFeatureGrowing(
std::vector& trees,
SSG_treeGrowParam growParam);
+//semiCircle
+SG_APISHARED_EXPORT void sg_getFeatureGrowingTrees_semiCircle(
+ std::vector< SSG_featureSemiCircle>& lineFeatures,
+ const int lineIdx,
+ const int lineSize,
+ std::vector& trees,
+ std::vector& stopTrees,
+ std::vector& invalidTrees, //ƳЩܽĿֳɶӶƳ
+ SSG_treeGrowParam growParam);
+
SSG_meanVar _computeMeanVar(double* data, int size);
///ֲߵ㣨zС㣩
diff --git a/sourceCode/SG_baseDataType.h b/sourceCode/SG_baseDataType.h
index 7abd618..c2f44be 100644
--- a/sourceCode/SG_baseDataType.h
+++ b/sourceCode/SG_baseDataType.h
@@ -97,6 +97,7 @@ typedef struct
#define FEATURE_FLAG_INVLD_END 2
#define FEATURE_FLAG_VALID_START 3
#define FEATURE_FLAG_VALID_END 4
+#define FEATURE_FLAG_INVALID 5
typedef struct
{
int flag;
@@ -104,7 +105,7 @@ typedef struct
int startPtIdx;
int endPtIdx;
int midPtIdx;
- double midY;
+ SVzNL3DPoint midPt;
double width;
double pkHeight;
}SSG_featureSemiCircle;
@@ -204,6 +205,9 @@ typedef struct
int sLineIdx;
int eLineIdx;
SSG_ROIRectD roi;
+ SVzNL3DPoint centerPt;
+ SVzNL2DPoint centerPos;
+ int treeMidType; //1:Ѿӹ
std::vector< SSG_featureSemiCircle> treeNodes;
}SSG_semiCircleFeatureTree;
diff --git a/sourceCode/SG_featureGrow.cpp b/sourceCode/SG_featureGrow.cpp
index d69186c..91730fe 100644
--- a/sourceCode/SG_featureGrow.cpp
+++ b/sourceCode/SG_featureGrow.cpp
@@ -714,52 +714,156 @@ void sg_fillingNullNodes(std::vector& trees)
}
#endif
+
+//ж
+bool validGrowing(
+ SSG_featureSemiCircle& a_feature,
+ SSG_semiCircleFeatureTree& a_tree,
+ SSG_treeGrowParam growParam)
+{
+ SSG_featureSemiCircle last_node = a_tree.treeNodes.back();
+ double y_diff = abs(a_feature.midPt.y - last_node.midPt.y);
+ int line_diff = abs(a_feature.lineIdx - last_node.lineIdx);
+ double x_diff = abs(a_feature.midPt.x - last_node.midPt.x);
+ if ((y_diff < growParam.yDeviation_max) &&
+ ((line_diff < growParam.maxLineSkipNum) || (x_diff < growParam.maxSkipDistance)))
+ return true;
+ else
+ return false;
+}
+// featuretreesѰҺʵûкʵ㣬 false
+//ûʹȫƥ䡣һfeatureһƥϣƥɡûʹƥ䡣
+int _featureGrowing_semiCircle(
+ SSG_featureSemiCircle& a_feature,
+ std::vector&trees,
+ SSG_treeGrowParam growParam)
+{
+ if ((FEATURE_FLAG_INVLD_START == a_feature.flag) || (FEATURE_FLAG_VALID_START == a_feature.flag))
+ return -1;
+
+ for (int i = 0, i_max = trees.size(); i < i_max; i++)
+ {
+ SSG_semiCircleFeatureTree& a_tree = trees[i];
+ if (TREE_STATE_DEAD == a_tree.treeState)
+ continue;
+ //
+ SSG_featureSemiCircle last_node = a_tree.treeNodes.back();
+ if ( (last_node.lineIdx == a_feature.lineIdx)|| //xΪlineIdxͬһɨϵIJ
+ (FEATURE_FLAG_INVLD_END == last_node.flag) || (FEATURE_FLAG_VALID_END == last_node.flag))
+ continue;
+
+ //ж
+ bool vldGrowing = validGrowing(a_feature, a_tree, growParam);
+ if (true == vldGrowing)
+ return i;
+ }
+ return -1;
+}
+
+bool _invalidateSemiCircleTrees(SSG_semiCircleFeatureTree& a_tree, double minTreeLen)
+{
+ SSG_featureSemiCircle* first_node = &(a_tree.treeNodes[0]);
+ SSG_featureSemiCircle* last_node = &(a_tree.treeNodes[a_tree.treeNodes.size() - 1]);
+ double len = sqrt(pow(first_node->midPt.x - last_node->midPt.x, 2) + pow(first_node->midPt.y - last_node->midPt.y, 2));
+ if (len <= minTreeLen)
+ return false;
+ else
+ return true;
+}
+
void sg_getFeatureGrowingTrees_semiCircle(
std::vector< SSG_featureSemiCircle>& lineFeatures,
+ const int lineIdx,
+ const int lineSize,
std::vector& trees,
+ std::vector& stopTrees,
+ std::vector& invalidTrees,
SSG_treeGrowParam growParam)
{
for (int i = 0, i_max = lineFeatures.size(); i < i_max; i++)
{
- SSG_lineFeature& a_line = lineFeatures[i];
- if (a_line.features.size() > 0)
+ SSG_featureSemiCircle& a_feature = lineFeatures[i];
+ if (FEATURE_FLAG_INVALID == a_feature.flag)
+ continue;
+
+ if ( (a_feature.lineIdx >= 205) && (i == 5))
+ int kkk = 1;
+ int matchedTreeIdx = _featureGrowing_semiCircle(a_feature, trees, growParam);
+ if (matchedTreeIdx >= 0)
{
- for (int j = 0, j_max = a_line.features.size(); j < j_max; j++)
+ //ƥ
+ std::vector otherMatching;
+ for (int j = i + 1; j < i_max; j++)
{
- SSG_basicFeature1D& a_feature = a_line.features[j];
- if (a_feature.jumpPos2D.x == 207)
- int kkk = 1;
- bool isMatched = _featureGrowing(a_feature, a_line.lineIdx, trees, growParam);
- if (false == isMatched)
+ bool vldGrowing = validGrowing(lineFeatures[j], trees[matchedTreeIdx], growParam);
+ if (false == vldGrowing)
+ break;
+ otherMatching.push_back(j);
+ }
+ if (otherMatching.size() > 0)
+ {
+ SSG_featureSemiCircle last_node = trees[matchedTreeIdx].treeNodes.back();
+ double minDist = abs(a_feature.midPt.y - last_node.midPt.y);
+ int bestMatch = i;
+ //ȡСƥ
+ for (int m = 0, m_max = otherMatching.size(); m < m_max; m++)
{
- //µ
- SSG_featureTree a_newTree;
- a_newTree.treeNodes.push_back(a_feature);
- a_newTree.treeState = TREE_STATE_ALIVE;
- a_newTree.treeType = a_feature.featureType;
- a_newTree.sLineIdx = a_line.lineIdx;
- a_newTree.eLineIdx = a_line.lineIdx;
- trees.push_back(a_newTree);
+ int idx = otherMatching[m];
+ double y_diff = abs(lineFeatures[idx].midPt.y - last_node.midPt.y);
+ if (y_diff < minDist)
+ {
+ minDist = y_diff;
+ bestMatch = idx;
+ }
+ }
+ otherMatching.push_back(i);
+ for (int m = 0, m_max = otherMatching.size(); m < m_max; m++)
+ {
+ int idx = otherMatching[m];
+ if (bestMatch == idx)
+ {
+ trees[matchedTreeIdx].eLineIdx = lineFeatures[idx].lineIdx;
+ trees[matchedTreeIdx].treeNodes.push_back(lineFeatures[idx]);
+ }
+ lineFeatures[idx].flag = FEATURE_FLAG_INVALID;
}
}
- }
- //ֹͣ,١
- //ڵΪ1Ƴ
- int lineIdx = a_line.lineIdx;
- int m_max = trees.size();
- for (int m = m_max - 1; m >= 0; m--) //ӺǰɾӰѭ
- {
- if (TREE_STATE_ALIVE == trees[m].treeState)
+ else
{
- int line_diff = abs(lineIdx - trees[m].treeNodes.back().jumpPos2D.x);
- if (((growParam.maxLineSkipNum > 0) && (line_diff > growParam.maxLineSkipNum)) ||
- (i == i_max - 1))
- {
- trees[m].treeState = TREE_STATE_DEAD;
- bool isValid = _invalidateVSlopeTrees(trees[m], growParam.minLTypeTreeLen, growParam.minVTypeTreeLen);
- if (false == isValid)
- trees.erase(trees.begin() + m);
- }
+ trees[matchedTreeIdx].eLineIdx = a_feature.lineIdx;
+ trees[matchedTreeIdx].treeNodes.push_back(a_feature);
+ }
+ }
+ else //(false == isMatched)
+ {
+ //µ
+ SSG_semiCircleFeatureTree a_newTree;
+ a_newTree.treeNodes.push_back(a_feature);
+ a_newTree.treeState = TREE_STATE_ALIVE;
+ a_newTree.treeType = 0;
+ a_newTree.sLineIdx = a_feature.lineIdx;
+ a_newTree.eLineIdx = a_feature.lineIdx;
+ trees.push_back(a_newTree);
+ }
+ }
+ //ֹͣ,١
+ //ڵΪ1Ƴ
+ int m_max = trees.size();
+ for (int m = m_max - 1; m >= 0; m--) //ӺǰɾӰѭ
+ {
+ if (TREE_STATE_ALIVE == trees[m].treeState)
+ {
+ int line_diff = abs(lineIdx - trees[m].treeNodes.back().lineIdx);
+ if (((growParam.maxLineSkipNum > 0) && (line_diff > growParam.maxLineSkipNum)) ||
+ (lineIdx == lineSize-1))
+ {
+ trees[m].treeState = TREE_STATE_DEAD;
+ bool isValid = _invalidateSemiCircleTrees(trees[m], growParam.minVTypeTreeLen);
+ if (true == isValid)
+ stopTrees.push_back(trees[m]);
+ else
+ invalidTrees.push_back(trees[m]);
+ trees.erase(trees.begin() + m);
}
}
}
diff --git a/sourceCode/SG_lineFeature.cpp b/sourceCode/SG_lineFeature.cpp
index c6b9db3..52d2ab4 100644
--- a/sourceCode/SG_lineFeature.cpp
+++ b/sourceCode/SG_lineFeature.cpp
@@ -1657,9 +1657,10 @@ void sg_getLineUpperSemiCircleFeature(
int lineIdx,
const double sieveDiameter,
const SSG_slopeParam slopePara,
- std::vector< SSG_featureSemiCircle>& line_features)
+ std::vector< SSG_featureSemiCircle>& result_features,
+ cv::Mat& holeMask) //holeMaskкϲ
{
- if (lineIdx == 54)
+ if (lineIdx == 194)
int kkk = 1;
//ȥ
std::vector< SVzNL3DPosition> vldPts;
@@ -2021,6 +2022,7 @@ void sg_getLineUpperSemiCircleFeature(
}
//validCornerPeakP
+ std::vector< SSG_featureSemiCircle> line_features;
for (int i = 0, i_max = localMin.size(); i < i_max; i++)
{
int ptIdx = localMin[i].jumpPos2D.y;
@@ -2064,13 +2066,13 @@ void sg_getLineUpperSemiCircleFeature(
a_feature.width = yDist;
a_feature.lineIdx = lineIdx;
a_feature.midPtIdx = _getYNearestPtIdx(lineData, preIdx, postIdx, midY);
- a_feature.midY = lineData[a_feature.midPtIdx].pt3D.y;
+ a_feature.midPt = lineData[a_feature.midPtIdx].pt3D;
if (a_feature.midPtIdx >= 0);
{
int pkIdx = _getSegPeak(lineData, preIdx, postIdx);
a_feature.pkHeight = lineData[pkIdx].pt3D.z;
line_features.push_back(a_feature);
- for (int m = preIdx; m <= postIdx; m++)
+ for (int m = a_feature.startPtIdx; m <= a_feature.endPtIdx; m++)
{
if (0 == endingFlag[m])
endingFlag[m] = 1;
@@ -2093,13 +2095,13 @@ void sg_getLineUpperSemiCircleFeature(
a_feature.lineIdx = lineIdx;
double midY = (lineData[preIdx].pt3D.y + lineData[postIdx].pt3D.y) / 2.0;
a_feature.midPtIdx = _getYNearestPtIdx(lineData, preIdx, postIdx, midY);
- a_feature.midY = lineData[a_feature.midPtIdx].pt3D.y;
+ a_feature.midPt = lineData[a_feature.midPtIdx].pt3D;
if (a_feature.midPtIdx >= 0)
{
int pkPtIdx = _getSegPeak(lineData, preIdx, postIdx);
a_feature.pkHeight = lineData[pkPtIdx].pt3D.z;
line_features.push_back(a_feature);
- for (int m = preIdx; m <= postIdx; m++)
+ for (int m = a_feature.startPtIdx; m <= a_feature.endPtIdx; m++)
{
if (0 == endingFlag[m])
endingFlag[m] = 1;
@@ -2110,9 +2112,42 @@ void sg_getLineUpperSemiCircleFeature(
}
}
+ //ݿĿкϲ
+ for (int i = 0, i_max = line_features.size(); i < i_max; i++)
+ {
+ if (FEATURE_FLAG_INVALID == line_features[i].flag)
+ continue;
+
+ if (i < i_max - 1)
+ {
+ int idx1 = line_features[i].endPtIdx + 1;
+ int holeId1 = holeMask.at(idx1, lineIdx);
+ int idx2 = line_features[i + 1].startPtIdx - 1;
+ int holeId2 = holeMask.at(idx2, lineIdx);
+ if( (holeId1 > 0) && (holeId1 == holeId2))
+ {
+ //ϲ
+ line_features[i].endPtIdx = line_features[i + 1].endPtIdx;
+ double midY = (lineData[line_features[i].startPtIdx].pt3D.y + lineData[line_features[i].endPtIdx].pt3D.y) / 2;
+ line_features[i].midPtIdx = _getYNearestPtIdx(lineData, line_features[i].startPtIdx, line_features[i].endPtIdx, midY);
+ line_features[i].midPt = lineData[line_features[i].midPtIdx].pt3D;
+ line_features[i].width = abs(lineData[line_features[i].startPtIdx].pt3D.y - lineData[line_features[i].endPtIdx].pt3D.y);
+ int pkPtIdx = _getSegPeak(lineData, line_features[i].startPtIdx, line_features[i].endPtIdx);
+ line_features[i].pkHeight = lineData[pkPtIdx].pt3D.z;
+ result_features.push_back(line_features[i]);
+ line_features[i + 1].flag = FEATURE_FLAG_INVALID;
+ }
+ else
+ {
+ result_features.push_back(line_features[i]);
+ }
+ }
+ }
return;
}
+
+
//鳤ʱʹýԱ̫ƽͿ
//zΪJumpTrueJumpSeedǰһzı仯
bool _getPtPreMaxDelta(
diff --git a/sourceCode/motorStatorPosition.cpp b/sourceCode/motorStatorPosition.cpp
index f9a6ad5..f7b2c38 100644
--- a/sourceCode/motorStatorPosition.cpp
+++ b/sourceCode/motorStatorPosition.cpp
@@ -94,7 +94,7 @@ SSG_objSideInfo _getSideY(
sideInfo.sideDist = edge_y;
}
sideInfo.isSide = true;
- return;
+ return sideInfo;
}
void _getNeighbouringInfo(
diff --git a/sourceCode/sieveNodeDetection.cpp b/sourceCode/sieveNodeDetection.cpp
index 5c9f11b..259ed89 100644
--- a/sourceCode/sieveNodeDetection.cpp
+++ b/sourceCode/sieveNodeDetection.cpp
@@ -12,6 +12,7 @@ void sg_lineDataR(SVzNL3DLaserLine* a_line,
lineDataRT(a_line, camPoseR, groundH);
}
+#if 0
//ɨߴдֱȡ
void sg_sieveNodeDetection_lineProc(
SVzNL3DLaserLine* a_line,
@@ -39,10 +40,12 @@ void sg_sieveNodeDetection_lineProc(
all_vLineFeatures.push_back(a_line_features); //Ҳ룬֤ܰк
return;
}
+#endif
int _checkFeatureSplit(
SSG_featureSemiCircle& a_feaurue,
std::vector< SSG_featureSemiCircle>& chk_line_feature,
+ double splitMinDist,
double splitMaxDist) //ڴ˾ΪЧֲ
{
int split = -1;
@@ -51,11 +54,11 @@ int _checkFeatureSplit(
{
if (i < i_max - 1)
{
- if ((chk_line_feature[i].midY < a_feaurue.midY) && (chk_line_feature[i + 1].midY > a_feaurue.midY))
+ if ((chk_line_feature[i].midPt.y < a_feaurue.midPt.y) && (chk_line_feature[i + 1].midPt.y > a_feaurue.midPt.y))
{
- double dist_1 = abs(chk_line_feature[i].midY - a_feaurue.midY);
- double dist_2 = abs(chk_line_feature[i+1].midY - a_feaurue.midY);
- if ((dist_1 < splitMaxDist) && (dist_2 < splitMaxDist))
+ double dist_1 = abs(chk_line_feature[i].midPt.y - a_feaurue.midPt.y);
+ double dist_2 = abs(chk_line_feature[i+1].midPt.y - a_feaurue.midPt.y);
+ if ((dist_1 > splitMinDist) && (dist_1 < splitMaxDist) && (dist_2 > splitMinDist)&& (dist_2 < splitMaxDist))
{
split = i;
break;
@@ -66,30 +69,157 @@ int _checkFeatureSplit(
return split;
}
+bool compareByWidth(const SSG_featureSemiCircle& a, const SSG_featureSemiCircle& b) {
+ return a.width < b.width;
+}
+
+SVzNL3DPoint _getMeanPt(
+ std::vector& nodes,
+ SVzNL3DLaserLine* laser3DPoints)
+{
+ int nodeSize = nodes.size();
+ int num = 0;
+ SVzNL3DPoint meanPt = { 0.0,0.0,0.0 };
+ for (int i = 0; i < nodeSize; i++)
+ {
+ SSG_featureSemiCircle& a_node = nodes[i];
+ int lineIdx = a_node.lineIdx;
+ for (int j = a_node.startPtIdx; j <= a_node.endPtIdx; j++)
+ {
+ if (laser3DPoints[lineIdx].p3DPosition[j].pt3D.z > 1e-4)
+ {
+ num++;
+ meanPt.x += laser3DPoints[lineIdx].p3DPosition[j].pt3D.x;
+ meanPt.y += laser3DPoints[lineIdx].p3DPosition[j].pt3D.y;
+ meanPt.z += laser3DPoints[lineIdx].p3DPosition[j].pt3D.z;
+ }
+ }
+ }
+ if (num > 0)
+ {
+ meanPt.x = meanPt.x / num;
+ meanPt.y = meanPt.y / num;
+ meanPt.z = meanPt.z / num;
+ }
+ return meanPt;
+}
+
+SVzNL2DPoint _getNearestScanPt(
+ std::vector& nodes,
+ SVzNL3DLaserLine* laser3DPoints,
+ SVzNL3DPoint objPt)
+{
+ int nodeSize = nodes.size();
+ SVzNL2DPoint bestPos = { -1, -1 };
+ double minDist = -1;
+ for (int i = 0; i < nodeSize; i++)
+ {
+ SSG_featureSemiCircle& a_node = nodes[i];
+ int lineIdx = a_node.lineIdx;
+ for (int j = a_node.startPtIdx; j <= a_node.endPtIdx; j++)
+ {
+ if (laser3DPoints[lineIdx].p3DPosition[j].pt3D.z > 1e-4)
+ {
+ SVzNL3DPoint& a_pt = laser3DPoints[lineIdx].p3DPosition[j].pt3D;
+ double dist = sqrt(pow(a_pt.x - objPt.x, 2) + pow(a_pt.y - objPt.y, 2));
+ if (minDist < 0)
+ {
+ minDist = dist;
+ bestPos = { a_node.lineIdx, j };
+ }
+ else
+ {
+ if (minDist > dist)
+ {
+ minDist = dist;
+ bestPos = { a_node.lineIdx, j };
+ }
+ }
+ }
+ }
+ }
+ return bestPos;
+}
+
+
void sg_getSieveNodes(
SVzNL3DLaserLine* laser3DPoints,
int lineNum,
const SSG_sieveNodeDetectionParam sieveDetectParam,
std::vector& nodePos)
{
+ const int hole_max_ptSize = 20;
int errCode = 0;
- std::vector> noisePts;
- std::vector> all_vLineFeatures;
for (int i = 0; i < lineNum; i++)
{
if (i == 19)
int kkk = 1;
+
+ sg_lineDataRemoveOutlier_changeOriginData(
+ laser3DPoints[i].p3DPosition,
+ laser3DPoints[i].nPositionCnt,
+ sieveDetectParam.filterParam);
+
//nPointIdxתʹǰ
for (int j = 0; j < laser3DPoints[i].nPositionCnt; j++)
laser3DPoints[i].p3DPosition[j].nPointIdx = 0;
- //д
- sg_sieveNodeDetection_lineProc(
- &laser3DPoints[i],
+ }
+ //⣬СĿҪϲ
+ int maskY = laser3DPoints[0].nPositionCnt;
+ int maskX = lineNum;
+ //ɿעMaskĿע
+ cv::Mat bwImg = cv::Mat::zeros(maskY, maskX, CV_8UC1);//rows, cols
+ for (int i = 0; i < lineNum; i++)
+ {
+ for (int j = 0; j < laser3DPoints[i].nPositionCnt; j++)
+ {
+ if(laser3DPoints[i].p3DPosition[j].pt3D.z < 1e-4)
+ bwImg.at(j, i) = 1;
+ }
+ }
+ //Ŀע
+ cv::Mat labImg;
+ std::vector labelRgns;
+ SG_TwoPassLabel(bwImg, labImg, labelRgns, 8);
+ //Ŀбʶ
+ cv::Mat holeMask = cv::Mat::zeros(maskY, maskX, CV_32SC1);//rows, cols
+ for (int i = 0, i_max = labelRgns.size(); i < i_max; i++)
+ {
+ int rgnID = labelRgns[i].labelID;
+ if (labelRgns[i].ptCounter < hole_max_ptSize) //
+ {
+ for (int m = labelRgns[i].roi.left; m <= labelRgns[i].roi.right; m++)
+ {
+ for (int n = labelRgns[i].roi.top; n <= labelRgns[i].roi.bottom; n++)
+ {
+ if (rgnID == labImg.at(n, m))
+ holeMask.at(n, m) = rgnID;
+ }
+ }
+ }
+ }
+#if _OUTPUT_LINE_PROC_RESULT
+ cv::Mat holeMaskImage;
+ cv::normalize(holeMask, holeMaskImage, 0, 255, cv::NORM_MINMAX, CV_8U);
+ cv::imwrite("holeMask.png", holeMaskImage);
+#endif
+
+ std::vector> all_vLineFeatures;
+ for (int i = 0; i < lineNum; i++)
+ {
+ std::vector< SSG_featureSemiCircle> a_line_features;
+ sg_getLineUpperSemiCircleFeature(
+ laser3DPoints[i].p3DPosition,
+ laser3DPoints[i].nPositionCnt,
i,
- &errCode,
- all_vLineFeatures,
- noisePts,
- sieveDetectParam);
+ sieveDetectParam.sieveDiameter,
+ sieveDetectParam.slopeParam,
+ a_line_features,
+ holeMask);
+ //nPointIdxתʹǰ
+ for (int j = 0; j < laser3DPoints[i].nPositionCnt; j++)
+ laser3DPoints[i].p3DPosition[j].nPointIdx = 0;
+ all_vLineFeatures.push_back(a_line_features); //Ҳ룬֤ܰк
}
//ɸصȥЧfeaturefeatureһɨ߱ϲһfeatureʱ˵һɨߵfeatureЧfeatureڵfeatureΪЧfeature
@@ -102,7 +232,7 @@ void sg_getSieveNodes(
std::vector< SSG_featureSemiCircle>& pre_line_features = all_vLineFeatures[i-1];
for (int j = 0, j_max = line_features.size(); j < j_max; j++)
{
- int split = _checkFeatureSplit(line_features[j], pre_line_features, sieveDetectParam.sieveHoleSize);
+ int split = _checkFeatureSplit(line_features[j], pre_line_features, sieveDetectParam.sieveDiameter/2, sieveDetectParam.sieveHoleSize);
if (split >= 0)
{
pre_line_features[split].flag = FEATURE_FLAG_INVLD_END;
@@ -117,7 +247,7 @@ void sg_getSieveNodes(
std::vector< SSG_featureSemiCircle>& post_line_features = all_vLineFeatures[i + 1];
for (int j = 0, j_max = line_features.size(); j < j_max; j++)
{
- int split = _checkFeatureSplit(line_features[j], post_line_features, sieveDetectParam.sieveHoleSize);
+ int split = _checkFeatureSplit(line_features[j], post_line_features, sieveDetectParam.sieveDiameter/2, sieveDetectParam.sieveHoleSize);
if (split >= 0)
{
post_line_features[split].flag = FEATURE_FLAG_INVLD_START;
@@ -129,23 +259,64 @@ void sg_getSieveNodes(
}
//featureЧfeatureֹͣЧΪ㡣ϵfeatureΪЧfeature
- sg_getFeatureGrowingTrees_semiCircle(
- lineFeatures,
- trees,
- growParam);
+ std::vector trees;
+ std::vector stopTrees; //ֹͣ
+ std::vector invalidTrees; //ƳЩܽĿֳɶӶƳҪ
+ for (int i = 0; i < lineNum; i++)
+ {
+ //ǰһɨ߱Ƚ,Ѱҿʼ
+ std::vector< SSG_featureSemiCircle>& line_features = all_vLineFeatures[i];
+ sg_getFeatureGrowingTrees_semiCircle(
+ line_features,
+ i,
+ lineNum,
+ trees,
+ stopTrees,
+ invalidTrees,
+ sieveDetectParam.growParam);
+ }
+ //ȷȷӵ
+ for (int i = 0, i_max = stopTrees.size(); i < i_max; i++)
+ {
+ //ӶΪΪеģx,y,z)ƽģ
+ SSG_semiCircleFeatureTree& a_tree = stopTrees[i];
+ a_tree.centerPt = _getMeanPt(a_tree.treeNodes, laser3DPoints);
+ a_tree.centerPos = _getNearestScanPt(a_tree.treeNodes, laser3DPoints, a_tree.centerPt);
+ //жϺǷӹмĸ߶ߵм߶ȱȽ
+ }
+
+ //
+ // (1)2Dʵ
+ //2
+ std::vector> sortedTrees;
+ for (int i = 0, i_max = stopTrees.size(); i < i_max; i++)
+ {
+ //if(stopTrees[i].)
+ }
+
+ //©
+
+ //
+
#if _OUTPUT_LINE_PROC_RESULT
//ɨߴ
- for (int i = 0, i_max = all_vLineFeatures.size(); i < i_max; i++)
+ for (int i = 0, i_max = stopTrees.size(); i < i_max; i++)
{
- std::vector< SSG_featureSemiCircle>& a_line_features = all_vLineFeatures[i];
- for (int j = 0, j_max = a_line_features.size(); j < j_max; j++)
+ std::vector< SSG_featureSemiCircle>& a_tree_features = stopTrees[i].treeNodes;
+ for (int j = 0, j_max = a_tree_features.size(); j < j_max; j++)
{
- SSG_featureSemiCircle& a_feature = a_line_features[j];
+ SSG_featureSemiCircle& a_feature = a_tree_features[j];
for (int m = a_feature.startPtIdx; m <= a_feature.endPtIdx; m++)
- laser3DPoints[i].p3DPosition[m].nPointIdx = 1; //˴nPointIdxת
- laser3DPoints[i].p3DPosition[a_feature.midPtIdx].nPointIdx = 2;
+ laser3DPoints[a_feature.lineIdx].p3DPosition[m].nPointIdx = 1; //˴nPointIdxת
+
+ laser3DPoints[a_feature.lineIdx].p3DPosition[a_feature.midPtIdx].nPointIdx = 2;
+ if(stopTrees[i].treeType == 0)
+ laser3DPoints[stopTrees[i].centerPos.x].p3DPosition[stopTrees[i].centerPos.y].nPointIdx = 3;
+ else
+ laser3DPoints[stopTrees[i].centerPos.x].p3DPosition[stopTrees[i].centerPos.y].nPointIdx = 4;
+
}
}
#endif