Matlab中的im2col函数

官方文档对其功能的描述为为:Rearrange image blocks into columns. 即重排图像块为矩阵列。
函数原型为:

B = im2col(A,[m n],block_type)

block_type的取值可以为’distinct’或者’sliding’。


当block_type为distinct时,将 A 沿列的方向分解为互不重叠的子矩阵,并将分解以后的子矩阵沿列的方向转换成 B 的列,若不足 m×n ,以0补足。听着有些拗口,看个实例。

>> A = [1 2 3; 4 5 6; 7 8 9]

A =

     1     2     3
     4     5     6
     7     8     9

>> B = im2col(A, [2 2], 'distinct')

B =

     1     7     3     9
     4     0     6     0
     2     8     0     0
     5     0     0     0

A=147258369

B=1425708036009000

将矩阵 A 分割成的四个子矩阵是:
[1425][7080][3600][9000]

按照子矩阵的列进行排列得到矩阵 B


当block_type为sliding时,以子块滑动的方式将 A 分解成 m×n 的子矩阵,并将分解以后的子矩阵沿列的方向转换成 B 的列。子块滑动的方式每次移动一行或者一列。

>> B = im2col(X, [2 2], 'sliding')

B =

     1     4     2     5
     4     7     5     8
     2     5     3     6
     5     8     6     9

B=1425475825365869

将矩阵 A 分割成的四个子矩阵是:
[1425][4758][2536][5869]

按照子矩阵的列进行排列得到矩阵B。

对于sliding类型,如果设 A m×n 的, [p q] 的block 块,则最后矩阵的行数为 p×q ,列数为 (mp+1)×(nq+1)

你可能感兴趣的:(数学(概念与方法))