Closed MontyTHall closed 6 years ago
It's not terribly clear what's happning. Anybody explain the "unreliable points" criteria?
Thanks, M
void ScanRegistration::setScanBuffersFor(const size_t& startIdx, const size_t& endIdx) { // resize buffers size_t scanSize = endIdx - startIdx + 1; _scanNeighborPicked.assign(scanSize, 0); // mark unreliable points as picked for (size_t i = startIdx + _config.curvatureRegion; i < endIdx - _config.curvatureRegion; i++) { const pcl::PointXYZI& previousPoint = (_laserCloud[i - 1]); const pcl::PointXYZI& point = (_laserCloud[i]); const pcl::PointXYZI& nextPoint = (_laserCloud[i + 1]); float diffNext = calcSquaredDiff(nextPoint, point); if (diffNext > 0.1) { float depth1 = calcPointDistance(point); float depth2 = calcPointDistance(nextPoint); if (depth1 > depth2) { float weighted_distance = std::sqrt(calcSquaredDiff(nextPoint, point, depth2 / depth1)) / depth2; if (weighted_distance < 0.1) { std::fill_n(&_scanNeighborPicked[i - startIdx - _config.curvatureRegion], _config.curvatureRegion + 1, 1); continue; } } else { float weighted_distance = std::sqrt(calcSquaredDiff(point, nextPoint, depth1 / depth2)) / depth1; if (weighted_distance < 0.1) { std::fill_n(&_scanNeighborPicked[i - startIdx + 1], _config.curvatureRegion + 1, 1); } } } float diffPrevious = calcSquaredDiff(point, previousPoint); float dis = calcSquaredPointDistance(point); if (diffNext > 0.0002 * dis && diffPrevious > 0.0002 * dis) { _scanNeighborPicked[i - startIdx] = 1; } } }
Got it
Need answer to this issue.
It's not terribly clear what's happning. Anybody explain the "unreliable points" criteria?
Thanks, M