resizeImageBL <- function ( imx, width, height ) #*****************************************************************************80 # ## resizeImageBL resizes an image using bilinear interpolation. # # Licensing: # # Copyright 2016 James P. Howard, II # # The computer code and data files on this web page are distributed under # https://opensource.org/licenses/BSD-2-Clause, the BSD-2-Clause license. # # Modified: # # 01 March 2020 # # Author: # # Original R code by James Howard; # Modifications by John Burkardt. # # Reference: # # James Howard, # Computational Methods for Numerical Analysis with R, # CRC Press, 2017, # ISBN13: 978-1-4987-2363-3. # { source ( "/home/burkardt/public_html/r_src/bilinear/bilinear.R" ) imx.dim <- dim ( imx ) # layers <- imx.dim[3] w.orig <- imx.dim[1] h.orig <- imx.dim[2] w.scale <- ( w.orig - 1 ) / width h.scale <- ( h.orig - 1 ) / height # bl <- array ( 0, c ( height, width, layers ) ) bl <- array ( 0, c ( height, width ) ) zb <- matrix ( 0, 2, 2 ) # for ( l in 1 : layers ) # { for ( h in 1 : height ) { y <- floor ( h.scale * h ) if ( y <= 0 ) { y <- 1 } if ( h.orig <= y ) { y <- h.orig - 1 } yb <- c ( y, y + 1 ) yl <- h.scale * h for ( w in 1 : width ) { x <- floor ( w.scale * w ) if ( x <= 0 ) { x <- 1 } if ( w.orig <= x ) { x <- w.orig - 1 } xb <- c ( x, x + 1 ) xl <- w.scale * w zb[1,1] <- imx[y,x] zb[1,2] <- imx[y,x+1] zb[2,1] <- imx[y+1,x] zb[2,2] <- imx[y+1,x+1] bl[h,w] <- bilinear ( xb, yb, zb, xl, yl ) } } # } return ( bl ) }