# im2col

Rearrange image blocks into columns

## Syntax

`B = im2col(A,[m n],block_type)B = im2col(A,'indexed',...)`

## Description

`B = im2col(A,[m n],block_type)` rearranges image blocks into columns. `block_type` is a string that can have one of these values. The default value is enclosed in braces (`{}`).

Value

Description

`'distinct'`

Rearranges each distinct `m`-by-`n` block in the image `A` into a column of `B`. `im2col` pads `A` with 0's, if necessary, so its size is an integer multiple of `m`-by-`n`. If `A = [A11 A12; A21 A22]`, where each `A`ij is `m`-by-`n`, then `B = [A11(:) A12(:) A21(:) A22(:)]`.

`{'sliding'}`

Converts each sliding `m`-by-`n` block of `A` into a column of `B`, with no zero padding. `B` has `m*n` rows and contains as many columns as there are `m`-by-`n` neighborhoods of `A`. If the size of `A` is ```[mm nn]```, then the size of `B` is (`m*n`)-by-`((mm-m+1)*(nn-n+1))`.

For the sliding block case, each column of `B` contains the neighborhoods of `A` reshaped as `NHOOD(:)` where `NHOOD` is a matrix containing an `m`-by-`n` neighborhood of `A`. `im2col` orders the columns of `B` so that they can be reshaped to form a matrix in the normal way. For Examples, suppose you use a function, such as `sum(B)`, that returns a scalar for each column of `B`. You can directly store the result in a matrix of size (`mm-m+1`)-by-(`nn-n+1`), using these calls.

```B = im2col(A,[m n],'sliding'); C = reshape(sum(B),mm-m+1,nn-n+1);```

`B = im2col(A,'indexed',...)` processes `A` as an indexed image, padding with 0's if the class of `A` is `uint8` or `uint16`, or 1's if the class of `A` is `double`.

## Class Support

The input image `A` can be numeric or logical. The output matrix `B` is of the same class as the input image.

## Examples

Calculate the local mean using a `[2 2]` neighborhood with zero padding:

```A = reshape(linspace(0,1,16),[4 4])' B = im2col(A,[2 2]) M = mean(B) newA = col2im(M,[1 1],[3 3])```

The output appears like this:

```newA = 0.1667 0.2333 0.3000 0.4333 0.5000 0.5667 0.7000 0.7667 0.8333```