Rearrange image blocks into columns
B = im2col(A,[m n],block_type)
B = im2col(A,'indexed',...)
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 Aij is m-by-n, then B = [A11(:) A12(:) A21(:) A22(:)].
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);
The input image A can be numeric or logical. The output matrix B is of the same class as the input image.
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