Created
March 30, 2020 21:32
-
-
Save ezyang/f276b3a0a6006048df66ef6bb764e14b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // get NE, NW, SE, SW pixel values from (x, y) | |
| int ix_nw = static_cast<int>(::floor(ix)); | |
| int iy_nw = static_cast<int>(::floor(iy)); | |
| int ix_ne = ix_nw + 1; | |
| int iy_ne = iy_nw; | |
| int ix_sw = ix_nw; | |
| int iy_sw = iy_nw + 1; | |
| int ix_se = ix_nw + 1; | |
| int iy_se = iy_nw + 1; | |
| // get surfaces to each neighbor: | |
| scalar_t nw = (ix_se - ix) * (iy_se - iy); | |
| scalar_t ne = (ix - ix_sw) * (iy_sw - iy); | |
| scalar_t sw = (ix_ne - ix) * (iy - iy_ne); | |
| scalar_t se = (ix - ix_nw) * (iy - iy_nw); | |
| // calculate bilinear weighted pixel value and set output pixel | |
| auto inp_ptr_NC = input.data + n * inp_sN; | |
| auto out_ptr_NCHW = output.data + n * out_sN + h * out_sH + w * out_sW; | |
| for (int c = 0; c < C; ++c, inp_ptr_NC += inp_sC, out_ptr_NCHW += out_sC) { | |
| *out_ptr_NCHW = static_cast<scalar_t>(0); | |
| if (within_bounds_2d(iy_nw, ix_nw, inp_H, inp_W)) { | |
| *out_ptr_NCHW += inp_ptr_NC[iy_nw * inp_sH + ix_nw * inp_sW] * nw; | |
| } | |
| if (within_bounds_2d(iy_ne, ix_ne, inp_H, inp_W)) { | |
| *out_ptr_NCHW += inp_ptr_NC[iy_ne * inp_sH + ix_ne * inp_sW] * ne; | |
| } | |
| if (within_bounds_2d(iy_sw, ix_sw, inp_H, inp_W)) { | |
| *out_ptr_NCHW += inp_ptr_NC[iy_sw * inp_sH + ix_sw * inp_sW] * sw; | |
| } | |
| if (within_bounds_2d(iy_se, ix_se, inp_H, inp_W)) { | |
| *out_ptr_NCHW += inp_ptr_NC[iy_se * inp_sH + ix_se * inp_sW] * se; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment