From 2ca4d4521524a0a726ad51d85af7fb91e3226c8d Mon Sep 17 00:00:00 2001 From: valorun Date: Thu, 27 Feb 2020 20:51:43 +0100 Subject: [PATCH] findRegion method --- ColorimetricSegmenter.cpp | 55 ++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/ColorimetricSegmenter.cpp b/ColorimetricSegmenter.cpp index 53536a4..963b50d 100644 --- a/ColorimetricSegmenter.cpp +++ b/ColorimetricSegmenter.cpp @@ -244,6 +244,10 @@ double colorimetricalDifference(ccColor::Rgb c1, ccColor::Rgb c2) { return sqrt(pow(c1.r-c2.r, 2) + pow(c1.g-c2.g, 2) + pow(c1.b-c2.b, 2)); } +double colorimetricalDifference(ccPointCloud* basePointCloud, CCLib::ReferenceCloud* c1, CCLib::ReferenceCloud* c2) { + +} + std::vector regionGrowing(ccPointCloud* pointCloud, const unsigned TNN, const double TPP, const double TD) { @@ -275,7 +279,7 @@ std::vector regionGrowing(ccPointCloud* pointCloud, cons for(int i=0; i < knnResult->size(); i++) { unsigned p = knnResult->getPointGlobalIndex(i); - // if p is labelled or Dis(p,Tpoint)>TD + // if p is labelled if(std::find(unlabeledPoints.begin(), unlabeledPoints.end(), p) != unlabeledPoints.end()) { continue; @@ -294,36 +298,57 @@ std::vector regionGrowing(ccPointCloud* pointCloud, cons return regions; } +std::vector* findRegion(std::vector*>* container, CCLib::ReferenceCloud* region) +{ + if(container->size() == 0) + { + return nullptr; + } + for(std::vector* l : *container) + { + if(std::find(l->begin(), l->end(), region) != l->end()) + { + return l; + } + } + return nullptr; +} std::vector regionMergingAndRefinement(ccPointCloud* basePointCloud, std::vector* regions, const unsigned TNN, const double TRR, const double TD) { - std::vector*> homogeneous; + std::vector*>* homogeneous = new std::vector*>(); // for each region Ri in {R} for(CCLib::ReferenceCloud* ri : *regions) { // if Ri is not in {H} - for(std::vector* l : homogeneous) + if(findRegion(homogeneous, ri) == nullptr) { - if(std::find(l->begin(), l->end(), ri) == l->end()) - { - // create a new list to record Ri - std::vector* newRegionGroup = new std::vector(); - newRegionGroup->push_back(ri); - homogeneous.push_back(newRegionGroup); - } + // create a new list to record Ri + std::vector* newRegionGroup = new std::vector(); + newRegionGroup->push_back(ri); + homogeneous->push_back(newRegionGroup); } + + // for each region Rj in {KNNTNN2,TD2(Ri)} std::vector* knnResult; knnRegions(basePointCloud, regions, ri, TNN, knnResult, TD); - // for each region Rj in {KNNTNN2,TD2(Ri)} for(CCLib::ReferenceCloud* rj : *knnResult) { // if CD(Ri,Rj)* regionContainer = findRegion(homogeneous, rj); + if(regionContainer != nullptr) + { + continue; + } + else + { // add Rj to the list which contains Ri - // end if-else - // end if + regionContainer->push_back(rj); + } + } } } // merge all the regions in the same list in {H} and get {R’}