From 609d19c1831c43acaf23c1c85cd4cefdd7fc0a8e Mon Sep 17 00:00:00 2001 From: meshtag Date: Sat, 3 Jun 2023 02:37:39 +0800 Subject: [PATCH 1/2] Init commit --- examples/DIPDialect/resize2D.cpp | 6 +++--- frontend/Interfaces/buddy/DIP/DIP.h | 14 +++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/examples/DIPDialect/resize2D.cpp b/examples/DIPDialect/resize2D.cpp index 3da8522363..bfab87d784 100644 --- a/examples/DIPDialect/resize2D.cpp +++ b/examples/DIPDialect/resize2D.cpp @@ -41,12 +41,12 @@ bool testImplementation(int argc, char *argv[]) { // Define memref container for image. Img input(image); - intptr_t outputSize[2] = {100, 250}; // {image_rows, image_cols} + intptr_t outputSize[2] = {250, 100}; // {image_cols, image_rows} std::vector scalingRatios = { - 4, 3}; // {row_scaling_ratio, col_scaling_ratio} + 0.25, 0.1}; // {col_scaling_ratio, row_scaling_ratio} // dip::Resize2D() can be called with either scaling ratios - // (Input image dimension / Output image dimension) for both dimensions or + // (Output image dimension / Input image dimension) for both dimensions or // the output image dimensions. // Note : Both values in output image dimensions and scaling ratios must be // positive numbers. diff --git a/frontend/Interfaces/buddy/DIP/DIP.h b/frontend/Interfaces/buddy/DIP/DIP.h index 24f8b82088..15627f3da9 100644 --- a/frontend/Interfaces/buddy/DIP/DIP.h +++ b/frontend/Interfaces/buddy/DIP/DIP.h @@ -328,12 +328,15 @@ inline MemRef Rotate2D(Img *input, float angle, // User interface for 2D Resize. inline MemRef Resize2D(Img *input, INTERPOLATION_TYPE type, std::vector scalingRatios) { - if (!scalingRatios[0] || !scalingRatios[1]) { + if (scalingRatios[0] <= 0 || scalingRatios[1] <= 0) { throw std::invalid_argument( - "Please enter non-zero values of scaling ratios.\n" + "Please enter positive values of scaling ratios.\n" "Note : scaling ratio = " - "input_image_dimension / output_image_dimension\n"); + "output_image_dimension / input_image_dimension\n"); } + std::reverse(scalingRatios.begin(), scalingRatios.end()); + scalingRatios[0] = 1 / scalingRatios[0]; + scalingRatios[1] = 1 / scalingRatios[1]; intptr_t outputSize[2] = { static_cast(input->getSizes()[0] / scalingRatios[0]), @@ -346,10 +349,11 @@ inline MemRef Resize2D(Img *input, INTERPOLATION_TYPE type, // User interface for 2D Resize. inline MemRef Resize2D(Img *input, INTERPOLATION_TYPE type, intptr_t outputSize[2]) { - if (!outputSize[0] || !outputSize[1]) { + if (outputSize[0] <= 0 || outputSize[1] <= 0) { throw std::invalid_argument( - "Please enter non-zero values of output dimensions.\n"); + "Please enter positive values of output dimensions.\n"); } + std::reverse(outputSize, outputSize + 2); std::vector scalingRatios(2); scalingRatios[1] = input->getSizes()[0] * 1.0f / outputSize[0]; From b9f434745c415b4a6f5c10e5dc88eb513fb84d3f Mon Sep 17 00:00:00 2001 From: meshtag Date: Mon, 5 Jun 2023 19:29:36 +0800 Subject: [PATCH 2/2] Fix rounding problem in output dimension calculation --- frontend/Interfaces/buddy/DIP/DIP.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/frontend/Interfaces/buddy/DIP/DIP.h b/frontend/Interfaces/buddy/DIP/DIP.h index 15627f3da9..e35d717995 100644 --- a/frontend/Interfaces/buddy/DIP/DIP.h +++ b/frontend/Interfaces/buddy/DIP/DIP.h @@ -335,13 +335,15 @@ inline MemRef Resize2D(Img *input, INTERPOLATION_TYPE type, "output_image_dimension / input_image_dimension\n"); } std::reverse(scalingRatios.begin(), scalingRatios.end()); + + intptr_t outputSize[2] = {static_cast(std::round( + input->getSizes()[0] * scalingRatios[0])), + static_cast(std::round( + input->getSizes()[1] * scalingRatios[1]))}; + scalingRatios[0] = 1 / scalingRatios[0]; scalingRatios[1] = 1 / scalingRatios[1]; - intptr_t outputSize[2] = { - static_cast(input->getSizes()[0] / scalingRatios[0]), - static_cast(input->getSizes()[1] / scalingRatios[1])}; - return detail::Resize2D_Impl( input, type, {scalingRatios[1], scalingRatios[0]}, outputSize); }