--- title: "Warp Affine using R" author: "Lampros Mouselimis" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Warp Affine using R} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- The **getAffineTransform()** and **warpAffine()** functions of the OpenImageR package is an RcppArmadillo re-implementation of [existing Python Code](https://github.com/OlehOnyshchak/ImageTransformations/blob/master/AffineTransformation.ipynb) and this vignette shows how these functions can be used from within R based on the [author's .ipynb](https://github.com/OlehOnyshchak/ImageTransformations/blob/master/AffineTransformation.ipynb) file
```{r, eval = T} require(OpenImageR) path = system.file('tmp_images', 'landscape.jpg', package = "OpenImageR") img = readImage(path) print(dim(img)) ```
```{r, out.width = "65%", out.height = "50%", fig.align = 'center', fig.cap = "Input Image", fig.alt="Input Image", echo = F, eval = T} knitr::include_graphics(path) ```
```{r, eval = T} r = ncol(img) c = nrow(img) offset = 50 original_points = matrix(data = c(0, 0, r, 0, 0, c), nrow = 3, ncol = 2, byrow = TRUE) transformed_points = matrix(data = c(offset, 0, r, offset, 0, c-offset), nrow = 3, ncol = 2, byrow = TRUE) M_aff = getAffineTransform(original_points = original_points, transformed_points = transformed_points) ```
The following is the Affine transformation matrix, ```{r, eval = T} print(M_aff) ```
The Affine transformation matrix can be used as input in the *warpAffine()* function, ```{r, eval = T} res_3d = warpAffine(img = img, M = M_aff, R = r, C = c, verbose = TRUE) str(res_3d) ```
The next image shows the output based on the input data and parameters, ```{r, out.width = "65%", out.height = "50%", fig.align = 'center', fig.cap = "Output of Warp Affine function", fig.alt="Output of Warp Affine function", echo = T, eval = T} imageShow(res_3d, clear_viewer = FALSE) ```