From 8d34a53acea30263f5f780618e1a3e2f3822668f Mon Sep 17 00:00:00 2001 From: jerryzeng Date: Wed, 11 Jun 2025 22:14:52 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E6=94=B9=E4=BA=86=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=BA=93=E7=9B=AE=E5=BD=95=EF=BC=8C=E7=9B=B8?= =?UTF-8?q?=E5=BA=94=E4=BF=AE=E6=94=B9=E4=BA=86=E5=B7=A5=E7=A8=8B=E6=96=87?= =?UTF-8?q?=E4=BB=B6=202.=20=E7=AD=9B=E7=BD=91=E5=B7=A5=E7=A8=8B=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E4=B8=AD=E7=9B=B8=E5=BA=94=E6=96=87=E4=BB=B6=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SieveNodeDetection/SieveNodeDetection.vcxproj | 12 +- .../SieveNodeDetection_test.cpp | 24 +- .../SieveNodeDetection_test.vcxproj | 12 +- bagPositioning/bagPositioning.vcxproj | 12 +- bagPositioning_test/bagPositioning_test.cpp | 32 +-- .../bagPositioning_test.vcxproj | 12 +- baseAlgorithm/baseAlgorithm.vcxproj | 12 +- .../beltTearingDetection.vcxproj | 12 +- .../beltTearingDetection_test.vcxproj | 12 +- boxCarMeasure/boxCarMeasureDll.vcxproj | 12 +- boxCarMeasure_test/boxCarMeasure.vcxproj | 12 +- boxCarMeasure_test/boxCarMeasureTest.cpp | 4 +- .../fireBrickPositioning.vcxproj | 12 +- .../fireBrickPositioning_test.vcxproj | 12 +- .../motorStatorPosition.vcxproj | 12 +- .../motorStatorPosition_test.vcxproj | 12 +- sourceCode/SG_baseAlgo_Export.h | 13 +- sourceCode/SG_baseDataType.h | 6 +- sourceCode/SG_featureGrow.cpp | 170 +++++++++++--- sourceCode/SG_lineFeature.cpp | 47 +++- sourceCode/motorStatorPosition.cpp | 2 +- sourceCode/sieveNodeDetection.cpp | 221 ++++++++++++++++-- 22 files changed, 500 insertions(+), 175 deletions(-) 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