CV预备(二): im2col与col2im

目录

  • 前言
  • im2col
  • col2im
  • 最后

前言

Matlab矩阵处理的函数真的是太多了, 这里来看两个矩阵重排的函数im2colcol2im.


im2col

这里有3种形式, 如下:

  • B = im2col(A, [m n])
  • B = im2col(A, [m n], 'sliding')
  • B = im2col(A, [m n], 'distinct')

B = im2col(A, [m n])B = im2col(A, [m n], 'sliding') 是等价的. 所以先从它开始说吧:

B = im2col(A, [m n], 'sliding')

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
B = im2col(A, [2 2])

输出如下:

A =

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16


B =

     1     5     9     2     6    10     3     7    11
     5     9    13     6    10    14     7    11    15
     2     6    10     3     7    11     4     8    12
     6    10    14     7    11    15     8    12    16

简单来说, 就是以步长为1进行滑动生成子矩阵, 子矩阵大小为[m n]. 所以B中的每一个列都是子矩阵.


B = im2col(A, [m n], 'distinct')

这个和sliding最大的差别就是子矩阵不重叠. 整体生成方式没有太大变化.


col2im

col2im就是im2col的逆过程. col2im有3中形式, 如下:

  • A = col2im(B, [m n], [M N])
  • A = col2im(B, [m n], [M N], 'sliding')
  • A = col2im(B, [m n], [M N], 'distinct')

还是和im2col相似, A = col2im(B, [m n], [M N])A = col2im(B, [m n], [M N], 'sliding') 是一个效果.

A = col2im(B, [m n], [M N], 'sliding')

代码如下:

B = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A = col2im(B, [1 1], [2, 8], 'sliding')

输出如下:

B =

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16


A =

     1     9     2    10     3    11     4    12
     5    13     6    14     7    15     8    16

可以看到, 依旧是竖着进行滑动, col2im的作用就是按照给的尺寸重排矩阵.


A = col2im(B, [m n], [M N], 'distinct')

B = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A = col2im(A, [2 2], [2 8], 'distinct')

输出如下:

B =

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16


A =

     1     9     2    10     3    11     4    12
     5    13     6    14     7    15     8    16

可以看到sliding输出结果是相同的, 但是内在逻辑并不同.


最后

喜欢记得点赞或者关注哦, 有意见或者建议评论区见~


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券