61 lines
2.0 KiB
C
61 lines
2.0 KiB
C
|
// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
|
||
|
// de Barcelona (UAB).
|
||
|
//
|
||
|
// This work is licensed under the terms of the MIT license.
|
||
|
// For a copy, see <https://opensource.org/licenses/MIT>.
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "carla/image/BoostGil.h"
|
||
|
#include "carla/image/CityScapesPalette.h"
|
||
|
|
||
|
namespace carla {
|
||
|
namespace image {
|
||
|
|
||
|
class ColorConverter {
|
||
|
public:
|
||
|
|
||
|
struct LogarithmicLinear {
|
||
|
template <typename DstPixelT>
|
||
|
void operator()(const boost::gil::gray32fc_pixel_t &src, DstPixelT &dst) const {
|
||
|
using namespace boost::gil;
|
||
|
const float value = 1.0f + std::log(src[0u]) / 5.70378f;
|
||
|
const float clamped = std::max(std::min(value, 1.0f), 0.005f);
|
||
|
color_convert(gray32fc_pixel_t{clamped}, dst);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
struct Depth {
|
||
|
template <typename SrcPixelT, typename DstPixelT>
|
||
|
void operator()(const SrcPixelT &src, DstPixelT &dst) const {
|
||
|
using namespace boost::gil;
|
||
|
static_assert(
|
||
|
sizeof(typename color_space_type<SrcPixelT>::type) == sizeof(uint8_t),
|
||
|
"Invalid pixel type.");
|
||
|
const float depth =
|
||
|
get_color(src, red_t()) +
|
||
|
(get_color(src, green_t()) * 256) +
|
||
|
(get_color(src, blue_t()) * 256 * 256);
|
||
|
const float normalized = depth / static_cast<float>(256 * 256 * 256 - 1);
|
||
|
color_convert(gray32fc_pixel_t{normalized}, dst);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
struct LogarithmicDepth {};
|
||
|
|
||
|
struct CityScapesPalette {
|
||
|
template <typename SrcPixelT, typename DstPixelT>
|
||
|
void operator()(const SrcPixelT &src, DstPixelT &dst) const {
|
||
|
using namespace boost::gil;
|
||
|
static_assert(
|
||
|
sizeof(typename color_space_type<SrcPixelT>::type) == sizeof(uint8_t),
|
||
|
"Invalid pixel type.");
|
||
|
const auto color = image::CityScapesPalette::GetColor(get_color(src, red_t()));
|
||
|
color_convert(rgb8c_pixel_t{color[0u], color[1u], color[2u]}, dst);
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
} // namespace image
|
||
|
} // namespace carla
|