主要内容

im2col

将图像块重新排列为列

说明

B = im2col(A,[m n]) 将大小为 m×n 的滑动图像邻域重新排列为列,不进行零填充,并在矩阵 B 中返回串联后的列。

示例

B = im2col(A,[m n],blockType) 还使用 blockType 参量指定图像块是离散块还是滑动邻域。

对于离散块处理,im2col 函数在必要时填充图像 A。有关填充值的详细信息,请参阅提示

B = im2col(A,"indexed",[m n],blockType)A 解释为索引图像。

示例

全部折叠

创建一个矩阵。

A = reshape(linspace(0,1,16),[4 4])'
A = 4×4

         0    0.0667    0.1333    0.2000
    0.2667    0.3333    0.4000    0.4667
    0.5333    0.6000    0.6667    0.7333
    0.8000    0.8667    0.9333    1.0000

将值重新排列为按列排列。

B = im2col(A,[2 2])
B = 4×9

         0    0.2667    0.5333    0.0667    0.3333    0.6000    0.1333    0.4000    0.6667
    0.2667    0.5333    0.8000    0.3333    0.6000    0.8667    0.4000    0.6667    0.9333
    0.0667    0.3333    0.6000    0.1333    0.4000    0.6667    0.2000    0.4667    0.7333
    0.3333    0.6000    0.8667    0.4000    0.6667    0.9333    0.4667    0.7333    1.0000

计算均值。

M = mean(B)
M = 1×9

    0.1667    0.4333    0.7000    0.2333    0.5000    0.7667    0.3000    0.5667    0.8333

将值重新排列回其原始的按行方向。

newA = col2im(M,[1 1],[3 3])
newA = 3×3

    0.1667    0.2333    0.3000
    0.4333    0.5000    0.5667
    0.7000    0.7667    0.8333

输入参数

全部折叠

图像,指定为二维灰度图像、二维二值图像或二维索引图像。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

图像块大小,指定为二元素向量。m 是图像块中的行数,n 是列数。

图像块类型,指定为 "sliding" 以指示滑动邻域,或 "distinct" 以指示离散块。

输出参量

全部折叠

图像块,以具有 m*n 行的数值矩阵或逻辑矩阵形式返回。列数取决于图像块是离散块还是滑动邻域。B 的每列包含 A 的一个图像块或邻域,该块或邻域重构为一个列向量。

  • 对于不同块处理,B 的列数等于 Am×n 块的数量。例如,如果 A 的大小为 [mm nn],则 B 具有 (mm/m)*(nn/n) 列。

  • 对于滑动邻域处理,B 的列数等于 Am×n 邻域的数量。例如,如果 A 的大小为 [mm nn],则 B 具有 ((mm-m+1)*(nn-n+1)) 列。

矩阵 B 中列的顺序由按列方式遍历图像 A 确定。例如,如果 A 由排列为 A = [A11 A12; A21 A22] 的不同块 Aij 组成,则 B = [A11(:) A21(:) A12(:) A22(:)]

提示

  • 对于不同块处理,im2col 在必要时对 A 进行零填充,使其大小是 m×n 的整数倍。当 A 的数据类型为 uint8uint16logical 时,填充值为 0。对于其他数据类型,填充值取决于 A 是否解释为索引图像。

    • A 解释为索引图像时,填充值为 1

    • A 未被解释为索引图像时,填充值为 0

  • im2colB 的列进行排序,以便可以根据 reshape 对它们重构以形成矩阵。

    例如,假设您使用函数(例如 sum(B))为 B 的每列返回一个标量。您可以使用以下调用直接将结果存储在大小为 (mm-m+1)×(nn-n+1) 的矩阵中。

    B = im2col(A,[m n],"sliding");
    C = reshape(sum(B),mm-m+1,nn-n+1);

版本历史记录

在 R2006a 之前推出