Matlab之 im2col 函数学习

概述

函数原型: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分割成的四个子矩阵是:
Matlab之 im2col 函数学习_第1张图片
按照子矩阵的列进行排列得到矩阵B。

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

参考博客:
https://blog.csdn.net/Chaolei3/article/details/79420059
https://blog.csdn.net/theonegis/article/details/50958604

你可能感兴趣的:(Matlab)