Learn R Programming

⚠️There's a newer version (1.0.3) of this package.Take me there.

Imager is an image/video processing package for R, based on CImg, a C++ library by David Tschumperlé. CImg provides an easy-to-use and consistent API for image processing, which imager largely replicates. CImg supports images in up to four dimensions, which makes it suitable for applications like video processing/hyperspectral imaging/MRI.

Installing the package

Imager is on CRAN, so

install.packages("imager")

should do the trick. You may also want to install ImageMagick and ffmpeg, see "External Dependencies" below.

The version of CRAN will often lag the one on github. If you'd like to install the latest version, you'll have to build the package from source.

Install the devtools package if you haven't already. Run:

devtools::install_github("dahtah/imager")

If that doesn't work then you're probably missing a build environment or a library, see below.

OS X

Install XQuartz if you haven't already (it's required for the interactive functions). You'll need Xcode (OS X's development environment) to compile source packages. The FFTW library is needed, and the easiest way to install it is via Homebrew. Install Homebrew, then run: brew install fftw

Optionally, install libtiff for better support of TIFF files.

Windows

Building R packages on Windows is a bit of a pain so you're probably better off with the binary package (which may not be up-to-date). If you need the latest version of imager, you'll have to:

  • Install Rtools
  • Install additional libraries for Rtools. You want the package that's called "local tree". Put those libraries somewhere gcc can find them.

Linux

To build under Linux make sure you have the headers for libX11 and libfftw3 (optionally, libtiff as well). On my Ubuntu system this seems to be enough:

sudo apt-get install libfftw3-dev libX11-dev libtiff-dev

External dependencies

OS X users need XQuartz. On its own imager supports JPEG, PNG, TIFF and BMP formats. If you need support for other file types install ImageMagick. To load and save videos you'll need ffmpeg, no file formats are supported natively.

Getting started

Here's a small demo that actually demonstrates an interesting property of colour perception:

library(imager)
library(purrr)
parrots <- load.example("parrots")
plot(parrots)
#Define a function that converts to YUV, blurs a specific channel, and converts back
bchan <- function(im,ind,sigma=5) { 
	im <- RGBtoYUV(im)
	channel(im,ind) <- isoblur(channel(im,ind),sigma); 
	YUVtoRGB(im)
}
#Run the function on all three channels and collect the results as a list
blurred <- map_il(1:3,~ bchan(parrots,.))
names(blurred) <- c("Luminance blur (Y)","Chrominance blur (U)","Chrominance blur (V)")
plot(blurred)

We're much more sensitive to luminance edges than we are to colour edges.

Documentation is available here. To get a list of all package functions, run: ls(pos = "package:imager")

Important warning on memory usage

All images are stored as standard R numeric vectors (i.e., double-precision), meaning that they take up a lot of memory. It's easy to underestimate how much storage you need for videos, because they take up so little space in a compressed format. Before you can work on it in R a video has to be fully decompressed and stored as double-precision floats. To get a sense of the size, consider a low-resolution (400x300), colour video lasting 120 sec. The video might take up a few MBs when compressed. To store it in memory, you'll need: (400x300) x (25x120) x 3 values, corresponding to (space)x(time)x(colour). In addition, each value costs 8 bytes of storage, for a grand total of 8GB of memory.

For out-of-memory processing of videos, see the experimental package imagerstreams.

Current status

Imager is fully functional but still young, so the API might change. Open an issue on Github or email me if you've found a bug or would like to suggest a feature.

Contributing to imager

If you want to add features or fix a bug, just fork this repository and send me a pull request (they're welcome). Consider contributing documentation too: imager has got quite large over time, and it's in need of more how-to's and tutorials!

Contributors

The package's author is Simon Barthelmé (Gipsa-lab, CNRS). The following people have gracefully contributed code, bug fixes or testing:

  • Stefan Roediger
  • Aaron Robotham
  • Martin Roth
  • Jan Wijffels
  • Hong Ooi

Let me know if you're missing from the list!

Test pictures

Imager ships with four test pictures and a video. Two (parrots and boats) come from the Kodak set. Another is a sketch of birds by Leonardo, from Wikimedia. Also from Wikimedia: the Hubble Deep field. The test video comes from xiph.org's collection.

Copy Link

Version

Install

install.packages('imager')

Monthly Downloads

11,372

Version

0.41.1

License

LGPL

Issues

Pull Requests

Stars

Forks

Maintainer

Simon Barthelme

Last Published

May 30th, 2018

Functions in imager (0.41.1)

boxblur

Blur image with a box filter (square window)
cimg2im

Convert cimg to spatstat im object
channels

Split a colour image into a list of separate channels
boxblur_xy

Blur image with a box filter.
get_hessian

Return image hessian.
ci

Concatenation for image lists
circles

Add circles to plot
grab

Select image regions interactively
iiply

Split an image, apply function, recombine the results as an image
cimg.use.openmp

Control CImg's parallelisation
capture.plot

Capture the current R plot device as a cimg image
draw_circle

Draw circle on image
idply

Split an image along axis, apply function, return a data.frame
draw_rect

Draw rectangle on image
%inr%

Check that value is in a range
grayscale

Convert an RGB image to grayscale
crop.borders

Crop the outer margins of an image
cimg.extract

Various shortcuts for extracting colour channels, frames, etc
center.stencil

Center stencil at a location
deriche

Apply recursive Deriche filter.
as.imlist.list

Convert various objects to image lists
boats

Photograph of sailing boats from Kodak set
cannyEdges

Canny edge detector
boundary

Find the boundary of a shape in a pixel set
bucketfill

Bucket fill
contours

Return contours of image/pixset
correlate

Correlation/convolution of image by filter
clean

Clean up and fill in pixel sets (morphological opening and closing)
coord.index

Coordinates from pixel index
common_pixsets

Various useful pixsets
get.stencil

Return pixel values in a neighbourhood defined by a stencil
colorise

Fill in a colour in an area given by a pixset
cimg

Create a cimg object
imchange

Modify parts of an image
frames

Split a video into separate frames
diffusion_tensors

Compute field of diffusion tensors for edge-preserving smoothing.
imappend

Combine a list of images into a single image
displacement

Estimate displacement field between two images.
display.list

Display image list using CImg library
imnoise

Generate (Gaussian) white-noise image
get_gradient

Compute image gradient.
get.locations

Return coordinates of subset of pixels
implot

Plot objects on image using base graphics
distance_transform

Compute Euclidean distance function to a specified value.
draw_text

Draw text on an image
liply

Apply function to each element of a list, then combine the result as an image by appending along specified axis
load.dir

Load all images in a directory
display.cimg

Display image using CImg library
extract_patches

Extract image patches and return a list
display

Display object using CImg library
ilply

Split an image along axis, apply function, return a list
haar

Compute Haar multiscale wavelet transform.
imhessian

Compute image hessian.
hough_line

Hough transform for lines
flatten.alpha

Flatten alpha channel
hough_circle

Circle detection using Hough transform
im_split

Split an image along a certain axis (producing a list)
cimg.dimensions

Image dimensions
iminfo

Return information on image file
im2cimg

Convert an image in spatstat format to an image in cimg format
imager

imager: an R library for image processing, based on CImg
resize_doubleXY

Resize image uniformly
resize

Resize image
highlight

Highlight pixel set on image
imlap

Compute image Laplacian
imcoord

Coordinates as images
imdraw

Draw image on another image
grow

Grow/shrink a pixel set
erode

Erode/dilate image by a structuring element.
imeval

Evaluation in an image context
imdirac

Generates a "dirac" image, i.e. with all values set to 0 except one.
gsdim

Grayscale dimensions of image
imsharpen

Sharpen image.
imsplit

Split an image along a certain axis (producing a list)
imsub

Select part of an image
imlist

Image list
imager.replace

Replace part of an image with another
imager.subset

Array subset operator for cimg objects
imrep

Replicate images
imrotate

Rotate an image along the XY plane.
RGBtoHSL

Colour space conversions in imager
imshift

Shift image content.
imwarp

Image warping
inpaint

Fill-in NA values in an image
index.coord

Linear index in internal vector from pixel coordinates
interact

Build simple interactive interfaces using imager
interp

Interpolate image values
imager.combine

Combining images
patchstat

Return image patch summary
medianblur

Blur image with the median filter. In a window of size n x n centered at pixel (x,y), compute median pixel value over the window. Optionally, ignore values that are too far from the value at current pixel.
is.imlist

Check that an object is an imlist object
patch_summary_cimg

Extract a numerical summary from image patches, using CImg's mini-language Experimental feature.
imfill

Create an image of custom size by filling in repeated values
is.pixset

Check that an object is a pixset object
save.image

Save image
imgradient

Compute image gradient
mirror

Mirror image content along specified axis
load.video

Load a video using ffmpeg
periodic.part

Compute the periodic part of an image, using the periodic/smooth decomposition of Moisan (2011)
split_connected

Split pixset into connected components
is.cimg

Checks that an object is a cimg object
permute_axes

Permute image axes
isoblur

Blur image isotropically.
make.video

Make/save a video using ffmpeg
map_il

Type-stable map for use with the purrr package
squeeze

Remove empty dimensions from an array
pixel.grid

Return the pixel grid for an image
nfline

Plot a line, Hesse normal form parameterisation
magick

Convert a magick image to a cimg image or image list
px.flood

Select a region of homogeneous colour
plot.imlist

Plot an image list
pixset

Pixel sets (pixsets)
rm.alpha

Remove alpha channel and store as attribute
pad

Pad image with n pixels along specified axis
load.example

Load example image
label

Label connected components.
rotate_xy

Rotate image by an arbitrary angle, around a center point.
stencil.cross

A cross-shaped stencil
watershed

Compute watershed transform.
warp

Warp image
px.na

A pixset for NA values
renorm

Renormalise image
load.image

Load image from file or URL
threshold

Threshold grayscale image
vanvliet

Young-Van Vliet recursive Gaussian filter.
play

Play a video
plot.cimg

Display an image using base graphics
where

Return locations in pixel set
as.cimg.raster

Convert a raster object to a cimg object
add.colour

Add colour channels to a grayscale image or pixel set
as.cimg.array

Turn an numeric array into a cimg object
as.data.frame.cimg

Convert a pixel image to a data.frame
as.cimg

Convert to cimg object
as.data.frame.imlist

Convert image list to data.frame
as.cimg.data.frame

Create an image from a data.frame
as.cimg.function

Create an image by sampling a function
FFT

Compute the Discrete Fourier Transform of an image
RasterPackage

Convert a RasterLayer/RasterBrick to a cimg image/image list
as.igraph.pixset

Form an adjacency graph from a pixset
as.pixset

Methods to convert various objects to pixsets
as.raster.cimg

Convert a cimg object to a raster object for plotting
as.igraph.cimg

Form a graph from an image
as.data.frame.pixset

Methods to convert pixsets to various objects
bbox

Compute the bounding box of a pixset
blur_anisotropic

Blur image anisotropically, in an edge-preserving way.
at

Return or set pixel value at coordinates
autocrop

Autocrop image region