直观讲解Matlab的im2col函数

概述

im2col的作用是即重排图像块为矩阵列。
其调用形式为:B = im2col(A,[m n],block_type);
参数说明:
A:要被重排的矩阵;
[m n]:指定分割的小子块矩阵的尺寸;
block_type:子块矩阵分割的方式,可以取值为’distinct’或者’sliding’。“distinct”表示各子块矩阵不重叠,倘若A中有不足以构成[m n]大小的子块,则以0填充。接着将这些子块按列序重排成B矩阵的一个列。“sliding”
B:将A重排后的矩阵。

distinct 型

首先我们输入语句并通过执行语句的结果来分析。那么我们究竟怎样得到的B?

>> 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

然后在上面按先行序再列序切割子块,共有4个子块,

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

最后按列排序上面的子块成为B的一列即可。

sliding型

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

>> A = [1 2 3; 4 5 6; 7 8 9]
>> B = im2col(X, [2 2], 'sliding')

B =

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

有了前面的讲解应该很容易理解sliding型的,只不过此时的子块之间是有重叠的,而且值得注意的是,子块是先在列上进行滑动,然后才在行方向进行滑动。也形成了4个子块,如下

1      2
4      5
=====在列方向上移动“一步”=========
4      5
7      8  
========回到矩阵“顶部”,并在行方向移动一步=================
2      3
5      6
====================
5      6
8      9

然后将上面的子块重排成B的一列即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值