0

我正在尝试为涉及指纹识别的更大项目编写代码。我正在尝试使用 blockproc 来占用我的 128x128 矩阵的 3x3“窗口”。我有一个 52x9 矩阵,其中矩阵的每一行都描述了一个分叉模式。我需要做的是从 128x128 矩阵中取出 3x3 块,同时从左到右和从上到下移动。然后使用神经网络将每个部分与分叉模式矩阵进行比较。我需要进行光栅化以确保获得 128x128 矩阵的所有可能的 3x3 表示。换句话说,我需要向右移动 1 个像素,获取 3x3 窗口,运行网络,然后再次移动 1 个像素,等等……如果我不能再向右移动(无法创建3x3 窗口),然后我向下移动 1 个像素并再次重复水平扫描过程。

一个简单的 3x5 数组:

A = [10 11 12 13 14;
     15 16 17 18 19;
     20 21 22 23 24];

使用 2x3 窗口执行光栅扫描将产生以下矩阵

A1 = [10 11 12;
      15 16 17];

A2 = [11 12 13;
      16 17 18];

A3 = [12 13 14;
      17 18 19];

A4 = [15 16 17;
      20 21 22];

A5 = [16 17 18;
      21 22 23];

A6 = [17 18 19;
      22 23 24];
4

2 回答 2

2

您可以colfilt()记住 MATLAB 默认情况下始终沿行运行,因此您需要翻转 A 和块大小。im2col()您可以检查内部调用的块序列colfilt()

im2col(A', [3,2],'sliding')
ans =
    10    11    12    15    16    17
    11    12    13    16    17    18
    12    13    14    17    18    19
    15    16    17    20    21    22
    16    17    18    21    22    23
    17    18    19    22    23    24

其中每一列逐渐是 A1, A2, ... 或更准确地说reshape(A1',[],1), reshape(A2',[],1).

于 2013-04-27T02:25:46.097 回答
0

两个循环一个用于行,一个用于列有什么问题:

for row=1:128-3

for col=1:128-3

subMatrix = M(row,col:col+3)

% send to neural network function
end

end
于 2013-04-27T02:33:31.623 回答