in IsometricPatternMatcher/HexGridFitting.cpp [669:699]
void HexGridFitting::buildBinaryCode(const Eigen::Matrix3Xi& cubeCoor, int minX,
int maxX, int minZ, int maxZ) {
int storageMapRow =
maxZ - minZ > maxX - minX ? maxZ - minZ + 1 : maxX - minX + 1;
detectPattern_ = Eigen::MatrixXi::Constant(
storageMapRow, storageMapRow, 2); // not detected pt in Pattern =2
indexMap_.setConstant(storageMapRow, storageMapRow,
-1); // not detected pt in index map = -1
for (int i = 0; i < cubeCoor.cols(); ++i) {
if (cubeCoor(0, i) != std::numeric_limits<int>::max()) {
indexMap_(cubeCoor(2, i) - minZ, cubeCoor(0, i) - minX) = i;
}
}
for (int i = 0; i < cubeCoor.cols(); ++i) {
if (cubeCoor(0, i) != std::numeric_limits<int>::max()) {
Eigen::Vector2i centerRQ =
Eigen::Vector2i(cubeCoor(2, i), cubeCoor(0, i));
centerRQ(0) -= minZ;
centerRQ(1) -= minX;
if (ifTwoShot_) {
binaryCode_(i) = dotLabels_(i);
} else {
binaryCode_(i) = getBinarycode(centerRQ, numNeighbourLayer_);
}
detectPattern_(cubeCoor(2, i) - minZ, cubeCoor(0, i) - minX) =
binaryCode_(i);
}
}
}