概述
函数原型:B = im2col(A,[m n],block_type)
函数作用:重排图像块为矩阵列
参数说明:
A:要被重排的矩阵;
[m n]:指定分割的小子块矩阵的尺寸;
block_type:子块矩阵分割的方式,可以取值为’distinct’或者’sliding’。
B:将A重排后的矩阵。
1.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是3×3的,并不是子块2×2的整数倍,根据概述,我们需要在A中填充0,使之恰好能被2×2的子块整除,所以填充后的A矩阵为:
1 2 3 0
4 5 6 0
7 8 9 0
0 0 0 0
将矩阵A分割成的四个子矩阵是:
按照子矩阵的列进行排列得到矩阵B。
2.block_type=sliding
当block_type为sliding时,以子块滑动的方式将A分解成m×n的子矩阵,并将分解以后的子矩阵沿列的方向转换成B的列。子块滑动的方式每次移动一行或者一列。
A =
1 2 3
4 5 6
7 8 9
>> B = im2col(A, [2 2], 'sliding')
B =
1 4 2 5
4 7 5 8
2 5 3 6
5 8 6 9
此时的子块之间是有重叠的,子块是先在列上进行滑动,然后才在行方向进行滑动。
将矩阵A分割成的四个子矩阵是:
按照子矩阵的列进行排列得到矩阵B。
对于sliding类型,如果设A为m×n的,block 块为[p q],则最后得到的B矩阵的行数为p×q,列数为(m−p+1)×(n−q+1)。
参考博客:
https://blog.youkuaiyun.com/Chaolei3/article/details/79420059
https://blog.youkuaiyun.com/theonegis/article/details/50958604