algoLib/sourceCode/SG_baseAlgo_Export.h

637 lines
21 KiB
C
Raw Normal View History

2025-06-08 10:46:41 +08:00
#pragma once
2025-12-06 00:11:43 +08:00
#include "SG_algo_Export.h"
2025-06-08 10:46:41 +08:00
#include <vector>
#include <opencv2/opencv.hpp>
2025-06-08 10:46:41 +08:00
//<2F>˳<EFBFBD><CBB3><EFBFBD>Ⱥ<EFBFBD><C8BA>:z<><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_lineDataRemoveOutlier(
SVzNL3DPosition* lineData,
int dataSize,
SSG_outlierFilterParam filterParam,
std::vector<SVzNL3DPosition>& filerData,
std::vector<int>& noisePts);
//<2F>˳<EFBFBD><CBB3><EFBFBD>Ⱥ<EFBFBD>㣺z<E3A3BA><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD>,<2C>ı<EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_lineDataRemoveOutlier_changeOriginData(
SVzNL3DPosition* lineData,
int dataSize,
SSG_outlierFilterParam filterParam);
//<2F>˳<EFBFBD><CBB3><EFBFBD>Ⱥ<EFBFBD>㣺z<E3A3BA><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD>, vecotr<74><72><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void wd_vectorDataRemoveOutlier_overwrite(
std::vector<SVzNL3DPosition>& a_line,
SSG_outlierFilterParam filterParam);
2025-06-08 10:46:41 +08:00
//<2F>˳<EFBFBD><CBB3><EFBFBD>Ⱥ<EFBFBD><EFBFBD><E3A3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_lineDataRemoveOutlier_ptDistMethod(
SVzNL3DPosition* lineData,
int dataSize,
SSG_outlierFilterParam filterParam,
std::vector<SVzNL3DPosition>& filerData,
std::vector<int>& noisePts);
2025-06-08 10:46:41 +08:00
//ƽ<><C6BD>
SG_APISHARED_EXPORT void sg_lineDataSmoothing(
std::vector<SVzNL3DPosition>& input,
int smoothWin,
std::vector<SVzNL3DPosition>& output);
2025-07-18 16:27:34 +08:00
//<2F>ֶ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD>ֶζ˵<CEB6>
SG_APISHARED_EXPORT void sg_lineSegSmoothing(
std::vector<SVzNL3DPosition>& input,
double seg_y_deltaTh, //<2F>ֶε<D6B6>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ˼<DAB4><CBBC><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>µķֶ<C4B7>
double seg_z_deltaTh,//<2F>ֶε<D6B6>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ˼<DAB4><CBBC><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>µķֶ<C4B7>
int smoothWin,
std::vector<SVzNL3DPosition>& output);
2025-06-08 10:46:41 +08:00
//VZ_APISHARED_EXPORT void sg_getLineMeanVar();
SG_APISHARED_EXPORT void sg_getLineLVFeature(
SVzNL3DPosition* lineData,
int dataSize,
int lineIdx,
const SSG_slopeParam slopeParam,
const SSG_VFeatureParam valleyPara,
SSG_lineFeature* line_features);
//<2F><>ȡɨ<C8A1><C9A8><EFBFBD>߹յ<DFB9><D5B5><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_getLineCornerFeature(
SVzNL3DPosition* lineData,
int dataSize,
int lineIdx,
const SSG_cornerParam cornerPara, //scaleͨ<65><CDA8>ȡbagH<67><48>1/4
SSG_lineFeature* line_features);
// <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mask(nPointIdxת<78><EFBFBD>壩ָ<E5A3A9><D6B8><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵĹյ<C4B9><D5B5><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_maskData_getLineCornerFeature(
std::vector< SVzNL3DPosition>& lineData,
int lineIdx,
int maskID,
const SSG_cornerParam cornerPara, //scaleͨ<65><CDA8>ȡbagH<67><48>1/4
std::vector<SSG_basicFeature1D>& features);
//<2F><>ȡGap<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Gap<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Corner<65><72><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_getLineGapFeature(
std::vector<SVzNL3DPosition>& lineData, //ɨ<><C9A8><EFBFBD><EFBFBD>
int lineIdx, //<2F><>ǰɨ<C7B0><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const SSG_cornerParam cornerPara,
const SVzNLRangeD gapParam,
std::vector<SSG_basicFeatureGap>& line_gaps);
SG_APISHARED_EXPORT void sg_getLineCornerFeature_BQ(
SVzNL3DPosition* lineData,
int dataSize,
int lineIdx,
double refSteppingZ,
const SSG_cornerParam cornerPara,
std::vector<SSG_basicFeature1D>& line_features);
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵĹյ<C4B9><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵㸽<CBB5><E3B8BD><EFBFBD>Ĺյ<C4B9><D5B5><EFBFBD>Ϊ<EFBFBD>ϸ<EFBFBD><CFB8>յ<EFBFBD>
/// <20><><EFBFBD><EFBFBD>Seg<65><67><EFBFBD><EFBFBD>corner<65><72>ȡ
/// nPointIdx<64><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>Feature<72><65><EFBFBD><EFBFBD>
/// <20><EFBFBD><E3B7A8><EFBFBD>̣<EFBFBD>
/// <20><>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>Ǻͺ<C7BA><CDBA><EFBFBD><EFBFBD><EFBFBD>
/// <20><>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սǣ<D5BD>˳ʱ<CBB3><CAB1>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD><CEAA>
/// <20><>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սǵļ<C7B5><C4BC><EFBFBD>ֵ<EFBFBD><D6B5>
/// <20><>4<EFBFBD><34><EFBFBD>жϹս<CFB9><D5BD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
/// </summary>
SG_APISHARED_EXPORT void sg_getLineContourCornerFeature_groundMask_BQ(
std::vector<SVzNL3DPosition>& lineData,
std::vector<int> groundMask,
int lineIdx,
double contourWin, //ground<6E><64>Ե<EFBFBD><D4B5>Χ
const SSG_cornerParam cornerPara, //scaleͨ<65><CDA8>ȡbagH<67><48>1/4
std::vector<SSG_basicFeature1D>& line_features);
SG_APISHARED_EXPORT void wd_getLineDataIntervals(
std::vector<SVzNL3DPosition>& lineData,
const SSG_lineSegParam lineSegPara,
std::vector<SSG_RUN>& segs);
// <20><>С<EFBFBD><EFBFBD><E3BCAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ߣ<EFBFBD>
const int MIN_POINT_COUNT = 3;
//ʹ<>ö˵<C3B6>ֱ<EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㵽ֱ<E3B5BD>ߵľ<DFB5><C4BE><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޵ķָ<C4B7>
SG_APISHARED_EXPORT void split(
SSG_RUN a_run,
std::vector< SVzNL3DPosition>& lineData,
const double maxError,
std::vector< SSG_RUN>& lineSegs);
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4A1A2><EFBFBD><EFBFBD>z<EFBFBD><7A>ֵ<EFBFBD><D6B5>V<EFBFBD><56>L<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣨PSM)
/// seg<65>˵㣺z<E3A3BA><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// nPointIdx<64><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>Feature<72><65><EFBFBD><EFBFBD>
/// <20><EFBFBD><E3B7A8><EFBFBD>̣<EFBFBD>
/// <20><>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>Ǻͺ<C7BA><CDBA><EFBFBD><EFBFBD><EFBFBD>
/// <20><>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սǣ<D5BD>˳ʱ<CBB3><CAB1>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD><CEAA>
/// <20><>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սǵļ<C7B5><C4BC><EFBFBD>ֵ<EFBFBD><D6B5>
/// <20><>4<EFBFBD><34><EFBFBD>жϹս<CFB9><D5BD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
/// </summary>
SG_APISHARED_EXPORT void wd_getLineCornerFeature_PSM(
SVzNL3DPosition* lineData,
int dataSize,
int lineIdx,
const double groundZ,
const SSG_cornerParam cornerPara,
SSG_lineFeature* line_features);
2025-12-05 18:41:05 +08:00
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ȷ<EFBFBD><C8B7>
/// seg<65>˵㣺z<E3A3BA><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// nPointIdx<64><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>Feature<72><65><EFBFBD><EFBFBD>
/// <20><EFBFBD><E3B7A8><EFBFBD>̣<EFBFBD>
/// <20><>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>Ǻͺ<C7BA><CDBA><EFBFBD><EFBFBD><EFBFBD>
/// <20><>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սǣ<D5BD>˳ʱ<CBB3><CAB1>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD><CEAA>
/// <20><>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սǵļ<C7B5><C4BC><EFBFBD>ֵ<EFBFBD><D6B5>
/// <20><>4<EFBFBD><34><EFBFBD>жϹս<CFB9><D5BD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
/// </summary>
SG_APISHARED_EXPORT void wd_getRingArcFeature(
std::vector< SVzNL3DPosition>& lineData,
int lineIdx,
const SSG_cornerParam cornerPara,
double ringArcWidth, //<2F><><EFBFBD>ӵĻ<D3B5><C4BB><EFBFBD><EFBFBD><EFBFBD>
std::vector<SWD_segFeature>& line_ringArcs //<2F><>
);
//ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>split-and-merge<67><65><EFBFBD><EFBFBD><EFBFBD>˼򻯣<CBBC><F2BBAFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>ֱ<EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>
SG_APISHARED_EXPORT void wd_surfaceLineSegment(
std::vector< SVzNL3DPosition>& lineData,
int lineIdx,
SVzNLRangeD lineLenRange,
const SSG_lineSegParam lineSegPara,
std::vector<SSG_featureSemiCircle>& lineSegs,
std::vector<SSG_featureSemiCircle>& invlaidLineSegs);
2025-09-10 23:59:05 +08:00
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Jumping<6E><67><EFBFBD><EFBFBD>
/// nPointIdx<64><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>Feature<72><65><EFBFBD><EFBFBD>
/// <20><EFBFBD><E3B7A8><EFBFBD>̣<EFBFBD>
/// <20><>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>Ǻͺ<C7BA><CDBA><EFBFBD><EFBFBD><EFBFBD>
/// <20><>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սǣ<D5BD>˳ʱ<CBB3><CAB1>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD><CEAA>
/// <20><>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սǵļ<C7B5><C4BC><EFBFBD>ֵ<EFBFBD><D6B5>
/// <20><>4<EFBFBD><34><EFBFBD>жϹս<CFB9><D5BD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
/// </summary>
SG_APISHARED_EXPORT void sg_getLineJumpFeature_cornerMethod(
SVzNL3DPosition* lineData,
int dataSize,
int lineIdx,
const SSG_cornerParam cornerPara, //scaleͨ<65><CDA8>ȡbagH<67><48>1/4
2025-09-11 19:37:22 +08:00
std::vector< SSG_basicFeature1D>& jumpFeatures);
2025-09-10 23:59:05 +08:00
SG_APISHARED_EXPORT void wd_getLineGloveArcs(
std::vector<SVzNL3DPosition>& lineData,
int lineIdx,
const SSG_gloveArcParam arcPara,
std::vector<SSG_basicFeature1D>& gloveArcs);
2025-06-08 10:46:41 +08:00
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_getLineUpperSemiCircleFeature(
SVzNL3DPosition* lineData,
int dataSize,
int lineIdx,
const double sieveDiameter,
const SSG_slopeParam slopePara,
std::vector< SSG_featureSemiCircle>& line_features,
cv::Mat& holeMask);
2025-06-08 10:46:41 +08:00
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵļ<CFB5>ֵ<EFBFBD><EFBFBD><E3A3A8><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ͼ<EFBFBD>Сֵ<D0A1>
///
/// </summary>
SG_APISHARED_EXPORT void sg_getLineLocalPeaks(
SVzNL3DPosition* lineData,
int dataSize,
int lineIdx,
const double scaleWin,
std::vector< SSG_basicFeature1D>& localMax,
std::vector< SSG_basicFeature1D>& localMin);
SG_APISHARED_EXPORT void sg_getFlatLineLocalPeaks_vector(
std::vector<SVzNL3DPosition>& lineData,
int lineIdx,
const double scaleWin,
const double minPkHeighth,
const double holeR,
std::vector< SSG_basicFeature1D>& localMax);
2025-06-08 10:46:41 +08:00
SG_APISHARED_EXPORT void sg_getLineDownJumps(
SVzNL3DPosition* lineData,
int dataSize,
int lineIdx,
const double jumpTh,
std::vector< SSG_basicFeature1D>& downJumps);
//<2F><>feature<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_getFeatureGrowingTrees(
std::vector<SSG_lineFeature>& lineFeatures,
std::vector<SSG_featureTree>& trees,
SSG_treeGrowParam growParam);
//<2F><>feature<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>Ƚ<EFBFBD>type<70><65>ֻ<EFBFBD>ж<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void wd_getFeatureGrowingTrees_noTypeMatch(
std::vector<SSG_lineFeature>& lineFeatures,
std::vector<SSG_featureTree>& feature_trees,
std::vector<SSG_featureTree>& ending_trees,
SSG_treeGrowParam growParam);
2025-12-05 18:41:05 +08:00
//<2F><>segment feature<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void wd_getSegFeatureGrowingTrees(
std::vector<std::vector<SWD_segFeature>>& all_lineFeatures,
std::vector<SWD_segFeatureTree>& feature_trees,
SSG_treeGrowParam growParam);
SG_APISHARED_EXPORT void sg_lineFeaturesGrowing(
int lineIdx,
bool isLastLine,
std::vector<SSG_basicFeature1D>& features,
std::vector<SSG_featureTree>& trees,
SSG_treeGrowParam growParam);
//gap<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_lineGapsGrowing(
int lineIdx,
bool isLastLine,
std::vector<SSG_basicFeatureGap>& features,
std::vector<SSG_gapFeatureTree>& trees,
SSG_treeGrowParam growParam);
//SG_APISHARED_EXPORT void sg_getTreeROI(SSG_featureTree* a_tree);
2025-06-08 10:46:41 +08:00
//<2F><>ending<6E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_getEndingGrowingTrees(
std::vector<SSG_2DValueI>& lineEndings,
SVzNL3DLaserLine* laser3DPoints,
bool isVScan,
int featureType,
std::vector<SSG_featureTree>& trees,
SSG_treeGrowParam growParam);
//<2F><>ending<6E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱɨ<D6B1><C9A8>ʱֻ<CAB1><D6BB><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮƽɨ<C6BD><C9A8>ʱֻ<CAB1><D6BB><EFBFBD>д<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_getEndingGrowingTrees_angleCheck(
std::vector<SSG_2DValueI>& lineEndings,
SVzNL3DLaserLine* laser3DPoints,
bool isVScan,
int featureType,
std::vector<SSG_featureTree>& trees,
SSG_treeGrowParam growParam,
double angleCheckScale);
2025-06-08 10:46:41 +08:00
//<2F><>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>
SG_APISHARED_EXPORT void sg_LVFeatureGrowing(
std::vector<SSG_lineFeature>& lineFeatures,
std::vector<SSG_featureTree>& trees,
SSG_bagParam bagParam,
SSG_treeGrowParam growParam,
std::vector<SSG_2DValueI>& edgePts_0,
std::vector<SSG_2DValueI>& edgePts_1);
SG_APISHARED_EXPORT void sg_peakFeatureGrowing(
std::vector<std::vector< SSG_basicFeature1D>>& lineFeatures,
std::vector<SSG_featureTree>& trees,
SSG_treeGrowParam growParam);
//semiCircle<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_getFeatureGrowingTrees_semiCircle(
std::vector< SSG_featureSemiCircle>& lineFeatures,
const int lineIdx,
const int lineSize,
std::vector<SSG_semiCircleFeatureTree>& trees,
std::vector<SSG_semiCircleFeatureTree>& stopTrees,
std::vector<SSG_semiCircleFeatureTree>& invalidTrees, //<2F><><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ֳɶ<D6B3><C9B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>
SSG_treeGrowParam growParam);
2025-06-08 10:46:41 +08:00
SSG_meanVar _computeMeanVar(double* data, int size);
///<2F><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD>ߵ㣨z<E3A3A8><7A>С<EFBFBD><EFBFBD><E3A3A9>
///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3>ȵ<EFBFBD>һ<EFBFBD><EFBFBD>Ծֲ<D4BE><D6B2><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD>б<EFBFBD><D0B1>ǣ<EFBFBD><C7A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>¼<EFBFBD><C2BC>
SG_APISHARED_EXPORT void sg_getLocalPeaks(
SVzNL3DLaserLine* scanLines,
int lineNum,
std::vector<SSG_2DValueI>& peaks,
SSG_localPkParam searchWin);
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ծֲ<D4BE><D6B2><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ΪԲ<CEAA><D4B2><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>ɨ<EFBFBD><EFBFBD><E8A3AC>¼ɨ<C2BC><EFBFBD>ı߽<C4B1>
/// </summary>
//SG_APISHARED_EXPORT void sg_peakPolarScan(cv::Mat& edgeMask, SVzNL2DPoint a_peak, SSG_polarScanParam polarScanParam, std::vector< SSG_2DValueI>& rgnContour);
//<2F><>Peak<61><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD>ֱɨ<D6B1><C9A8><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>
SG_APISHARED_EXPORT void sg_peakXYScan(
SVzNL3DLaserLine* laser3DPoints,
int lineNum,
cv::Mat& featureEdgeMask,
SSG_2DValueI a_peak,
SSG_treeGrowParam growParam,
SSG_bagParam bagParam,
bool rgnPtAsEdge,
std::vector< SSG_lineConotours>& topContour,
std::vector< SSG_lineConotours>& bottomContour,
std::vector< SSG_lineConotours>& leftContour,
std::vector< SSG_lineConotours>& rightContour,
int* maxEdgeId_top,
int* maxEdgeId_btm,
int* maxEdgeId_left,
int* maxEdgeId_right);
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>edgeId<49><64>ͬ<EFBFBD>ı߽<C4B1><DFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_getContourPts(
std::vector< SSG_lineConotours>& contour_all,
int vldEdgeId,
std::vector< SSG_2DValueI>& contourFilter,
int* lowLevelFlag);
//<2F>ӱ߽<D3B1><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>edgeId<49><64>ͬ<EFBFBD>ı߽<C4B1><DFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_getPairingContourPts(
std::vector<SSG_conotourPair>& contourPairs,
std::vector<SSG_intPair>& idPairs,
std::vector< SSG_conotourPair>& contourFilter,
SVzNLRangeD range,
bool isTBDir,
int* lowLevelFlag_0,
int* lowLevelFlag_1);
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD>ı߽<C4B1><DFBD><EFBFBD>
SG_APISHARED_EXPORT void sg_contourPostProc(
std::vector< SSG_contourPtInfo>& contour,
int maxEdgeIdx,
double sameConturDistTh,
std::vector< SSG_2DValueI>& contourFilter,
int sideID,
int* blockFlag);
//<2F><><EFBFBD><EFBFBD><EFBFBD>
//input, output<75><74>Ϊfloat<61><74>
SG_APISHARED_EXPORT void sg_distanceTrans(const cv::Mat input, cv::Mat& output, int distType);
/// <summary>
/// <20><>5x5<78><35>ʽѰ<CABD><D1B0>localPeaks
/// </summary>
/// <param name="input"></param>
/// <param name="peaks"></param>
SG_APISHARED_EXPORT void sg_getLocalPeaks_distTransform(
cv::Mat& input,
std::vector<SSG_2DValueI>& peaks,
SSG_localPkParam searchWin);
/// <summary>
/// ʹ<><CAB9>ģ<EFBFBD><EFBFBD><E5B7A8>ȡֱ<C8A1><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>deltaZ<61><5A>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>С<EFBFBD>ķ<EFBFBD>Χ<EFBFBD>ڣ<EFBFBD><DAA3>յ<EFBFBD><D5B5>Ҳ<EFBFBD>deltaY<61><59>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>С<EFBFBD>ķ<EFBFBD>Χ<EFBFBD><CEA7>
/// </summary>
SG_APISHARED_EXPORT void sg_getLineRigthAngleFeature(
SVzNL3DPosition* lineData,
int dataSize,
int lineIdx,
const SSG_lineRightAngleParam templatePara_HF,
const SSG_lineRightAngleParam templatePara_FH,
const SSG_lineRightAngleParam templatePara_HR,
const SSG_lineRightAngleParam templatePara_RH,
SSG_lineFeature* line_features);
//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>ROI
SG_APISHARED_EXPORT SVzNL3DRangeD sg_getScanDataROI(
SVzNL3DLaserLine* laser3DPoints,
int lineNum);
//<2F><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>ROI: vecotr<74><72>ʽ
SG_APISHARED_EXPORT SVzNL3DRangeD sg_getScanDataROI_vector(
std::vector< std::vector<SVzNL3DPosition>>& scanLines
);
2025-06-08 10:46:41 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ROI<4F><49>scale: vecotr<74><72>ʽ
SG_APISHARED_EXPORT SWD_pointCloudPara wd_getPointCloudPara(
std::vector< std::vector<SVzNL3DPosition>>& scanLines);
2025-06-08 10:46:41 +08:00
//XYƽ<59><C6BD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void lineFitting(
std::vector< SVzNL3DPoint>& inliers,
double* _k,
double* _b);
//<2F><><EFBFBD>ϳ<EFBFBD>ͨ<EFBFBD><CDA8>ֱ<EFBFBD>߷<EFBFBD><DFB7>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ
SG_APISHARED_EXPORT void lineFitting_abc(
std::vector< SVzNL3DPoint>& inliers,
double* _a,
double* _b,
double* _c);
//Բ<><D4B2>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT double fitCircleByLeastSquare(
const std::vector<SVzNL3DPoint>& pointArray,
SVzNL3DPoint& center,
double& radius);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> y=ax^2 + bx + c
SG_APISHARED_EXPORT bool leastSquareParabolaFitEigen(
const std::vector<cv::Point2d>& points,
double& a, double& b, double& c,
double& mse, double& max_err);
//<2F><><EFBFBD><EFBFBD>Z<EFBFBD><5A>ֵ
SG_APISHARED_EXPORT double computeMeanZ(std::vector< SVzNL3DPoint>& pts);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǶȲ<C7B6>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>0-180<38>ȷ<EFBFBD>Χ
SG_APISHARED_EXPORT double computeAngleDiff(double theta1, double theta2);
//<2F><><EFBFBD><EFBFBD>ֱ<EFBFBD>߽<EFBFBD><DFBD><EFBFBD>
SG_APISHARED_EXPORT SVzNL3DPoint computeLineCrossPt_abs(
double a1, double b1, double c1,
double a2, double b2, double c2);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>ֱ<EFBFBD>߷<EFBFBD><DFB7><EFBFBD>
SG_APISHARED_EXPORT void compute2ptLine(
SVzNL3DPoint pt1,
SVzNL3DPoint pt2,
double* _a, double* _b, double* _c);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>ֱ<EFBFBD>߷<EFBFBD><DFB7><EFBFBD>,<2C><>ʹ<EFBFBD>ýṹ<C3BD><E1B9B9>
SG_APISHARED_EXPORT void compute2ptLine_2(
double x1, double y1,
double x2, double y2,
double* _a, double* _b, double* _c);
//<2F><>ת45<34>Ⱥ<EFBFBD><C8BA><EFBFBD>ֱ<EFBFBD>߷<EFBFBD><DFB7><EFBFBD>
SG_APISHARED_EXPORT void rotateLine45Deg(
double _a, double _b, double _c,
double x0, double y0,
double* r_a, double* r_b, double* r_c);
//<2F><><EFBFBD><EFBFBD>ֱ<EFBFBD>߽Ƕ<DFBD>
SG_APISHARED_EXPORT double getLineAngle(const double _a, const double _b, const double _c);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2D<32><44><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT double compute2DLen(SVzNL3DPoint pt1, SVzNL3DPoint pt2);
//<2F><><EFBFBD><EFBFBD><EFBFBD>㵽ֱ<E3B5BD>߾<EFBFBD><DFBE><EFBFBD>
SG_APISHARED_EXPORT double computePtDistToLine(double x0, double y0, double a, double b, double c);
//<2F><><EFBFBD><EFBFBD><E3B4B9><EFBFBD>㣬ֱ<E3A3AC>߷<EFBFBD><DFB7>̣<EFBFBD>y = kx + b
SG_APISHARED_EXPORT SVzNL2DPointD sx_getFootPoint(
double x0,
double y0,
double k,
double b);
//<2F><><EFBFBD><EFBFBD><E3B4B9><EFBFBD>㣬ֱ<E3A3AC>߷<EFBFBD><DFB7>̣<EFBFBD>ax+by+c = 0
SG_APISHARED_EXPORT SVzNL2DPointD sx_getFootPoint_abc(
double x0,
double y0,
double A,
double B,
double C);
2025-06-08 10:46:41 +08:00
//Bresenham<61>
SG_APISHARED_EXPORT void drawLine(
int x0,
int y0,
int x1,
int y1,
std::vector<SVzNL2DPoint>& pts);
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע
/// </summary>
/// <param name="bwImg"> Ŀ<><C4BF><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>1<EFBFBD><31><EFBFBD><EFBFBD> <20>հ׵<D5B0>Ϊ<EFBFBD><CEAA>0<EFBFBD><30></param>
/// <param name="labImg"> <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>ΪrgnID, ID<49><44>2<EFBFBD><32>ʼ </param>
/// <param name="labelRgns"></param>
SG_APISHARED_EXPORT void SG_TwoPassLabel(
const cv::Mat& bwImg,
cv::Mat& labImg,
std::vector<SSG_Region>& labelRgns,
int connectivity = 4);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: z = Ax + By + C
//res: [0]=A, [1]= B, [2]=-1.0, [3]=C,
SG_APISHARED_EXPORT void vzCaculateLaserPlane(
std::vector<cv::Point3f> Points3ds,
std::vector<double>& res);
2025-06-08 10:46:41 +08:00
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>Ͳο<CDB2><CEBF><EFBFBD>ƽƽ<C6BD><EFBFBD><E6A3AC><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ƽ
//<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><E6B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
SG_APISHARED_EXPORT SSG_planeCalibPara sg_getPlaneCalibPara(
SVzNL3DLaserLine* laser3DPoints,
int lineNum);
SG_APISHARED_EXPORT SSG_planeCalibPara sg_HCameraVScan_getGroundCalibPara(
std::vector< std::vector<SVzNL3DPosition>>& scanLines);
//<2F><>һ<EFBFBD><D2BB>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊˮƽƽ<C6BD><C6BD>(zΪ<7A>̶<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT SSG_planeCalibPara adjustPlaneToXYPlane(
double plane_A, double plane_B, double plane_C //ƽ<><EFBFBD><E6B7A8><EFBFBD><EFBFBD>
);
2025-09-10 23:59:05 +08:00
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>Ͳο<CDB2><CEBF><EFBFBD>ƽƽ<C6BD><EFBFBD><E6A3AC><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ƽ
//<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><E6B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
SG_APISHARED_EXPORT SSG_planeCalibPara sg_getPlaneCalibPara2(
std::vector< std::vector<SVzNL3DPosition>>& scanLines);
//<2F><><EFBFBD>Կװ<D4BF><D7B0><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT SSG_planeCalibPara sg_getHolePlaneCalibPara(
std::vector< std::vector<SVzNL3DPosition>>& scanLines);
2025-06-08 10:46:41 +08:00
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ROI<4F><49><EFBFBD>ڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
//<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><E6B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
SG_APISHARED_EXPORT SSG_planeCalibPara sg_getPlaneCalibPara_ROIs(
SVzNL3DLaserLine* laser3DPoints,
int lineNum,
std::vector<SVzNL3DRangeD>& ROIs);
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ROI<4F><49><EFBFBD>ڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
//<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><E6B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
SSG_planeCalibPara sg_getPlaneCalibPara2_ROI(
std::vector< std::vector<SVzNL3DPosition>>& scanLines,
SVzNL3DRangeD roi);
2025-06-08 10:46:41 +08:00
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD>ǣ<EFBFBD>Z-Y-X˳<58><CBB3><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT SSG_EulerAngles rotationMatrixToEulerZYX(const double R[3][3]);
// <20><>ŷ<EFBFBD><C5B7><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z-Y-X˳<58><CBB3><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void eulerToRotationMatrixZYX(const SSG_EulerAngles& angles, double R[3][3]);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><CCAC>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///camPoseRΪ3x3<78><33><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void lineDataRT(
SVzNL3DLaserLine* a_line,
const double* camPoseR,
double groundH);
SG_APISHARED_EXPORT void lineDataRT_vector(
std::vector< SVzNL3DPosition>& a_line,
const double* camPoseR,
double groundH);
SG_APISHARED_EXPORT void HCamera_lineDataRT_vector(
std::vector< SVzNL3DPosition>& a_line,
const double* camPoseR,
double groundH);
SG_APISHARED_EXPORT void lineDataRT_RGBD(
SVzNLXYZRGBDLaserLine* a_line,
const double* camPoseR,
double groundH);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ľ<EFBFBD><C4BE><EFBFBD>
SG_APISHARED_EXPORT void sg_pointClustering(
std::vector< SVzNL3DPosition>& pts,
double clusterDist,
std::vector<std::vector< SVzNL3DPosition>>& objClusters //result
);
//<2F><><EFBFBD><EFBFBD>դ<EFBFBD><D5A4><EFBFBD>ϵ<EFBFBD><CFB5>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ľ<EFBFBD><C4BE><EFBFBD><E0A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3D<33><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ʹ<><CAB9>vector<6F><72><EFBFBD><EFBFBD><32><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void wd_gridPointClustering(
std::vector<std::vector<SSG_featureClusteringInfo>>& featureMask,
std::vector<std::vector<SVzNL3DPoint>>& feature3DInfo,
int clusterCheckWin, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SSG_treeGrowParam growParam,//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int clusterID, //<2F><>ǰCluster<65><72>ID
std::vector< SVzNL2DPoint>& a_cluster, //result
SVzNL3DRangeD& clusterRoi //roi3D
);
//ʹ<>þ<EFBFBD><C3BE><EFBFBD><E0B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><38>ͨ<EFBFBD><CDA8>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void wd_gridPointClustering_labelling(
std::vector<std::vector<SSG_featureClusteringInfo>>& featureMask,
std::vector<std::vector<SVzNL3DPoint>>& feature3DInfo,
int clusterID, //<2F><>ǰCluster<65><72>ID
std::vector< SVzNL2DPoint>& a_cluster, //result
SVzNLRect& clusterRoi //roi2D
);
//<2F><>դ<EFBFBD><D5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>XYƽ<59><C6BD><EFBFBD>ϵ<EFBFBD>ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀհ׵<D5B0><D7B5><EFBFBD><EFBFBD>в<EFBFBD>ֵ
SG_APISHARED_EXPORT void pointClout2DProjection(
std::vector< std::vector<SVzNL3DPosition>>& gridScanData,
SVzNLRangeD x_range,
SVzNLRangeD y_range,
double scale,
2025-12-05 18:41:05 +08:00
double cuttingGrndZ,
int edgeSkip,
double inerPolateDistTh, //<2F><>ֵ<EFBFBD><D6B5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ֵ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
cv::Mat& projectionData,//ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ʼ<EFBFBD><CABC>Ϊһ<CEAA><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ1e+6
cv::Mat& backIndexing //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD>3D<33><44><EFBFBD><EFBFBD>
);
//<2F><>ˮ<EFBFBD><CBAE><EFBFBD>
2025-11-09 22:54:23 +08:00
SG_APISHARED_EXPORT void watershed(SWD_waterShedImage& img);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>з<EFBFBD>ˮ<EFBFBD><CBAE><EFBFBD>
SG_APISHARED_EXPORT void wd_seedWatershed(
SWD_waterShedImage& img,
std::vector<SSG_2DValueI>& watershedSeeds, //<2F><><EFBFBD>ӵ<EFBFBD>
int maxLevel, //<2F><><EFBFBD><EFBFBD>ˮλ
int startMakerID //<2F><>ʼMarker<65><72>ID
2025-12-05 18:41:05 +08:00
);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void wd_noiseFilter(
std::vector< std::vector<SVzNL3DPosition>>& scanLines,
const SSG_outlierFilterParam filterParam,
int* errCode);
// Eigen<65><6E>ʵ<EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pts1<73><31>pts2<73><32><EFBFBD><EFBFBD>תƽ<D7AA>ƾ<EFBFBD><C6BE><EFBFBD>
//<2F><>Ҫ
SG_APISHARED_EXPORT void caculateRT(
const std::vector<cv::Point3d>& pts1,
const std::vector<cv::Point3d>& pts2,
cv::Mat& R, cv::Mat& T,
cv::Point3d& C1, cv::Point3d& C2);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תƽ<D7AA>ƺ<EFBFBD><C6BA><EFBFBD>λ<EFBFBD><CEBB>
SG_APISHARED_EXPORT void pointRT(const cv::Mat& R, const cv::Mat& T,
const cv::Point3d& originPt, const cv::Point3d& rtOriginPT, //RT(<28><>תƽ<D7AA>ƣ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const cv::Point3d& pt, cv::Point3d& rtPt); //RTǰ<54><C7B0><EFBFBD>ĵ<EFBFBD>