dctmtx: Discrete Cosine Transform Matrix

View source: R/dctmtx.R

dctmtxR Documentation

Discrete Cosine Transform Matrix

Description

Compute the discrete cosine transform matrix.

Usage

dctmtx(n)

Arguments

n

Size of DCT matrix, specified as a positive integer.

Details

A DCT transformation matrix is useful for doing things like JPEG image compression, in which an 8x8 DCT matrix is applied to non-overlapping blocks throughout an image and only a sub-block on the top left of each block is kept. During restoration, the remainder of the block is filled with zeros and the inverse transform is applied to the block.

The two-dimensional DCT of A can be computed as D %*% A %*% t(D). This computation is sometimes faster than using dct2, especially if you are computing a large number of small DCTs, because D needs to be determined only once. For example, in JPEG compression, the DCT of each 8-by-8 block is computed. To perform this computation, use dctmtx to determine D of input image A, and then calculate each DCT using D %*% A %*% t(D) (where A is each 8-by-8 block). This is faster than calling dct2 for each individual block.

Value

Discrete cosine transform, returned as a vector or matrix.

Author(s)

Paul Kienzle, pkienzle@users.sf.net.
Conversion to R by Geert van Boxtel, G.J.M.vanBoxtel@gmail.com.

See Also

dct, dct2, idct, idct2

Examples

D <- dctmtx(8)

#if (requireNamespace("imager", quietly = TRUE)) {
#   boats <- imager::boats
#   A <- imager::grayscale(boats)[1:256, 65:320, 1, 1]  # make it 256*256
#   plot(imager::as.cimg(A), axes = FALSE, main = "Boats from imager package")
#   D <- dctmtx(nrow(A))
#   ctrans <- D %*% A %*% t(D)
#   ctrans2 <- dct2(A)
#   all.equal(ctrans, ctrans2)
# }


gjmvanboxtel/gsignal documentation built on Nov. 22, 2023, 8:19 p.m.