aboutsummaryrefslogtreecommitdiff
path: root/tests/AssetsLibrary.cpp
diff options
context:
space:
mode:
authorAbe Mbise <abe.mbise@arm.com>2018-02-09 14:13:02 +0000
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:47:18 +0000
commit562fe0fcedace39735ead089cfdc4e2b07e40aad (patch)
tree8460b26191fb1fde45296bb1e19fddb1d84d0d0f /tests/AssetsLibrary.cpp
parent6a3daf1f566c0bb722207f125d2aaee6930e9947 (diff)
downloadComputeLibrary-562fe0fcedace39735ead089cfdc4e2b07e40aad.tar.gz
COMPMID-578: Faster common keypoint validation routine for FAST and Harris corners
Change-Id: I1f3038ccfa6be5e0a19bec11a89af5ed2247c42f Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/119936 Reviewed-by: Anthony Barbier <anthony.barbier@arm.com> Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com> Tested-by: Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'tests/AssetsLibrary.cpp')
-rw-r--r--tests/AssetsLibrary.cpp40
1 files changed, 31 insertions, 9 deletions
diff --git a/tests/AssetsLibrary.cpp b/tests/AssetsLibrary.cpp
index f5eac8a59a..1cbd3b4e3d 100644
--- a/tests/AssetsLibrary.cpp
+++ b/tests/AssetsLibrary.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -48,19 +48,26 @@ namespace
template <typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0>
void rgb_to_luminance(const RawTensor &src, RawTensor &dst)
{
- const size_t min_size = std::min(src.size(), dst.size());
+ // Ensure in/out tensors have same image dimensions (independent of element size and number of channels)
+ ARM_COMPUTE_ERROR_ON_MSG(src.num_elements() != dst.num_elements(), "Input and output images must have equal dimensions");
- for(size_t i = 0, j = 0; i < min_size; i += 3, ++j)
+ const size_t num_elements = dst.num_elements();
+
+ // Currently, input is always RGB888 (3 U8 channels per element). Output can be U8, U16/S16 or U32
+ // Note that src.data()[i] returns pointer to first channel of element[i], so RGB values have [0,1,2] offsets
+ for(size_t i = 0, j = 0; j < num_elements; i += 3, ++j)
{
- reinterpret_cast<T *>(dst.data())[j] = 0.2126f * src.data()[i + 0] + 0.7152f * src.data()[i + 1] + 0.0722f * src.data()[i + 2];
+ reinterpret_cast<T *>(dst.data())[j] = 0.2126f * src.data()[i] + 0.7152f * src.data()[i + 1] + 0.0722f * src.data()[i + 2];
}
}
void extract_r_from_rgb(const RawTensor &src, RawTensor &dst)
{
- const size_t min_size = std::min(src.size(), dst.size());
+ ARM_COMPUTE_ERROR_ON(src.size() != 3 * dst.size());
+
+ const size_t num_elements = dst.num_elements();
- for(size_t i = 0, j = 0; i < min_size; i += 3, ++j)
+ for(size_t i = 0, j = 0; j < num_elements; i += 3, ++j)
{
dst.data()[j] = src.data()[i];
}
@@ -68,9 +75,23 @@ void extract_r_from_rgb(const RawTensor &src, RawTensor &dst)
void extract_g_from_rgb(const RawTensor &src, RawTensor &dst)
{
- const size_t min_size = std::min(src.size(), dst.size());
+ ARM_COMPUTE_ERROR_ON(src.size() != 3 * dst.size());
+
+ const size_t num_elements = dst.num_elements();
+
+ for(size_t i = 1, j = 0; j < num_elements; i += 3, ++j)
+ {
+ dst.data()[j] = src.data()[i];
+ }
+}
+
+void extract_b_from_rgb(const RawTensor &src, RawTensor &dst)
+{
+ ARM_COMPUTE_ERROR_ON(src.size() != 3 * dst.size());
+
+ const size_t num_elements = dst.num_elements();
- for(size_t i = 1, j = 0; i < min_size; i += 3, ++j)
+ for(size_t i = 2, j = 0; j < num_elements; i += 3, ++j)
{
dst.data()[j] = src.data()[i];
}
@@ -321,7 +342,8 @@ const AssetsLibrary::Extractor &AssetsLibrary::get_extractor(Format format, Chan
static std::map<std::pair<Format, Channel>, Extractor> extractors =
{
{ std::make_pair(Format::RGB888, Channel::R), extract_r_from_rgb },
- { std::make_pair(Format::RGB888, Channel::G), extract_g_from_rgb }
+ { std::make_pair(Format::RGB888, Channel::G), extract_g_from_rgb },
+ { std::make_pair(Format::RGB888, Channel::B), extract_b_from_rgb }
};
const auto it = extractors.find(std::make_pair(format, channel));