| 222 | using af::loadImage; |
| 223 | |
| 224 | TEST(Homography, CPP) { |
| 225 | UNSUPPORTED_BACKEND(AF_BACKEND_ONEAPI); |
| 226 | IMAGEIO_ENABLED_CHECK(); |
| 227 | |
| 228 | vector<dim4> inDims; |
| 229 | vector<string> inFiles; |
| 230 | vector<vector<float>> gold; |
| 231 | |
| 232 | readImageTests(string(TEST_DIR "/homography/tux.test"), inDims, inFiles, |
| 233 | gold); |
| 234 | |
| 235 | inFiles[0].insert(0, string(TEST_DIR "/homography/")); |
| 236 | |
| 237 | const float size_ratio = 0.5f; |
| 238 | |
| 239 | array train_img = loadImage(inFiles[0].c_str(), false); |
| 240 | array query_img = resize(size_ratio, train_img); |
| 241 | dim4 tDims = train_img.dims(); |
| 242 | |
| 243 | features feat_train, feat_query; |
| 244 | array desc_train, desc_query; |
| 245 | orb(feat_train, desc_train, train_img, 20, 2000, 1.2, 8, true); |
| 246 | orb(feat_query, desc_query, query_img, 20, 2000, 1.2, 8, true); |
| 247 | |
| 248 | array idx, dist; |
| 249 | hammingMatcher(idx, dist, desc_train, desc_query, 0, 1); |
| 250 | |
| 251 | array train_idx = where(dist < 30); |
| 252 | array query_idx = idx(train_idx); |
| 253 | |
| 254 | array feat_train_x = feat_train.getX()(train_idx); |
| 255 | array feat_train_y = feat_train.getY()(train_idx); |
| 256 | array feat_train_score = feat_train.getScore()(train_idx); |
| 257 | array feat_train_orientation = feat_train.getOrientation()(train_idx); |
| 258 | array feat_train_size = feat_train.getSize()(train_idx); |
| 259 | array feat_query_x = feat_query.getX()(query_idx); |
| 260 | array feat_query_y = feat_query.getY()(query_idx); |
| 261 | array feat_query_score = feat_query.getScore()(query_idx); |
| 262 | array feat_query_orientation = feat_query.getOrientation()(query_idx); |
| 263 | array feat_query_size = feat_query.getSize()(query_idx); |
| 264 | |
| 265 | array H; |
| 266 | int inliers = 0; |
| 267 | homography(H, inliers, feat_train_x, feat_train_y, feat_query_x, |
| 268 | feat_query_y, AF_HOMOGRAPHY_RANSAC, 3.0f, 1000, f32); |
| 269 | |
| 270 | float* gold_t = new float[8]; |
| 271 | for (int i = 0; i < 8; i++) gold_t[i] = 0.f; |
| 272 | gold_t[2] = tDims[1] * size_ratio; |
| 273 | gold_t[3] = tDims[1] * size_ratio; |
| 274 | gold_t[5] = tDims[0] * size_ratio; |
| 275 | gold_t[6] = tDims[0] * size_ratio; |
| 276 | |
| 277 | array t = perspectiveTransform<float>(train_img.dims(), H); |
| 278 | |
| 279 | float* out_t = new float[4 * 2]; |
| 280 | t.host(out_t); |
| 281 |
nothing calls this directly
no test coverage detected