diff options
author | Abe Mbise <abe.mbise@arm.com> | 2017-12-19 13:51:59 +0000 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:52:54 +0000 |
commit | 1b993389a3ac0cd1b0edc0b11e92fbdee127576f (patch) | |
tree | 1ffc39fa69baabaf2849058eb4ac8c204075630c /src/runtime/NEON/functions | |
parent | 76c8564936a1e0d1be022a2f56dc0a52d638f5d7 (diff) | |
download | ComputeLibrary-1b993389a3ac0cd1b0edc0b11e92fbdee127576f.tar.gz |
COMPMID-568: Implement Canny edge function for CL/NEON
Change-Id: Ic5f197463f962bac4b23663bcef7ac744be6fc2a
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/114250
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Diffstat (limited to 'src/runtime/NEON/functions')
-rw-r--r-- | src/runtime/NEON/functions/NECannyEdge.cpp | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/runtime/NEON/functions/NECannyEdge.cpp b/src/runtime/NEON/functions/NECannyEdge.cpp index c27ff2f935..1d73148f47 100644 --- a/src/runtime/NEON/functions/NECannyEdge.cpp +++ b/src/runtime/NEON/functions/NECannyEdge.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 ARM Limited. + * Copyright (c) 2017-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -61,12 +61,12 @@ NECannyEdge::NECannyEdge(std::shared_ptr<IMemoryManager> memory_manager) // NOLI void NECannyEdge::configure(ITensor *input, ITensor *output, int32_t upper_thr, int32_t lower_thr, int32_t gradient_size, int32_t norm_type, BorderMode border_mode, uint8_t constant_border_value, bool use_fp16) { + ARM_COMPUTE_ERROR_ON_NULLPTR(input, output); ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(input, 1, DataType::U8); ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(output, 1, DataType::U8); - ARM_COMPUTE_ERROR_ON(gradient_size < 3); - ARM_COMPUTE_ERROR_ON(gradient_size > 7); - ARM_COMPUTE_ERROR_ON(lower_thr > upper_thr); ARM_COMPUTE_ERROR_ON((1 != norm_type) && (2 != norm_type)); + ARM_COMPUTE_ERROR_ON((gradient_size != 3) && (gradient_size != 5) && (gradient_size != 7)); + ARM_COMPUTE_ERROR_ON(lower_thr > upper_thr); _output = output; @@ -119,7 +119,7 @@ void NECannyEdge::configure(ITensor *input, ITensor *output, int32_t upper_thr, } else { - ARM_COMPUTE_ERROR("Gradient size not supported\n"); + ARM_COMPUTE_ERROR("Gradient size %d not supported\n", gradient_size); } // Manage intermediate buffers @@ -171,24 +171,23 @@ void NECannyEdge::configure(ITensor *input, ITensor *output, int32_t upper_thr, void NECannyEdge::run() { ARM_COMPUTE_ERROR_ON_MSG(_sobel == nullptr, "Unconfigured function"); - ARM_COMPUTE_ERROR_ON(_output == nullptr); _memory_group.acquire(); // Run sobelNxN _sobel->run(); - // Fill border before non-maxima suppression. Nop for border mode undefined. - NEScheduler::get().schedule(&_border_mag_gradient, Window::DimZ); - // Run gradient NEScheduler::get().schedule(_gradient.get(), Window::DimY); + // Fill border before non-maxima suppression. Nop for border mode undefined. + NEScheduler::get().schedule(&_border_mag_gradient, Window::DimZ); + // Run non-maxima suppression NEScheduler::get().schedule(&_non_max_suppr, Window::DimY); ARM_COMPUTE_ERROR_ON(_output->buffer() == nullptr); - memset(_output->buffer(), 0, _output->info()->total_size()); + std::fill_n(_output->buffer(), _output->info()->total_size(), 0); // Fill border before edge trace NEScheduler::get().schedule(&_border_edge_trace, Window::DimZ); |