1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2024 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#include "tests/pipelines/odometry/OdometryTools.h"
namespace open3d {
namespace tests {
std::shared_ptr<geometry::Image> odometry_tools::GenerateImage(
const int& width,
const int& height,
const int& num_of_channels,
const int& bytes_per_channel,
const float& vmin,
const float& vmax,
const int& seed) {
std::shared_ptr<geometry::Image> image =
std::make_shared<geometry::Image>();
image->Prepare(width, height, num_of_channels, bytes_per_channel);
float* const depthData = image->PointerAs<float>();
Rand(depthData, width * height, vmin, vmax, seed);
return image;
}
// ----------------------------------------------------------------------------
// Shift the pixels left with a specified step.
// ----------------------------------------------------------------------------
void odometry_tools::ShiftLeft(std::shared_ptr<geometry::Image> image,
const int& step) {
int width = image->width_;
int height = image->height_;
// int num_of_channels = image->num_of_channels_;
// int bytes_per_channel = image->bytes_per_channel_;
float* const float_data = image->PointerAs<float>();
for (int h = 0; h < height; h++)
for (int w = 0; w < width; w++)
float_data[h * width + w] =
float_data[h * width + (w + step) % width];
}
// ----------------------------------------------------------------------------
// Shift the pixels up with a specified step.
// ----------------------------------------------------------------------------
void odometry_tools::ShiftUp(std::shared_ptr<geometry::Image> image,
const int& step) {
int width = image->width_;
int height = image->height_;
// int num_of_channels = image->num_of_channels_;
// int bytes_per_channel = image->bytes_per_channel_;
float* const float_data = image->PointerAs<float>();
for (int h = 0; h < height; h++)
for (int w = 0; w < width; w++)
float_data[h * width + w] =
float_data[((h + step) % height) * width + w];
}
// ----------------------------------------------------------------------------
// Create dummy correspondence map object.
// ----------------------------------------------------------------------------
std::shared_ptr<geometry::Image> odometry_tools::CorrespondenceMap(
const int& width,
const int& height,
const int& vmin,
const int& vmax,
const int& seed) {
int num_of_channels = 2;
int bytes_per_channel = 4;
std::shared_ptr<geometry::Image> image =
std::make_shared<geometry::Image>();
image->Prepare(width, height, num_of_channels, bytes_per_channel);
int* const int_data = image->PointerAs<int>();
size_t image_size = image->data_.size() / sizeof(int);
Rand(int_data, image_size, vmin, vmax, seed);
return image;
}
// ----------------------------------------------------------------------------
// Create dummy depth buffer object.
// ----------------------------------------------------------------------------
std::shared_ptr<geometry::Image> odometry_tools::DepthBuffer(const int& width,
const int& height,
const float& vmin,
const float& vmax,
const int& seed) {
int num_of_channels = 1;
int bytes_per_channel = 4;
std::shared_ptr<geometry::Image> image =
std::make_shared<geometry::Image>();
image->Prepare(width, height, num_of_channels, bytes_per_channel);
float* const float_data = image->PointerAs<float>();
size_t image_size = image->data_.size() / sizeof(float);
Rand(float_data, image_size, vmin, vmax, seed);
return image;
}
} // namespace tests
} // namespace open3d
|