for (auto it: nm_corners) { fast::fast_xy &xy = fast_corners.at(it); if (xy.x >= grid_n_cols_ * grid_width_ || xy.y >= grid_n_rows_ * grid_height_) continue; const int k = sub2ind(cv::Point2f(xy.x, xy.y)); if (occupancy_grid_[k]) continue; const float score = shiTomasiScore(image, xy.x, xy.y); if (score > score_table[k]) { score_table[k] = static_cast<double>(score); feature_table[k] = cv::Point2f(xy.x, xy.y); } }
时间: 2024-02-14 18:35:42 浏览: 104
corner_color.zip_Detect corners
这段代码是在遍历经过非极大值抑制后的角点信息 `nm_corners`,对每个角点进行检查,以确定是否将其作为特征点。对于每个角点,首先获取其坐标,然后判断其是否在图像的有效范围内,如果不在则跳过。接着,将角点的坐标转换为网格的索引,然后检查该网格是否已经被占用(即已经存在特征点)。如果网格已经被占用,则跳过该角点。最后,计算该角点的 Shi-Tomasi 分数,并将分数与该网格之前检测到的所有角点的分数进行比较,如果该角点的分数更高,则将其作为特征点存储在 `feature_table` 向量中,并更新该网格的分数表 `score_table`。经过遍历所有角点后,返回最终的特征点坐标列表 `features`。
阅读全文