Skip to content

Commit

Permalink
[DIP] Make Resize API more consistent with OpenCV (buddy-compiler#154)
Browse files Browse the repository at this point in the history
  • Loading branch information
meshtag authored and guan committed Aug 14, 2023
1 parent a70bd1c commit d510c80
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 11 deletions.
6 changes: 3 additions & 3 deletions examples/DIPDialect/resize2D.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,12 @@ bool testImplementation(int argc, char *argv[]) {
// Define memref container for image.
Img<float, 2> input(image);

intptr_t outputSize[2] = {100, 250}; // {image_rows, image_cols}
intptr_t outputSize[2] = {250, 100}; // {image_cols, image_rows}
std::vector<float> 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.
Expand Down
22 changes: 14 additions & 8 deletions frontend/Interfaces/buddy/DIP/DIP.h
Original file line number Diff line number Diff line change
Expand Up @@ -328,16 +328,21 @@ inline MemRef<float, 2> Rotate2D(Img<float, 2> *input, float angle,
// User interface for 2D Resize.
inline MemRef<float, 2> Resize2D(Img<float, 2> *input, INTERPOLATION_TYPE type,
std::vector<float> 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<unsigned int>(input->getSizes()[0] / scalingRatios[0]),
static_cast<unsigned int>(input->getSizes()[1] / scalingRatios[1])};
intptr_t outputSize[2] = {static_cast<unsigned>(std::round(
input->getSizes()[0] * scalingRatios[0])),
static_cast<unsigned>(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);
Expand All @@ -346,10 +351,11 @@ inline MemRef<float, 2> Resize2D(Img<float, 2> *input, INTERPOLATION_TYPE type,
// User interface for 2D Resize.
inline MemRef<float, 2> Resize2D(Img<float, 2> *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<float> scalingRatios(2);
scalingRatios[1] = input->getSizes()[0] * 1.0f / outputSize[0];
Expand Down

0 comments on commit d510c80

Please sign in to comment.