diff --git a/examples/DIPDialect/resize2D.cpp b/examples/DIPDialect/resize2D.cpp index 3da852236..bfab87d78 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 24f8b8208..e35d71799 100644 --- a/frontend/Interfaces/buddy/DIP/DIP.h +++ b/frontend/Interfaces/buddy/DIP/DIP.h @@ -328,16 +328,21 @@ 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()); - intptr_t outputSize[2] = { - static_cast(input->getSizes()[0] / scalingRatios[0]), - static_cast(input->getSizes()[1] / scalingRatios[1])}; + 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]; return detail::Resize2D_Impl( input, type, {scalingRatios[1], scalingRatios[0]}, outputSize); @@ -346,10 +351,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];